Skip to main content

AI Remediation Guide

AI Remediation is the Fix rung of the verb ladder: turning waste findings into action. Every plan gets remediation on the Remediation page: each finding shows its recommendation plus an Action steps section. Open it and CloudWise writes a step-by-step Console and CLI walkthrough for that finding; where a walkthrough can't be produced, you still get the AWS CLI command to fix it yourself, where one applies. On the Agentic plan, the same findings also get one-click execution. You review the agent's plan (generated by Amazon Bedrock, or by a deterministic template for some waste types), approve it, and CloudWise runs the fix in your AWS account, with a rollback path wherever the action can be reversed.

Manual vs. automatic remediationโ€‹

Remediation is one experience that expands with your plan. Open the Remediation page and you'll see your waste findings with how to fix each one:

PlanWhat you get
Free / ShieldEvery finding with its recommendation and an Action steps section (a generated Console and CLI walkthrough, with the AWS CLI command, where one applies, as the fallback) that you run yourself, filterable by confidence, risk, category, and account
AgenticThe same findings โ€” plus a one-click Approve & fix that executes the plan in your account (with pre-checks and rollback)
ComplianceSteps to apply yourself: findings from your Air-Gapped uploads show a recommendation and Action steps. CloudWise makes no plans and runs no fixes (those are Agentic only), and Compliance connects no AWS account

The fix instructions and the risk/confidence model (below) apply to everyone. The rest of this guide covers the automatic (Agentic) execute flow โ€” planning, approval, execution, and rollback.

Agentic plan required to execute

Guided fix instructions appear on the Remediation page. Only the Agentic plan ($49/mo or $399/year) adds one-click execution inside your account. Free and Shield are propose-only (you run the steps). Compliance also shows steps you apply yourself: its findings come from your Air-Gapped uploads, because it connects no AWS account, and CloudWise makes no plans and runs no fixes for it. Upgrade โ†’


Architecture Overviewโ€‹

The diagram below shows the end-to-end flow of execute-mode remediation โ€” from approving an action on the Remediation page through IAM role chaining, pre-checks, execution, and rollback.

CloudWise execute-mode remediation architecture

Key components:

  • Remediation page โ€” Review findings, approve remediation actions, and monitor execution status (the same page shows guided fix instructions on every plan)
  • IAM Hop 1 (CloudWise Service Role) โ€” CloudWise assumes its own service role to initiate cross-account access
  • IAM Hop 2 (Customer Remediation Role) โ€” A scoped role in your AWS account with only cost-saving permissions
  • Pre-Check Phase โ€” Read-only checks (e.g., describe_instances, describe_volumes) verify the resource state and resolve placeholders (e.g., VOLUME_ID_FROM_PRECHECK) before any writes occur
  • Execution Phase โ€” Performs the approved actions (e.g., create snapshot, delete volume) with full CloudWatch logging and metrics
  • Rollback Path: Snapshots and other artifacts the executor creates are recorded on the action. Rollback runs only when you trigger it, on a completed action or on a failed multi-step action to undo the steps that ran; CloudWise never rolls back automatically, including after a partial failure
  • CloudWatch Logs โ€” The executor writes its logs to CloudWatch Logs, and each action is also recorded in the remediation audit log

๐ŸŽฏ How It Worksโ€‹

CloudWise Remediation follows a strict human-in-the-loop workflow. No action is ever executed without your explicit approval.

Waste Detection Scan
โ†“
Confidence Filtering (your threshold)
โ†“
AI Remediation Planner (Bedrock โ€” Anthropic Claude)
โ†“
Deterministic Risk Classification
โ†“
Policy Filtering (your rules)
โ†“
Plan Validation (allow-list enforcement)
โ†“
Action Created โ†’ Pending Approval
โ†“
You Review & Approve (or Reject)
โ†“
CloudWise Executes via Cross-Account Role
โ†“
Verification & Rollback Available

Pipeline Stepsโ€‹

  1. Waste Detection โ€” CloudWise scans the AWS regions where your account has resources (found from your cost data, plus us-east-1 for global checks) for idle, unused, and over-provisioned resources across 186 waste types
  2. Confidence Filtering โ€” Each finding has a confidence level (High, Medium, or Low). Only findings at or above your configured Minimum Confidence Level proceed to planning. Default: Medium once you have saved a policy in Settings โ†’ Remediation Policy (skips Low confidence findings). Until you save one, plans are not filtered by confidence
  3. Remediation Planning: When you click Generate plan on an eligible finding, it is sent to Amazon Bedrock (Anthropic Claude), or for some waste types to a deterministic template, which generates a specific execution plan with pre-checks, API calls, and rollback steps. Plans are not generated automatically after each scan
  4. Risk Classification โ€” Every action is deterministically classified as Low, Medium, or High risk based on the waste type (no LLM involvement in risk scoring)
  5. Policy Filtering โ€” Your remediation policy filters proposals by risk threshold, confidence threshold and excluded waste types; excluded tags and resource IDs are enforced when an action is about to execute and block it then
  6. Allow-List Validation โ€” Every API call in the plan is validated against a strict allow-list of 40+ AWS services. Any plan containing disallowed actions is rejected automatically
  7. Approval Queue โ€” Valid actions appear on the Remediation page with status Pending Approval and a 72-hour expiry window
  8. Execution โ€” Approved actions execute via a scoped IAM role in your AWS account with pre-flight checks
  9. Audit Trail โ€” Every action is logged with timestamps, results, rollback information, and Bedrock model/token usage

๐Ÿš€ Getting Startedโ€‹

Step 1: Deploy the Remediation Roleโ€‹

AI Remediation requires a write-access IAM role in each AWS account you want to remediate. This is separate from the read-only role used for cost monitoring.

  1. Go to Settings โ†’ Remediation Policy
  2. Click Deploy in AWS Console
  3. Upload the downloaded template when the CloudFormation console opens
  4. Enter the ExternalId parameter, then deploy. Leave the other parameters at their defaults
Deploying the template

The settings page downloads the template and opens the CloudFormation console automatically. The template's ExternalId parameter has no default: it must be the per-account value CloudWise issues for that account. A value you make up yourself does not reach CloudWise, and remediation fails closed until the account's stored ExternalId matches. If the app does not show you that value, contact CloudWise support before deploying.

The CloudWiseRemediationRole is scoped to cost-saving actions only:

  • โœ… Stop/terminate EC2 instances
  • โœ… Delete unattached EBS volumes and old snapshots
  • โœ… Release unused Elastic IPs
  • โœ… Delete idle NAT Gateways and Load Balancers
  • โœ… Modify over-provisioned resources (Lambda, DynamoDB, EBS)
  • โœ… Clean up unused secrets, KMS keys, API Gateways
  • โŒ No IAM or security group access, and no changes to VPCs or subnets themselves (the role can delete NAT gateways and VPC endpoints)
  • โŒ No data access (S3 objects, databases)
  • โŒ 15-minute session cap (cannot maintain persistent access)

