Detection Catalog

What the scanner looks for, mapped across AWS, Azure, and Google Cloud.

192

Automated checks run on every scan

26

Categories of waste covered

3

Clouds — AWS, Azure & Google Cloud

This is the detection catalog — twenty-six categories of waste Cloud-Vex looks for, and what each maps to in AWS, Azure and Google Cloud. If you are trying to work out whether it would find anything in your estate, this is the page that answers it.

192 checks run on every scan — 78 on AWS, 64 on Azure, and 50 on Google Cloud. The gap between them isn’t a gap in effort: it’s each provider's own API surface, plus the categories below still marked Not yet available on the clouds that haven’t caught up yet.

Every detection is read-only. Cloud-Vex recommends an action and estimates the saving. It never executes anything.

Coverage differs by cloud — each provider exposes different APIs, and some detections need a signal one platform simply doesn’t emit. A dash (—) means the detection genuinely doesn’t apply to that platform. Not yet available means it could apply there but isn’t built yet — we’d rather say so than imply coverage we don’t have.

1. Orphaned storage

DetectionAWSAzureGoogle Cloud
Unattached block storageEBS volumes in availableUnattached managed disksUnattached persistent disks
Disks attached to deleted/stopped hostsEBS on long-stopped EC2Premium disks on deallocated VMsPDs on terminated instances
Over-provisioned IOPS/throughputio1/io2 provisioned IOPS far above consumedPremium SSD v2 / Ultra Disk provisioned IOPS far above consumedNot yet available
Outdated volume typegp2 volumes eligible for gp3Standard HDD/SSD tier mismatchNot yet available

Why it matters: the single most common finding, and the easiest to act on. A detached volume does nothing and bills forever.

2. Stale snapshots and images

DetectionAWSAzureGoogle Cloud
Snapshots older than thresholdEBS snapshotsDisk snapshotsPD snapshots
Snapshots of deleted source volumesOrphaned EBS snapshotsOrphaned disk snapshotsOrphaned PD snapshots
Unused machine imagesAMIs with no launchesUnused managed images, gallery versionsUnused custom & machine images
Database snapshots of deleted instancesOrphaned RDS manual snapshotsOrphaned SQL exports
No snapshot lifecycle policyMissing DLM policyNot yet availableMissing snapshot schedule retention

Why it matters: snapshots accumulate silently for years. Nobody deletes them because nobody is sure what depends on them — which is exactly the dependency mapping Cloud-Vex provides.

3. Stopped-but-billing compute

DetectionAWSAzureGoogle Cloud
Stopped instances retaining storageStopped EC2 with EBS attachedDeallocated VMs retaining disksTerminated instances retaining PDs
Stopped but not deallocatedVMs in Stopped rather than Stopped (deallocated) — still billing full compute
Long-stopped databasesRDS stopped >7 days (auto-restarts, storage bills throughout)SQL DB paused, storage billingCloud SQL stopped, storage billing

Why it matters: the Azure Stopped vs Stopped (deallocated) distinction is one of the most expensive misunderstandings in cloud. A VM stopped from inside the guest OS keeps billing at full rate.

4. Idle and low-utilization compute

DetectionAWSAzureGoogle Cloud
Idle virtual machinesLow CPU/network EC2 over windowLow-utilization VMsIdle Compute Engine instances
Idle autoscaling groupsASG at floor with no trafficVM Scale Sets at minimumInstance groups at minimum
Never-started instancesEC2 launched and never usedVMs provisioned, never accessedInstances with no login/network
Dev/test running outside business hoursNo schedule attachedNo auto-shutdown policyNo instance schedule

Signal: CPU, network in/out, and disk I/O across a configurable window — 14 days by default. Every finding shows the evidence and thresholds used, so an engineer can dispute it.

5. Over-provisioned resources (rightsizing)

DetectionAWSAzureGoogle Cloud
Oversized computeCompute Optimizer recommendationsAzure Advisor rightsizingRecommender machine type
Oversized serverlessLambda over-allocated memoryNot yet availableCloud Functions over-allocated memory
Oversized containersECS/Fargate task sizingContainer Apps sizingCloud Run instance sizing
Oversized databasesRDS instance class vs loadSQL DB DTU/vCore tierCloud SQL machine type

