TL;DR: Half of cost optimization is just finding things: the unattached volumes, unassociated Elastic IPs ($3.60/month each, forever), NAT Gateways in abandoned VPCs, and SageMaker endpoints nobody ever deleted. Resource Explorer is AWS's free account-wide search box — enable indexing per region, promote one aggregator, and "what do we even have?" becomes a query. Accounts older than two years typically surface $200–2,000/month of pure waste on the first pass.
The numbers
- Cost of the service: $0 — no metering, org-wide aggregation included
- The usual suspects it finds: unattached EBS ($0.08/GB-month), unassociated EIPs (~$3.60/month each), idle NLBs ($16+/month), NAT Gateways ($32/month + data), zero-invocation SageMaker endpoints ($100–500/month)
- Field examples: a 30-account org found 8 forgotten NAT Gateways (~$500/month with data charges — $6k/year for a 90-minute cleanup); an inherited 5-year-old account held 214 unattached volumes (8.7 TB, ~$700/month)
Do this
-
Enable indexing in every active region (Resource Explorer does nothing by default — empty search results mean setup, not brokenness), designate your primary region as the aggregator index, wait ~10 minutes.
-
Run the money queries:
resourcetype:ec2:volumefiltered toavailablestateresourcetype:ec2:elastic-ipwith no associationresourcetype:ec2:natgateway,resourcetype:sagemaker:endpoint,resourcetype:elasticloadbalancing:loadbalancerNOT tag:Owner— orphans concentrate among the untaggedtag:Owner=<person-who-left>— almost always cleanup candidates
-
Validate before deleting: CloudTrail for creator/last use, CloudWatch for actual traffic (HealthyHostCount, invocations), snapshot before removing anything questionable. Rank by monthly cost; the top 10 usually carry 80% of the win.
-
Org-wide: enable the multi-account aggregator in the management account — "every NAT Gateway across 50 accounts" becomes one query instead of fifty logins.
-
Make it recurring + prevent re-accumulation: quarterly search, plus SCP-enforced tagging so the next pass is shorter.
Gotchas
- It shows resources, not costs — pair with Cost Explorer; the intersection of "expensive service" and "old/untagged resource" is where the wins live.
- No history: current state only. "What was deleted last week" is CloudTrail/Config territory.
- Tag search quality = tagging discipline — a 60%-untagged estate limits the fancy queries (but
NOT tag:Owneris itself the finding). - Not every resource type is indexed — check the supported list before declaring the account clean.
- Tool boundaries: Resource Explorer = fast search (free); AWS Config = change history (paid); Tag Editor = bulk tag edits.
Skip this if
- The account is young and small enough to eyeball in two consoles.
- You already run a mature inventory/CMDB pipeline — then this is just a handy backup query, not a program.
- Discovery isn't the bottleneck — if you already know the waste, go fix it: DeleteOnTermination, NAT consolidation, Trusted Advisor checks.