Step 2: Configure Your Policyโ€‹

Navigate to Settings โ†’ Remediation Policy to customize:

  • Confidence threshold โ€” How certain a finding must be before generating a plan
  • Risk threshold โ€” Which risk levels to include
  • Safety caps โ€” Maximum daily actions and savings impact
  • Exclusions โ€” Tags, resource IDs, and waste types to skip
  • Notifications โ€” Email and Slack alerts

Step 3: Review & Approve Actionsโ€‹

On the Remediation page, click Generate plan on a finding you want fixed. The plan appears as an action; review it, then approve or reject.


โš™๏ธ Configuration Referenceโ€‹

Remediation Engine Toggleโ€‹

SettingDefaultDescription
Enable AI-powered remediation suggestionsOnMaster switch. When off, no new plans are generated and approved actions are not executed: they fail with a policy-blocked reason and the credit is refunded.

Your plan is checked again right before an approved action runs. If you approved an action on Agentic and moved to Compliance, Shield or Free before it ran, it is not run: it fails with "remediation is not part of your current plan", nothing changes in your AWS account, and its credit is refunded. On Compliance the Remediation Policy page shows your stored policy read-only, because remediation is not part of that plan.

Risk & Confidence Controlsโ€‹

Confidence and risk are independent filters that work at different stages of the pipeline:

  • Confidence = "How certain are we this resource is waste?" โ€” Filters findings before plan generation. Based on usage signals (e.g., an EBS volume that is unattached is high confidence; a small log group with no retention policy is low confidence, a large one is medium).
  • Risk = "How impactful would this remediation be?" โ€” Filters actions during plan generation. Based on the type of remediation (e.g., deleting an unattached volume is low risk; stopping a running instance is high risk).

A finding can be high-confidence + high-risk (e.g., an idle EC2 instance clearly unused for 30 days) or low-confidence + low-risk (e.g., a log group flagged for missing retention policy). The two dimensions are orthogonal.

Minimum Confidence Levelโ€‹

Controls which waste findings are eligible for remediation planning:

LevelSettingWhat Gets Considered
High (Most certain)Only highest-confidence findingsFindings whose signal is a plain fact, such as an unattached resource or zero recorded usage (each check sets its own threshold; see Waste Detection)
Medium (Recommended)High + Medium confidenceAbove + resources with moderate signals (low utilization, no recent changes, outdated configurations)
Low (All findings)All confidence levelsAbove + resources flagged by heuristics (missing best-practice settings, potential over-provisioning)
When to lower confidence

If you see waste findings in your dashboard that don't have remediation actions, they may be filtered by the confidence threshold. Lowering it to Low will generate plans for all findings, but some may be less certain about the resource being actual waste. Review these plans more carefully.

Maximum Risk Levelโ€‹

Controls which risk levels are proposed for remediation:

LevelSettingWhat Gets Proposed
Low (Safest)Only lowest-risk actionsUnattached volumes, old snapshots, unused Elastic IPs, lifecycle policies, Lambda timeout/runtime/ARM64 recommendations, excessive log retention, empty log groups, Glue job timeouts, failed Glue job retries, EMR auto-termination, previous-gen instances, Spot opportunities
Medium (Recommended)Low + Medium riskAbove + stopped instances, GP2โ†’GP3 migrations, idle NAT Gateways, idle load balancers, unused secrets and API Gateways, idle Lambda Provisioned Concurrency, over-provisioned EMR clusters, WorkSpaces AutoStop/pool optimization
High (All)All risk levelsAbove + idle running instances, idle databases, unused Lambda functions, idle services

Risk Classificationโ€‹

Every waste type is deterministically mapped to a risk level โ€” no AI/LLM is involved in risk scoring. The complete classification across all 186 classified waste types:

Low Risk โœ… โ€” Safe to act on immediately (78 waste types):