Approach: ingest the native recommendation APIs rather than reinventing them. They’re free, first-party, and carry credibility with skeptical engineers. Cloud-Vex adds the layer they can’t — cross-cloud normalization and dollar-ranked prioritization across the whole estate at once.

6. Orphaned network resources

DetectionAWSAzureGoogle Cloud
Unassociated public IPsUnattached Elastic IPsUnassociated Standard-SKU public IPsUnattached reserved static IPs
All public IPv4 addressesBilled hourly since Feb 2024, attached or notStandard SKU billedBilled when reserved
Orphaned network interfacesDetached ENIsUnattached NICs
Unused VPC endpointsInterface endpoints billing hourly per AZ with no trafficPrivate Endpoints unusedNot yet available
Empty/unused subnets and route tablesHygiene only, no direct costHygiene onlyHygiene only

7. Idle load balancing

DetectionAWSAzureGoogle Cloud
No healthy backendsALB/NLB/CLB with empty target groupsLB / App Gateway with empty backend poolForwarding rules with no backend
Near-zero request volumeALB/NLB with negligible trafficApp Gateway with negligible trafficLB with negligible traffic
Legacy generationClassic Load Balancers still runningBasic SKU LBs (retiring)

8. Idle gateways and connectivity

DetectionAWSAzureGoogle Cloud
Idle NAT gatewaysNAT GW with near-zero data processedNAT Gateway idleCloud NAT idle
Unused VPNVPN connections down or no trafficVPN Gateways idleCloud VPN tunnels idle
Unused dedicated interconnectDirect Connect VIFs with no trafficExpressRoute circuits idleNot yet available
Unused transit attachmentsNot yet availableNot yet availableNot yet available

Why it matters: gateways bill hourly whether or not anything flows through them. A NAT gateway left behind from a decommissioned VPC is pure loss, and nobody ever looks at it.

9. Idle databases and caches

DetectionAWSAzureGoogle Cloud
Zero-connection databasesRDS/Aurora with no connections over windowSQL DB with no sessionsCloud SQL with no connections
Over-provisioned throughputDynamoDB provisioned RCU/WCU vs consumedCosmos DB RU/s vs consumedNot yet available
Idle cachesElastiCache clusters with no hitsAzure Cache for Redis idleMemorystore idle
Underused elastic poolsAurora Serverless min capacity too highSQL elastic pools underutilized
Unused secondary indexesDynamoDB GSIs with no readsNot yet available
Idle read replicasRDS replicas with no readsGeo-replicas unusedCloud SQL read replicas unused

10. Containers and Kubernetes

DetectionAWSAzureGoogle Cloud
Idle cluster control planeEKS cluster with no workloads (~$73/mo each)AKS cluster idleGKE cluster management fee, idle
Underutilized node poolsEKS node groups over-provisionedAKS node pools over-provisionedGKE node pools over-provisioned
Services scaled to zero but resourcedECS services with 0 tasksNot yet availableCloud Run min-instances idle
Orphaned persistent volumesNot yet availableNot yet availableNot yet available

Why it matters: forgotten clusters are a classic. An EKS or GKE control plane costs roughly $73/month doing nothing at all, and teams routinely leave three or four behind after a migration.

11. Object storage

DetectionAWSAzureGoogle Cloud
Incomplete multipart uploadsAbandoned parts billing invisibly
No lifecycle policyBuckets without lifecycle rulesContainers without lifecycle managementBuckets without lifecycle rules
Wrong storage class for access patternStandard holding cold dataHot tier holding cold dataStandard class holding archival data
Accumulated non-current versionsVersioning on, no expiration ruleBlob versions/snapshots unmanagedNon-current object versions unmanaged
Empty bucketsHygiene onlyHygiene onlyHygiene only

Why it matters: incomplete multipart uploads are the best hidden-cost finding in the catalog. They don’t appear in the console object listing, they bill indefinitely, and a busy account can hold terabytes of them.