Waste TypeWhy It's Low Risk
unattached_ebsNot connected to any instance
old_ebs_snapshotAged out, point-in-time copy exists
orphaned_ebs_snapshotSource volume deleted โ€” snapshot serves no recovery purpose
ami_orphaned_snapshotAMI deregistered โ€” backing snapshot no longer needed
unattached_eipAWS charges an hourly price for every public IPv4 address, including unused EIPs (see the AWS VPC pricing page)
eip_on_stopped_instancePaying for idle elastic IP
incomplete_multipartIncomplete uploads consuming storage
old_ecr_imagesContainer images past retention
untagged_ecr_imagesUntagged images consuming registry space
old_log_groupAged-out log data
no_retention_log_groupInfinite retention accumulates cost
excessive_retention_log_groupRetention reduction โ€” old data ages out naturally
empty_log_groupDelete empty group โ€” zero data loss risk
unused_dashboardNo monitoring value
orphaned_dns_recordDNS record pointing to deleted resource
cloudtrail_s3_no_lifecycleCloudTrail S3 bucket without lifecycle rules
ecr_no_lifecycle_policyECR repo without image cleanup
no_lifecycle_policyS3 bucket without lifecycle configuration
no_lifecycle_efsEFS file system without lifecycle configuration
stopped_sagemaker_notebook_storageStopped notebook with ML storage charges
previous_gen_sagemaker_instanceOld-gen instance type โ€” recommend upgrade
high_lcu_cost_albALB with high LCU costs โ€” advise optimization
classic_lb_migrationClassic LB migration โ€” recommend upgrade to ALB/NLB
lambda_excessive_timeoutTimeout reduction โ€” no cost impact, improves hygiene
lambda_arm64_migrationARM64 migration opportunity โ€” architecture recommendation
lambda_old_runtimeDeprecated runtime โ€” housekeeping flag
s3_rapid_growthRecommendation-only โ€” advises lifecycle rules for fast-growing buckets
s3_wrong_storage_classRecommendation-only โ€” advises Intelligent-Tiering migration
s3_empty_bucketEmpty bucket cleanup โ€” zero data loss risk
s3_high_request_and_transfer_costRecommendation-only โ€” advises request pattern optimization
redshift_legacy_dc2Recommendation-only โ€” advises RA3 migration planning
redshift_concurrency_scaling_wasteWLM tuning recommendation โ€” no service impact
oversized_glue_jobAdvisory โ€” DPU right-sizing recommendation
glue_job_missing_timeoutTimeout reduction โ€” jobs still run, just fail faster if stuck
failed_glue_job_retryDisable retries โ€” jobs still run once, just don't retry on failure
glue_catalog_bloatAdvisory โ€” table version cleanup recommendation
ecs_container_insights_wasteMonitoring change โ€” basic ECS metrics remain free
backup_no_lifecycle_tieringAdvisory โ€” lifecycle tiering recommendation
stale_backup_plan_assignmentAdvisory โ€” backup plan selection cleanup
backup_copy_policy_overreachAdvisory โ€” cross-region copy policy review
s3_no_default_encryptionAdvisory โ€” recommends customer-managed KMS encryption
aurora_io_optimization_opportunityBilling config change โ€” switch to I/O-Optimized, no downtime
aurora_extended_support_costAdvisory โ€” recommends engine version upgrade to avoid surcharge
rds_extended_support_costAdvisory โ€” recommends RDS engine upgrade to avoid Extended Support surcharge
elasticache_extended_support_costAdvisory โ€” recommends ElastiCache engine upgrade to avoid Extended Support surcharge
elasticache_engine_migrationAdvisory โ€” recommends Valkey migration, which AWS prices lower than Redis OSS; Redis 7.x API compatible
elasticache_serverless_optimizationAdvisory โ€” recommends Serverless for spiky workloads, manual migration required
elasticache_data_tiering_opportunityAdvisory โ€” recommends R6gd data tiering for large datasets, manual migration required
eks_extended_support_costAdvisory โ€” recommends Kubernetes version upgrade to avoid EKS Extended Support charges
opensearch_extended_support_costAdvisory โ€” recommends domain version upgrade to avoid legacy support surcharge
documentdb_extended_support_costAdvisory โ€” recommends DocumentDB engine upgrade to avoid Extended Support surcharge
aurora_serverless_opportunityAdvisory โ€” recommends Serverless v2 migration for low-utilization clusters
neptune_serverless_opportunityRecommendation only โ€” Serverless migration requires new cluster
oversized_mq_brokerRecommendation only โ€” MQ doesn't support in-place instance changes
lightsail_unattached_static_ipUnattached static IP โ€” no instance dependency, flat monthly charge (see the Lightsail pricing page)
appsync_idle_subscriptionsAppSync idle subscriptions โ€” advisory (architecture review)
ri_opportunity_opensearchRI commitment purchase โ€” advisory, non-refundable
emr_missing_auto_terminationAdvisory โ€” auto-termination policy is a configuration setting, no workload impact
emr_previous_gen_instancesAdvisory โ€” recommends upgrading to current-gen instance types
emr_spot_opportunityAdvisory โ€” recommends Spot for task nodes, no impact on running workloads
beanstalk_unnecessary_albAdvisory โ€” switch from LoadBalanced to SingleInstance when min=max=1
beanstalk_previous_gen_instancesAdvisory โ€” recommends upgrading to current-gen instance types
workspaces_windows_license_optimizationAdvisory โ€” BYOL licensing review, no infrastructure changes
oversized_ec2_optimizerCompute Optimizer recommendation โ€” advisory rightsizing suggestion
oversized_ebs_optimizerCompute Optimizer recommendation โ€” advisory rightsizing suggestion
oversized_lambda_optimizerCompute Optimizer recommendation โ€” advisory rightsizing suggestion
oversized_rds_optimizerCompute Optimizer recommendation โ€” advisory rightsizing suggestion
ri_opportunity_ec2RI purchase recommendation โ€” advisory, informational only
ri_opportunity_rdsRI purchase recommendation โ€” advisory, informational only
ri_opportunity_elasticacheRI purchase recommendation โ€” advisory, informational only
ri_opportunity_redshiftRI purchase recommendation โ€” advisory, informational only
sp_opportunity_computeSP purchase recommendation โ€” advisory, informational only
sp_opportunity_ec2SP purchase recommendation โ€” advisory, informational only
sp_opportunity_sagemakerSP purchase recommendation โ€” advisory, informational only
savings_plan_coverage_gapSP coverage gap โ€” advisory, informational only
convertible_ri_exchange_opportunityConvertible RI exchange โ€” advisory, informational only
kinesis_on_demand_downgradeBilling mode switch โ€” reversible, no data impact
kinesis_extended_retention_wasteRetention decrease to default 24h โ€” no data loss for active consumers

Medium Risk โš ๏ธ โ€” Review before acting (74 waste types):

Waste TypeWhy It's Medium Risk
stopped_ec2_with_ebsEBS volumes still incurring charges
gp2_migrationPerformance characteristics change (GP2 โ†’ GP3)
over_provisioned_iopsIOPS reduction
over_provisioned_lambdaMemory/timeout reduction
lambda_provisioned_concurrency_idleDeleting/reducing PC configs affects cold start behavior
over_provisioned_dynamodbCapacity mode change
dynamodb_no_autoscalingSwitch to on-demand billing
idle_nat_gatewayMay have intermittent traffic
multiple_eips_per_instanceEIP consolidation
old_rds_snapshotAged RDS snapshot
old_documentdb_snapshotAged DocumentDB snapshot โ€” irreversible deletion
old_fsx_backupAged FSx backup โ€” irreversible deletion
old_backupPast retention window โ€” verify backup policy
idle_load_balancerLoad balancer with no healthy targets
low_traffic_albLoad balancer with near-zero traffic
unused_vpc_endpointVPC endpoint with no traffic
oversized_elasticacheCache cluster right-sizing
elasticache_replication_wasteNon-production replica removal โ€” reversible via increase_replica_count
oversized_ecs_taskTask definition right-sizing
ecs_no_autoscalingAuto-scaling configuration requires workload analysis
oversized_ecs_memoryMemory right-sizing โ€” may cause OOM if usage spikes
redshift_no_pauseCreates scheduled pause action โ€” reversible
idle_kinesis_streamStream with no throughput
over_provisioned_kinesisShard count reduction
kinesis_enhanced_fan_out_wasteDeregister idle enhanced fan-out consumer
kinesis_firehose_idleDelete idle Firehose delivery stream
old_glue_jobStale Glue job definition
idle_glue_crawlerCrawler with no recent runs
idle_state_machineStep Function with no executions
step_functions_retry_stormState machine with excessive retry ratio and failure rate
step_functions_high_transition_densityWorkflow with excessive transitions per success
step_functions_express_duration_wasteExpress workflow with high p95 duration
redundant_backupDuplicate backup
unused_secretSecrets Manager secret unused for 90+ days
idle_sagemaker_notebookNotebook instance running idle
oversized_sagemaker_endpointEndpoint with low CPU/memory utilization
oversized_msk_clusterDownsizing requires workload analysis
overprovisioned_documentdbInstance right-sizing requires workload analysis
oversized_neptuneInstance class change โ€” brief downtime
neptune_old_snapshotSnapshot deletion โ€” irreversible
oversized_fsxStorage right-sizing โ€” advisory only in v1
fsx_throughput_overprovisionedThroughput right-sizing โ€” advisory only in v1
underutilized_redshiftLow CPU but active connections โ€” right-sizing
oversized_opensearchNode rightsizing requires workload analysis
opensearch_ebs_overprovisionedEBS resizing requires planned reconfiguration
redshift_wlm_over_provisionedWLM concurrency right-sizing requires workload analysis
unused_api_gatewayAPI Gateway with zero calls in 30 days
unused_appsyncAppSync API with no queries
appsync_idle_cacheAppSync idle cache โ€” no hits in 14 days
unused_distributionUnused CloudFront distribution
unused_hosted_zoneUnused Route 53 hosted zone
unused_kms_keyUnused KMS key
unencrypted_ebs_volumeAdvisory โ€” encryption-at-rest gap, requires snapshot copy to encrypt
unencrypted_rds_instanceAdvisory โ€” encryption-at-rest gap, requires read replica promotion
unencrypted_efs_filesystemAdvisory โ€” encryption cannot be changed after creation
opensearch_no_encryption_at_restAdvisory โ€” encryption-at-rest gap, requires domain reconfiguration
unencrypted_documentdb_clusterAdvisory โ€” encryption cannot be changed after creation
rds_no_deletion_protectionAdvisory โ€” recommends enabling DeletionProtection
dynamodb_no_deletion_protectionAdvisory โ€” recommends enabling deletion protection
resource_without_backup_coverageAdvisory โ€” resource not covered by any AWS Backup selection
lightsail_unattached_diskBlock storage disk deletion โ€” irreversible without snapshot
lightsail_old_snapshotSnapshot deletion โ€” irreversible, verify no recovery need
lightsail_idle_load_balancerLoad balancer with zero healthy instances โ€” may have intermittent traffic
unused_transfer_protocolTransfer server with unused protocols โ€” review protocol configuration
aurora_to_rds_downgrade_opportunityAurora to RDS downgrade โ€” requires migration planning
emr_over_provisionedOver-provisioned EMR instance groups โ€” right-sizing requires workload analysis
beanstalk_over_provisionedOver-provisioned Beanstalk environment โ€” CPU <25% over 14 days, right-sizing requires workload analysis
workspaces_autostop_opportunityBilling mode switch โ€” AlwaysOn to AutoStop changes billing model. Plan-only (recommendation): CloudWise writes the plan for you to apply yourself; it does not run it (CLO-526)
workspaces_pool_overprovisioned_capacityPool capacity reduction โ€” may affect user availability during peaks
oversized_workspaceWorkSpace bundle right-sizing requires usage analysis
oversized_redshiftRedshift cluster right-sizing requires workload analysis
expiring_reserved_instanceRI approaching expiry โ€” advisory, renewal planning
expiring_savings_planSP approaching expiry โ€” advisory, renewal planning
disabled_global_acceleratorDisabled accelerator still incurring charges โ€” review before deleting

High Risk ๐Ÿ”ด โ€” Significant resource changes (34 waste types):

Waste TypeWhy It's High Risk
idle_ec2Running instance โ€” may have workloads
idle_rdsRunning database โ€” may have connections. Plan-only: AWS starts a stopped RDS instance again after 7 days, so a stop is not a lasting saving; the plan snapshots and stops, and the lasting fix (delete after the snapshot) is yours to run
idle_elasticacheRunning cache โ€” may serve traffic
idle_redshiftRunning data warehouse
idle_opensearchRunning search cluster
idle_emr_clusterRunning EMR cluster
idle_sagemaker_endpointRunning inference endpoint
idle_msk_clusterRunning Kafka cluster
idle_mq_brokerRunning message broker
idle_neptuneRunning graph database
idle_documentdbRunning document database
unused_lambdaMay be invoked by other services
idle_ecs_serviceService with desired tasks but none running
idle_dynamodbDynamoDB table with provisioned capacity
idle_fsxRunning file system
idle_efsElastic File System with no mounts
idle_beanstalkRunning Elastic Beanstalk environment
beanstalk_idle_trafficEB environment with zero traffic for 14 days
beanstalk_orphaned_rdsOrphaned RDS left behind by terminated EB environment
idle_lightsailStopped or idle Lightsail instance. Recommendation only: Lightsail bills a stopped instance at its bundle price, so only a delete saves, and the instance snapshot that must come first is not an action CloudWise takes
lightsail_idle_databaseManaged database with zero connections. Lightsail bills a stopped database at its bundle price, so the plan snapshots and then deletes it
idle_workspaceRunning WorkSpace
idle_transfer_serverRunning Transfer Family server. Plan-only: AWS bills a stopped server for its endpoint hours, so only a delete saves, and a delete loses the host key and endpoint hostname
idle_transfer_no_activityTransfer server with no file activity. A stopped server is still billed; the plan recommends the delete
idle_transfer_web_appIdle Transfer Family web app
unused_acceleratorGlobal Accelerator with no endpoints. Plan-only: a disabled accelerator is still billed, and AWS deletes one only after its listeners are removed
idle_global_acceleratorGlobal Accelerator with zero traffic for 30 days
long_running_emrLong-running EMR cluster
duplicate_cloudtrailRedundant trail โ€” verify compliance requirements before deleting
rds_publicly_accessibleRDS instance with public access enabled โ€” high security risk
cur_savings_plan_wasteCUR-detected unused Savings Plan coverage
cur_unused_reservationCUR-detected underutilized Reserved Instance
unused_reserved_instanceCurrently doesn't run. For uploaded CUR files, see cur_unused_reservation.
unused_savings_planSavings Plan with low utilization

Max Daily Actionsโ€‹

SettingDefaultRangeDescription
Max Daily Actions501โ€“200Maximum number of remediation actions that can be executed in a single day. Prevents runaway automation. Enforced at execution time โ€” an approved action that would exceed the cap fails with a policy-blocked reason rather than executing.

Max Daily Savings Impactโ€‹

SettingDefaultDescription
Max Daily Savings Impact$10,000Safety cap on the total dollar value of actions executed per day. Even if you approve more, execution pauses when this limit is reached โ€” enforced at execution time, the same way as Max Daily Actions above.

Blackout Hoursโ€‹

A policy can carry a list of UTC hours (0โ€“23) during which no remediation action executes, even one already approved. An action whose execution lands in a blackout hour fails with a policy-blocked reason; use Retry (see Action Lifecycle below) once the hour has passed. Enforced at execution time; not yet configurable from Settings (internal/ops-set for now).

Notification Channelsโ€‹

ChannelDefaultDescription
EmailOnExecution results (approval-request emails and the batch digest are only sent by the per-scan planning sweep, which is off while plans are generated on request)
SlackOffReal-time notifications to a dedicated channel (see Slack Integration Guide)

Remediation Slack messages include:

  • Per-action: Title, description, API calls, rollback steps, confidence level
  • Direct links to the specific action on the Remediation page

Exclusionsโ€‹