12. Analytics and data platform

DetectionAWSAzureGoogle Cloud
Idle warehousesRedshift clusters with no queriesNot yet availableNot yet available
Idle processing clustersEMR clusters running with no jobsNot yet availableDataproc clusters idle
Over-provisioned streamingKinesis shards above throughputEvent Hubs TUs above throughputNot yet available
Idle search/observabilityOpenSearch domains with no queriesNot yet available

13. Logging and observability

DetectionAWSAzureGoogle Cloud
Never-expiring log retentionCloudWatch log groups set to never expireLog Analytics over-retainedCloud Logging buckets over-retained
Logs from deleted resourcesLog groups with no recent writes (Lambda only)Not yet availableNot yet available
Excessive custom metricsCloudWatch custom metrics unusedNot yet availableUnused custom metrics

Why it matters: CloudWatch defaults to infinite retention. Multiply that by every Lambda function anyone ever deployed and it becomes a real line item that nobody has ever looked at.

14. Serverless and edge

DetectionAWSAzureGoogle Cloud
Unused provisioned concurrencyLambda provisioned concurrency with no invocationsFunctions Premium plan idleCloud Run min-instances with no traffic
Never-invoked functionsLambda with zero invocationsFunctions with zero executionsCloud Functions with zero calls
Idle CDNCloudFront distributions with negligible requestsFront Door / CDN profiles idle
Orphaned DNSRoute 53 zones for domains no longer resolvingAzure DNS zones orphanedCloud DNS zones orphaned
Unused API stagesAPI Gateway stages with no callsNot yet availableNot yet available

15. Artifact registries

DetectionAWSAzureGoogle Cloud
Untagged/stale imagesECR without lifecycle policyACR untagged manifestsArtifact Registry stale images
Over-provisioned registry tierACR Premium where Standard suffices

16. Commitments and discount instruments

DetectionAWSAzureGoogle Cloud
Expiring commitmentsRIs and Savings Plans expiring in <30 daysNot yet availableResource-based CUDs expiring in <30 days
Underutilized commitmentsRI/SP utilization below thresholdNot yet availableNot yet available
Coverage gapsSteady-state usage on on-demand ratesNot yet availableNot yet available
Licensing benefit unusedAzure Hybrid Benefit not applied

Boundary: Cloud-Vex reports commitment health. It does not purchase, sell, or exchange commitments — that’s a different product with different risk, and buying financial instruments on a customer’s behalf is outside the read-only model.

17. Cross-cutting detections

DetectionApplies to
Resources in regions you don’t operate inNot yet available — needs a per-account “expected regions” setting we haven’t built yet
Untagged / unowned resourcesAll three — no owner means no one will ever delete it
Resources orphaned from deleted IaC stacksCloudFormation only today. ARM/Bicep and Terraform state drift are not yet available
Duplicate workloads across cloudsNot yet available — needs findings joined across a customer’s accounts, which is a different layer of the product than a single-account check
Cost anomaliesAWS only today, via Cost Explorer’s own anomaly detection. Azure and Google Cloud are not yet available
Marketplace subscriptions for dead resourcesNot yet available on any cloud — none of the three publishes a buyer-side API for a customer’s own active subscriptions

Why the region check matters: a proof-of-concept spun up in ap-southeast-2 two years ago is invisible to everyone who only ever looks at their home region. This one’s on the roadmap, not live yet — see the pending items above.

18. Managed platform services

DetectionAWSAzureGoogle Cloud
Compute plan with nothing deployedElastic Beanstalk environment with no applicationApp Service Plan with zero apps — bills the full tier regardlessNot yet available
Old deployment versions retaining capacityLambda versions with provisioned concurrencyNot yet availableNot yet available
Over-provisioned plan tierBeanstalk instance type above needApp Service Plan Premium where Basic sufficesNot yet available
Idle Cloud Run / Container Apps revisionsNot yet availableCloud Run revisions with min-instances