Excluded Resource Tagsโ€‹

Resources with matching tags are never executed on. Use Key=Value format. The check runs at execution time: right before every execution, CloudWise re-reads the resource's current tags from AWS and blocks the action if they match โ€” a resource tagged after the plan was made is still protected. A plan can still be proposed for a tagged resource. 13 AWS services (EC2, RDS, S3, Lambda, ELB/ALB/NLB, ElastiCache, Secrets Manager, Amazon MQ, Route 53, Elastic Beanstalk, Lightsail, API Gateway, and CloudWatch Logs) have a dedicated tag-read call; every other service โ€” including Glue jobs/crawlers, SageMaker notebooks/endpoints, and Timestream databases โ€” falls back to the AWS Resource Groups Tagging API, so coverage spans nearly every remediable resource type. The one remaining gap is ECS: a service's tag-bearing ARN needs its cluster name, which a plan may carry but this guard will not trust unverified, so ECS remediations stay blocked while any excluded tags are configured. If tags cannot be verified for a resource โ€” no way to determine its ARN, the tag-read call itself fails, or AWS reports no record of the resource โ€” the action is blocked rather than executed unverified.

This guard requires remediation role template v1.32.0 or later. On an older template, none of the tag-read permissions exist yet, so every remediation action is blocked (fail closed) rather than executed with unverified tags, until the role is updated (Settings โ†’ AWS Accounts shows an update prompt when a newer template is available). See docs/ops/remediation-role-v1.32-migration.md for what changed and how to update. CloudWatch Logs log groups also need v1.35.0 for their dedicated tag-read call: on an older template CloudWise reads log-group tags through the Resource Groups Tagging API instead, which has no record of a log group that was never tagged, so actions on untagged log groups stay blocked until the role is updated.

Common exclusions:

  • Environment=Production โ€” Skip all production resources
  • Team=Platform โ€” Skip platform team resources
  • DoNotDelete=true โ€” Explicit protection tag
  • CostCenter=Shared โ€” Skip shared-cost resources

Excluded Resource IDsโ€‹

Specific AWS resources that should never be remediated, by resource ID. Enforced at execution time โ€” an excluded resource ID or ARN blocks execution outright, even for an action that was proposed before the exclusion was added.

Examples:

  • i-0abc123def456 โ€” A specific EC2 instance
  • vol-0abc123def456 โ€” A specific EBS volume
  • snap-0abc123def456 โ€” A specific snapshot

Excluded Waste Typesโ€‹

Deselect individual waste types in Settings โ†’ Remediation Policy; the list offers the types that can be fixed with one click. The table below groups all 186 classified waste types for reference:

CategoryWaste Types
EC2idle_ec2, stopped_ec2_with_ebs
EBSunattached_ebs, old_ebs_snapshot, orphaned_ebs_snapshot, ami_orphaned_snapshot, gp2_migration, over_provisioned_iops
RDSidle_rds, old_rds_snapshot, aurora_io_optimization_opportunity, aurora_extended_support_cost, rds_extended_support_cost, aurora_serverless_opportunity, aurora_to_rds_downgrade_opportunity
Networkingunattached_eip, eip_on_stopped_instance, multiple_eips_per_instance, idle_nat_gateway, idle_load_balancer, low_traffic_alb, high_lcu_cost_alb, classic_lb_migration, unused_vpc_endpoint, orphaned_dns_record
Serverlessunused_lambda, over_provisioned_lambda, unused_api_gateway, lambda_provisioned_concurrency_idle, lambda_excessive_timeout, lambda_arm64_migration, lambda_old_runtime
DynamoDBidle_dynamodb, over_provisioned_dynamodb, dynamodb_no_autoscaling
Containersidle_ecs_service, oversized_ecs_task, ecs_no_autoscaling, ecs_container_insights_waste, oversized_ecs_memory, idle_elasticache, oversized_elasticache, eks_extended_support_cost, elasticache_extended_support_cost, elasticache_replication_waste, elasticache_engine_migration, elasticache_serverless_optimization, elasticache_data_tiering_opportunity
Dataidle_kinesis_stream, over_provisioned_kinesis, kinesis_on_demand_downgrade, kinesis_extended_retention_waste, kinesis_enhanced_fan_out_waste, kinesis_firehose_idle, idle_redshift, underutilized_redshift, oversized_redshift, redshift_no_pause, redshift_legacy_dc2, redshift_wlm_over_provisioned, redshift_concurrency_scaling_waste, idle_opensearch, oversized_opensearch, opensearch_ebs_overprovisioned, ri_opportunity_opensearch, opensearch_extended_support_cost
MLidle_sagemaker_notebook, idle_sagemaker_endpoint, oversized_sagemaker_endpoint, stopped_sagemaker_notebook_storage, previous_gen_sagemaker_instance
DevOpsold_glue_job, idle_glue_crawler, oversized_glue_job, glue_job_missing_timeout, failed_glue_job_retry, glue_catalog_bloat, idle_state_machine, step_functions_retry_storm, step_functions_high_transition_density, step_functions_express_duration_waste, idle_emr_cluster, long_running_emr, emr_over_provisioned, emr_missing_auto_termination, emr_previous_gen_instances, emr_spot_opportunity
Storageold_backup, redundant_backup, backup_no_lifecycle_tiering, stale_backup_plan_assignment, backup_copy_policy_overreach, unused_secret, idle_fsx, idle_efs, no_lifecycle_efs, oversized_fsx, fsx_throughput_overprovisioned, old_fsx_backup
Monitoringunused_dashboard, old_log_group, no_retention_log_group, excessive_retention_log_group, empty_log_group
Security Postureunencrypted_ebs_volume, unencrypted_rds_instance, rds_no_deletion_protection, rds_publicly_accessible, unencrypted_efs_filesystem, s3_no_default_encryption, dynamodb_no_deletion_protection, opensearch_no_encryption_at_rest, unencrypted_documentdb_cluster, resource_without_backup_coverage
ECRold_ecr_images, untagged_ecr_images, ecr_no_lifecycle_policy, no_lifecycle_policy
CloudTrailduplicate_cloudtrail, cloudtrail_s3_no_lifecycle
S3incomplete_multipart, s3_rapid_growth, s3_wrong_storage_class, s3_empty_bucket, s3_high_request_and_transfer_cost
Messagingidle_msk_cluster, oversized_msk_cluster, idle_mq_broker, oversized_mq_broker
Databasesidle_neptune, neptune_serverless_opportunity, oversized_neptune, neptune_old_snapshot, idle_documentdb, overprovisioned_documentdb, old_documentdb_snapshot, documentdb_extended_support_cost
Nicheidle_beanstalk, beanstalk_idle_traffic, beanstalk_unnecessary_alb, beanstalk_previous_gen_instances, beanstalk_over_provisioned, beanstalk_orphaned_rds, idle_lightsail, lightsail_unattached_static_ip, lightsail_unattached_disk, lightsail_old_snapshot, lightsail_idle_load_balancer, lightsail_idle_database, idle_workspace, oversized_workspace, workspaces_autostop_opportunity, workspaces_pool_overprovisioned_capacity, workspaces_windows_license_optimization, idle_transfer_server, idle_transfer_no_activity, unused_transfer_protocol, idle_transfer_web_app, unused_accelerator, idle_global_accelerator, disabled_global_accelerator, unused_appsync, appsync_idle_cache, appsync_idle_subscriptions, unused_distribution, unused_hosted_zone, unused_kms_key
RI/SP & Optimizeroversized_ec2_optimizer, oversized_ebs_optimizer, oversized_lambda_optimizer, oversized_rds_optimizer, ri_opportunity_ec2, ri_opportunity_rds, ri_opportunity_elasticache, ri_opportunity_redshift, sp_opportunity_compute, sp_opportunity_ec2, sp_opportunity_sagemaker, savings_plan_coverage_gap, convertible_ri_exchange_opportunity, expiring_reserved_instance, expiring_savings_plan, unused_reserved_instance, unused_savings_plan, cur_unused_reservation, cur_savings_plan_waste

๐Ÿ”’ Security Architectureโ€‹

Allow-List Enforcementโ€‹

Every API call in a remediation plan is validated against a strict allow-list before the action is created. If any call falls outside the allow-list, the entire plan is rejected. The allow-list covers 40+ AWS services:

Allowed AWS API calls by service:

ServiceAllowed Actions
EC2stop_instances, start_instances, terminate_instances, release_address, allocate_address, disassociate_address, associate_address, delete_volume, create_volume, delete_snapshot, create_snapshot, modify_volume + describe operations. Rollback calls: run_instances, attach_volume, detach_volume
EC2 (NAT/VPC)delete_nat_gateway, delete_vpc_endpoints + describe operations. Rollback call: create_nat_gateway
ELBv2delete_load_balancer, delete_target_group, describe_load_balancers, describe_target_health, describe_target_groups
Classic ELBdelete_load_balancer, describe_load_balancers
RDSstop_db_instance, start_db_instance (rollback), delete_db_snapshot, modify_db_instance, modify_db_cluster, create_db_snapshot, describe_db_clusters + describe
S3abort_multipart_upload, put_bucket_lifecycle_configuration, delete_bucket_lifecycle, put_bucket_intelligent_tiering_configuration, list_objects_v2, head_bucket + list/get
Lambdaupdate_function_configuration, delete_function, delete_provisioned_concurrency_config, put_provisioned_concurrency_config, list_provisioned_concurrency_configs + get
CloudWatch Logsput_retention_policy, delete_retention_policy (rollback), delete_log_group + describe
CloudWatchdelete_dashboards + list
ECRbatch_delete_image, put_lifecycle_policy + describe/get
EFSput_lifecycle_configuration + describe
DynamoDBupdate_table + describe
ElastiCachedelete_cache_cluster, modify_cache_cluster, create_snapshot, describe_replication_groups, decrease_replica_count, increase_replica_count, list_tags_for_resource, modify_replication_group + describe
Kinesisdelete_stream, create_stream (rollback), update_shard_count, decrease_stream_retention_period, update_stream_mode, deregister_stream_consumer + describe
Firehosedelete_delivery_stream, describe_delivery_stream
Gluedelete_dev_endpoint, delete_job, delete_crawler, update_job, get_job_runs, get_databases, get_tables + get
Step Functionsdelete_state_machine, list_state_machines, list_executions, describe_execution + describe
Backupdelete_recovery_point, update_backup_plan, delete_backup_selection, list_backup_selections, get_backup_plan + describe
Secrets Managerdelete_secret, restore_secret (rollback) + describe
SageMakerstop_notebook_instance, start_notebook_instance, delete_notebook_instance, delete_endpoint, update_endpoint + describe (describe_notebook_instance, describe_endpoint, describe_endpoint_config)
API Gatewaydelete_rest_api, get_rest_api, get_rest_apis
CloudTraildescribe_trails, get_trail_status
Elastic Beanstalkterminate_environment, update_environment, describe_configuration_settings + describe
Lightsailstop_instance, start_instance, delete_instance, release_static_ip, get_disk, create_disk_snapshot, delete_disk, get_instance_snapshot, delete_instance_snapshot, get_load_balancer, create_load_balancer, delete_load_balancer, get_relational_database, create_relational_database_snapshot, stop_relational_database, start_relational_database, delete_relational_database + get
WorkSpacesterminate_workspaces, stop_workspaces, start_workspaces, modify_workspace_properties + describe (describe_workspaces)
Transfer Familystop_server, start_server, delete_server, update_server, delete_web_app + describe/list
Global Acceleratordelete_accelerator, update_accelerator + describe
AppSyncdelete_graphql_api, delete_api_cache, update_api_cache, get_api_cache + get
CloudFrontdelete_distribution, update_distribution + get
Route 53delete_hosted_zone, change_resource_record_sets + get + list_resource_record_sets
KMSschedule_key_deletion, disable_key, cancel_key_deletion (rollback), enable_key (rollback) + describe
EMRterminate_job_flows, modify_instance_groups, put_auto_termination_policy, remove_auto_termination_policy, add_instance_groups + describe/list
Redshiftdelete_cluster, pause_cluster, resume_cluster, resize_cluster, create_cluster_snapshot, modify_cluster_parameter_group, create_scheduled_action, delete_scheduled_action + describe
MSK (Kafka)delete_cluster, update_broker_type + describe
MQdelete_broker, create_broker + describe
Neptunestop_db_cluster, start_db_cluster, create_db_cluster_snapshot, delete_db_cluster_snapshot, modify_db_instance, modify_db_cluster + describe
DocumentDBdelete_db_cluster_snapshot, modify_db_instance, create_db_cluster_snapshot, describe_db_cluster_snapshots + describe
FSxdelete_file_system, create_backup, delete_backup + describe
ECSupdate_service, update_cluster_settings + describe
Timestreamdelete_database, delete_table + describe
OpenSearchdelete_domain, update_domain_config + describe
What's NOT Allowed

The remediation system cannot:

  • Create or modify IAM roles, policies, or users
  • Modify VPCs, subnets, security groups, or network ACLs (it can delete an unused NAT gateway or VPC endpoint)
  • Access S3 object data
  • Access database contents
  • Create new resources, except in support of a fix or its undo: snapshots and backups taken before a change, re-creating something it deleted when you roll back (a volume, NAT gateway, broker, stream or load balancer), and a few supporting items for specific fixes (such as a Redshift scheduled action or EMR instance groups)
  • Modify DNS records, with one exception: deleting the single orphaned DNS record a finding names
  • Change encryption settings