Why it matters: an Azure App Service Plan bills its full tier whether or not a single app is deployed on it. Delete the app, forget the plan, pay forever. App Engine is the same story — old versions keep instances allocated after traffic has been shifted away.

19. Machine learning, GPU, and notebook environments

DetectionAWSAzureGoogle Cloud
Notebook instances left runningSageMaker notebook instances idleNot yet availableNot yet available
Idle GPU/accelerator instancesGPU EC2 with no utilizationNC/ND/NV-series VMs idleAny instance with an attached accelerator, idle
Idle inference endpointsSageMaker endpoints with no invocationsNot yet availableNot yet available
Abandoned training artifactsS3 model artifacts from dead experimentsNot yet availableNot yet available
Idle ML compute clustersNot yet available (EMR clusters are covered separately, see §12)Not yet availableNot yet available

Why it matters: this is the highest dollar-per-resource category in the catalog. A single idle GPU instance can run $1,000–$3,000/month, and notebook environments are notorious for being started on a Friday and rediscovered in a quarterly review.

20. Virtual desktops and end-user compute

DetectionAWSAzureGoogle Cloud
Desktops provisioned for departed usersNot yet availableNot yet available
Wrong billing modeWorkSpaces on AlwaysOn where AutoStop fits usageNot yet available
Idle app streamingAppStream fleets with no sessions

Why it matters: virtual desktops for employees who left is one of the cleanest findings there is — nobody deprovisions them, because the offboarding checklist rarely reaches the VDI console. It’s on the roadmap; today’s reliable universal APIs for resolving desktop-to-user assignment against a directory aren’t there yet on either cloud.

21. Backup, disaster recovery, and replication

DetectionAWSAzureGoogle Cloud
Backup items for deleted resourcesAWS Backup recovery points for deleted sourcesRecovery Services vault items for deleted VMs — keeps billingNot yet available
Retention far beyond stated policyDaily backups retained for yearsNot yet availableNot yet available
Replication to targets nobody readsNot yet availableNot yet availableNot yet available
DR standby for decommissioned workloadsNot yet availableNot yet availableNot yet available
Duplicate backup toolingAWS Backup plus a third-party agent covering the same resourcesSameNot yet available

Why it matters: Azure Recovery Services vaults continue billing for backup items after the source VM is deleted. The VM is gone from every inventory view, but the protected item persists.

22. File and shared storage

DetectionAWSAzureGoogle Cloud
No lifecycle/tiering policyEFS without IA lifecycle transitionNot yet availableNot yet available
Over-provisioned throughput/capacityEFS provisioned throughput unusedPremium file shares over-provisionedFilestore capacity far above used
Idle high-performance file systemsFSx for Lustre systems with no I/ONot yet availableNot yet available
Orphaned mount targetsEFS mount targets in empty subnets

23. Network path inefficiency

DetectionAWSAzureGoogle Cloud
Traffic paying NAT charges that a free endpoint would eliminateS3/DynamoDB traffic through NAT instead of a free gateway endpointStorage traffic through NAT instead of a service endpointStorage traffic through Cloud NAT instead of Private Google Access
Cross-AZ chatter between co-locatable resourcesNot yet availableNot yet availableNot yet available
Public-path traffic between own resourcesNot yet availableNot yet availableNot yet available
Redundant interface endpointsMultiple interface endpoints where one sufficesDuplicate private endpointsDuplicate PSC endpoints

Why it matters: S3 gateway endpoints are free on AWS and eliminate NAT data-processing charges entirely for S3 traffic. An account moving heavy S3 volume through a NAT gateway is paying real money — often thousands a month — for something a one-line configuration change makes free. This is the highest-ROI single recommendation in the catalog.

Cloud-Vex does not do general data-transfer optimization. Architectural network waste — a missing free endpoint, a needless cross-AZ hop — is a different thing and is squarely in scope for the product. The missing-free-endpoint check ships today; cross-AZ and public-path traffic checks need flow logs, which are opt-in on every cloud and not yet built — see above.

24. CI/CD and build infrastructure