IAM Role Designโ€‹

The CloudWiseRemediationRole uses:

  • Scoped permissions โ€” Only the specific API calls listed above
  • 15-minute session cap โ€” STS sessions expire after 15 minutes
  • External ID โ€” Prevents confused deputy attacks
  • Condition keys โ€” The write statements apply only to sessions tagged cloudwise-action=remediation, and assuming the role requires the ExternalId and a cloudwise-approval-id session tag

Audit Trailโ€‹

Every remediation action records:

  • Who approved it (Cognito user ID)
  • When it was approved, executed, and completed
  • The exact API calls made
  • Pre-check results
  • Snapshot IDs created for rollback
  • Any errors encountered
  • Bedrock model and token usage (model ID, input/output tokens, latency)

The record also keeps AWS's response to each call, with secrets removed. Before it is kept, CloudWise replaces a Lambda function's environment variable values, other credential-like fields it recognizes, and tag values with [redacted by CloudWise], so they do not reach the record, a failure message, the audit log, the failure notification or CloudWise's logs. A record written before this change keeps what it stored, which can include environment variable values. So that a change can be undone, a fix that changes a Glue job keeps only the job's earlier retry, timeout and capacity settings, never its arguments. A fix that snapshots an EBS volume keeps that volume's tags, keys and values, because a volume restored from the snapshot does not get its tags back from it and the original volume is gone by then. A Glue fix made before this change kept the job's whole earlier definition, arguments included, with the fix's record.


๐Ÿ“Š Action Lifecycleโ€‹

Each remediation action progresses through these statuses:

pending_approval โ†’ approved โ†’ executing โ†’ completed โ†’ rolled_back
โ†˜ rejected โ†˜ failed โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†—
โ†˜ expired (undo the steps that ran,
after a partial failure)
StatusDescription
Pending ApprovalAction proposed, waiting for your review. Expires after 72 hours.
ApprovedYou approved the action. Queued for execution.
RejectedYou rejected the action with a reason.
ExpiredAction was not reviewed within 72 hours.
ExecutingAction is currently running in your AWS account.
CompletedAction executed successfully. Savings realized.
FailedExecution encountered an error, including an action stopped by your policy (the message starts with policy_blocked). Pre-checks prevent partial execution โ€” if a pre-check fails, no changes are made. If a multi-step action fails after some of its steps ran, you can retry it and, when it is offered, undo the steps that ran (see Rollback). If a rollback fails, the action stays Failed with a Rollback failed note; Retry is not offered and the resource should be checked in AWS.
Rolled BackAction was executed, or part of it ran, and was then rolled back (e.g., snapshot restored).

Bulk Actionsโ€‹

You can approve multiple pending actions at once using the Approve All Low-Risk button in the remediation queue. This is useful for batch-approving low-risk actions after review. A batch costs one action credit per action it actually queues, and it is all-or-nothing: if you don't have enough credits for the whole batch, nothing is approved and nothing is charged โ€” upgrade your plan, wait for next month's credits, or select fewer actions (credit top-ups are not on sale yet). Actions the batch skips (medium/high risk, or no longer pending) are free.


๐ŸŽŸ๏ธ Action creditsโ€‹

Executing a remediation costs one action credit. Agentic includes 20 credits a month (only Agentic executes fixes, so no other plan has any); when they run out, upgrade your plan or wait for next month's allowance (credit top-ups are not on sale yet). The credit meter in the workspace shows what's left.

The rule is simple: one execution attempt, one credit.

What you doCredits
Approve one action1
Approve All Low-Risk (N actions queued)N, all-or-nothing
Retry a failed or rolled-back action1 โ€” a retry is a new attempt. Not offered after a failed rollback
Reject, decline, or let an action expire0
Roll back a completed action0 โ€” the credit already paid for the execution
Undo the steps that ran on a failed action0 โ€” the failed attempt's credit is returned first

A failed execution never burns a credit. If an attempt doesn't complete โ€” it was blocked by your policy, a pre-check failed, the AWS call errored, or it timed out โ€” the credit is returned to your balance automatically (within about 15 minutes, or immediately when you retry or when you undo the steps that ran). Each attempt is refunded at most once, and a retry that fails is refunded in its own right. If you undo the steps that ran on a failed action, the failed attempt's credit is returned before the undo starts, and the undo costs nothing. A failed rollback, or a failed undo, costs nothing and is not refunded.


Rollbackโ€‹

Many fixes can be undone for 24 hours after they complete. Some cannot, for example deleting a snapshot, backup, log group, load balancer or API, or releasing an Elastic IP. The plan says which before you approve. Completed actions that created a snapshot (e.g., before deleting an EBS volume) can be rolled back, and the rollback restores the resource from the snapshot. Before deleting a volume, CloudWise takes a snapshot in your account, so you can restore it. For actions using soft-delete mechanisms (e.g., Secrets Manager's delete_secret with a recovery window, or KMS schedule_key_deletion with a waiting period), you can cancel the deletion during the recovery/waiting period.

The 24-hour window. A completed action can be rolled back for 24 hours after it finished executing. After that, the resource may have changed, so CloudWise no longer runs the rollback: the button is replaced by a note giving the time the window closed (in UTC), and you undo the change yourself in AWS if you still need to. Actions that completed before this window was enforced keep their rollback. Undoing the steps that ran on a failed action (below) has no time limit.

EBS volume changes wait before undo. AWS accepts only one modification per EBS volume every 6 hours. For a volume type migration or an IOPS change, Undo opens only after that wait (the action shows when it opens, in UTC) and still closes with the 24-hour window. A large volume can still be optimizing when Undo opens. If it is, AWS rejects the change, the action shows Rollback failed, and you change the volume back yourself in AWS. To avoid that, check in the EC2 console that the volume's modification has completed before you select Undo.

Undo the steps that ran. If a multi-step action fails part-way, the action stays Failed and you can retry it. When CloudWise can tell which of the plan's rollback steps undo the steps that succeeded, the action also shows Undo the steps that ran. It runs only those rollback steps, in reverse order, and nothing for the steps that never ran. If CloudWise can't match each of the plan's rollback steps to exactly one of its steps, the only completed steps have no rollback (a snapshot, say), or the undo would delete a snapshot or backup the run created, no undo is offered; the snapshots and backups it created are still listed on the action. Retrying a failed action runs the plan again from step 1 and clears the undo. When you ask for the undo, the action briefly shows "Rolling back..." and then becomes Rolled Back. Before anything runs, the undo re-checks your excluded resource IDs and tags; if the resource is on your excluded IDs, now carries an excluded tag, or its tags can't be read, the undo is refused, nothing runs and the action returns to Failed as it was. If an undo (or any rollback) itself fails, it ends the rollback path: the action shows Rollback failed, neither Retry nor a second undo is offered (a replay could re-apply the change you asked to undo), and you should check the resource in AWS. Like every rollback, it starts only when you ask.


๐Ÿ’ฐ Savings Trackingโ€‹

The remediation queue includes a Savings Widget that shows:

  • Realized savings โ€” Monthly savings from completed actions
  • Projected savings โ€” Estimated savings from pending actions
  • Savings by risk level โ€” Breakdown of savings by risk
  • Savings by account โ€” Breakdown across AWS accounts

๐Ÿ”ง Troubleshootingโ€‹

"No approvable remediation actions appear"โ€‹

This covers the one-click, approvable actions (Agentic). Guided fix instructions for each finding appear on the Remediation page on every plan โ€” if those are missing, it's a waste-detection issue (see step 5), not a tier issue.

  1. Check your tier โ€” Executing fixes requires the Agentic plan or above. On Free/Shield the Remediation page shows the same findings with their Action steps (a generated walkthrough, or the AWS CLI command where one applies) to run yourself, but no Approve & fix button
  2. Check the remediation toggle โ€” Go to Settings โ†’ Remediation Policy and ensure the engine is enabled
  3. Check confidence threshold โ€” Your minimum confidence level might be filtering out findings. Try lowering it to Medium or Low in Settings โ†’ Remediation Policy
  4. Check risk threshold โ€” Your maximum risk level might be too restrictive. A setting of Low only proposes the safest actions. Try Medium for a balance of safety and coverage
  5. Check waste detection โ€” Remediation plans are generated from waste findings. If no waste is detected, no remediation actions are created
  6. Check exclusions โ€” You may have excluded the waste types or tagged resources being detected
  7. Generate a plan: Plans are generated when you click Generate plan on a finding, not automatically after each scan

"Action failed to execute"โ€‹

  1. Check the CloudFormation stack โ€” Check that a CloudFormation stack for the CloudWise remediation role (named CloudWise-Remediation-...) is deployed in the target AWS account and the role CloudWiseRemediationRole exists
  2. Check the error message โ€” Click on the failed action to see the specific error
  3. Check resource state โ€” The resource may have been modified or deleted since the scan. Pre-checks detect this and fail gracefully
  4. Check IAM permissions โ€” The remediation role may be missing the required permissions for that specific action

"Action was blocked by policy"โ€‹

This means your remediation policy was updated after the action was proposed, and the new policy excludes it. Update your policy settings if this was unintentional. The action credit is returned either way.

Two reasons are worth calling out:

ReasonWhat it means
policy_blocked:max_daily_actions / max_daily_savings_impactYou've hit your own daily cap. Raise the cap in Settings โ†’ Remediation Policy, or approve the rest tomorrow.
policy_blocked:cap_check_unavailableCloudWise couldn't read today's executed totals, so it couldn't prove your daily caps would be respected โ€” and refuses to execute uncapped rather than guess. Transient; retry in a few minutes. Your credit is refunded.

CloudFormation deployment issuesโ€‹

ErrorSolution
already exists (for the role or the stack)The stack or role already exists. Go to CloudFormation โ†’ Stacks and update or delete the existing stack.
Invalid principal in policyEnsure you're deploying in the correct AWS account. The template trusts the CloudWise service account.

โ“ FAQโ€‹

Can I fix waste without the Agentic plan?โ€‹

Yes. On every plan, the Remediation page lists your waste findings with each one's recommendation and an Action steps section โ€” you run it yourself in your own AWS account. Opening a finding's Action steps generates a step-by-step Console and CLI walkthrough for it, with the AWS CLI command (where one applies) as the fallback. The Agentic plan adds one-click Approve & fix, which executes the same plan for you (with pre-checks and rollback). Same findings, same risk/confidence model; the difference is whether CloudWise runs the steps or you do.

Is any action ever executed automatically?โ€‹

No. Every executed action requires explicit approval. There is no "auto-approve" mode. Even the Bulk Approve button requires you to click it. (On Free/Shield nothing is executed at all โ€” you run the provided steps yourself.)

What's the difference between confidence and risk?โ€‹

Confidence is about the finding โ€” how sure CloudWise is that a resource is actually waste. An unattached volume is high confidence waste. A small log group missing a retention policy is low confidence โ€” it might be intentional.

Risk is about the action โ€” how impactful the remediation would be. Deleting an unattached EBS volume is low risk. Stopping a running EC2 instance is high risk, even if we're very confident it's idle.

You can control each independently via Settings โ†’ Remediation Policy.

What happens if I approve an action for a resource that no longer exists?โ€‹

The pre-check step will detect that the resource is missing and the action will fail gracefully with an appropriate error message. No partial changes are made.

Can I undo a completed action?โ€‹

If the action created a snapshot before execution (e.g., before deleting an EBS volume), you can roll it back from the action detail view within 24 hours. After the 24 hours you can still restore from the snapshot by hand until it expires. The snapshot is tagged with its expiry date (cloudwise:expires_at), so it is not a permanent backup. One exception: while the account's owner is on the Compliance plan, CloudWise makes no call into the account, so it does not delete these snapshots. They stay, and AWS bills their storage, until you delete them (they carry the cloudwise:expires_at tag) or move back to a plan that scans the account. Releasing an Elastic IP cannot be undone, because a new address would be a different IP. For actions without snapshots (e.g., stopping an instance), you can restart the resource manually from the AWS Console. Some services support soft-delete with recovery windows (e.g., Secrets Manager, KMS). If a multi-step action failed part-way, use Undo the steps that ran on the failed action, when it is offered, to reverse only the steps that ran.

How much does it cost in Bedrock usage?โ€‹

CloudWise uses Amazon Bedrock (Anthropic Claude) to generate plans. The cost is included in your Agentic subscription โ€” you are not charged separately for Bedrock usage.

Does CloudWise store my AWS credentials?โ€‹

No. CloudWise uses IAM cross-account roles with STS temporary credentials. No long-term credentials are stored. Sessions expire after 15 minutes.

How often are new remediation actions generated?โ€‹

When you ask for one: click Generate plan on a finding. New findings arrive with each daily scan, but no plan is written until you ask.

Can I use remediation with Air-Gapped Mode?โ€‹

No. AI Remediation requires a cross-account IAM role to execute actions in your AWS account. Air-Gapped Mode is read-only by design.

How many waste types does remediation support?โ€‹

CloudWise can generate remediation plans for 145 of the 186 active waste types: 55 get a one-click Fix This action and 90 get a plan you review and apply yourself. The other 41 are recommendation-only (security-posture changes, RI/Savings Plan decisions, and actions kept off the allow-list), so no plan is generated for them. Every plan is validated against a strict API allow-list before being proposed.