DetectionAWSAzureGoogle Cloud
Self-hosted runners idle 24/7EC2-based GitHub/GitLab runners with no jobsVM-based agents idleGCE-based runners idle
Idle build projectsCodeBuild projects with no buildsNot yet availableNot yet available
Over-provisioned parallelismNot yet availableNot yet availableNot yet available
Orphaned build artifactsS3 artifact buckets with no lifecycleNot yet availableArtifact storage unpruned

Why it matters: self-hosted runners are provisioned once and run continuously, but they’re only doing work during business hours on weekdays — roughly 25% of the time they’re billed for.

25. Small-unit sprawl

Individually trivial, collectively material at scale. These are reported as an aggregate line rather than one finding per item.

DetectionAWSAzureGoogle Cloud
Unused encryption keysKMS customer-managed keys with no usage (~$1/mo each)Not yet availableNot yet available
Unused secretsSecrets Manager secrets never retrieved (~$0.40/mo each)Not yet availableNot yet available
Detailed monitoring where basic sufficesEC2 detailed monitoring (~$2.10/instance/mo)
Idle config/compliance recordersConfig rules evaluating dead resources
Orphaned parameter storesAdvanced-tier SSM parameters unusedNot yet available

Why it matters: a thousand unused KMS keys is $1,000/month. Nobody notices, because no single item is worth noticing.

26. Behavioral and lifecycle patterns Not yet available

The most valuable category, and the one native tools handle worst — because these require watching change over time rather than inspecting current state. That’s also why this whole category is roadmap, not live: every detection below needs a baseline built from multiple scans over time, and scan-history comparison is a design we haven’t built yet, not a per-check gap. Everything else in this catalog is a point-in-time read; this table shows what we’re building toward.

DetectionWhat it catches
Non-production running 24/7Dev, test, staging, and QA resources billed continuously for workloads used ~50 hours a week. Typically 65–70% waste on those resources
Temporary changes never revertedScaling floors raised during an incident, instance tiers upgraded “just for the migration”, provisioned concurrency added for a launch — and never rolled back
Free-tier graduationResources that started billing when a 12-month trial expired, with nobody watching for the transition
Dormant accounts, subscriptions, and projectsWhole scopes with small but nonzero spend and no human activity in months
Post-migration leftoversDMS replication instances, DataSync tasks, and Site Recovery still running after cutover completed
Burstable surplus creditsT-family instances in unlimited mode accruing surplus credit charges — cheaper on a larger fixed size
Growth without corresponding usageStorage or instance count climbing while requests stay flat
Orphaned by team departureResources whose only tagged owner no longer exists in the directory

Why it matters: “we upgraded that during the outage in March and nobody changed it back” is the most common origin story for large cloud waste, and no per-resource inspection will ever catch it. It requires baseline and drift — which is where scanning continuously will earn its keep over a one-time audit, once this category ships.

How costs are attributed

Every finding carries a dollar figure computed on effective amortized cost — after EDP, Enterprise Agreement, Savings Plan, Reserved Instance, and CUD discounts. Never list price.

Where the effective rate can’t be resolved, the finding is flagged confidence: medium and says so on the face of it.

Each finding also distinguishes:

  • Cost incurred — what this resource bills today.
  • Cost avoidable — what actually stops if you act, which is often less, since dependent resources may keep billing.
  • Reversibility — whether the action is trivially undoable (stop an instance) or permanent (delete a snapshot).

What Cloud-Vex does not do

  • No write access, ever. Cloud-Vex recommends; your team executes. No IAM role we request can change anything.
  • No automated remediation. Deliberate. Auto-deletion inside a customer’s account is exactly what a security reviewer screens for.
  • No commitment purchasing or brokerage.
  • No application-level or code-level optimization. Infrastructure waste only.
  • No general data-transfer or egress optimization. Bandwidth modelling needs data we deliberately never collect. Architectural network waste is a different thing and is in scope — see network path inefficiency.
  • No FinOps chargeback, showback, or budget allocation.

The permission model shows exactly what is granted in each cloud, and the scan cycle shows every API a scan touches.

Looking for something not on this list? Email support@cloud-vex.com.

Join the waitlist