AWS cost · cost allocation tags
You cannot cut an AWS bill you cannot read: cost allocation tags
Every other cost fix starts with the same question: where is the money going? On an untagged account you genuinely cannot answer it. Cost Explorer will tell you EC2 is your biggest line, but not whether that is production carrying the business or a staging environment nobody switched off. The spend is real; the attribution is missing. Cost allocation tags are how you get it back - and they are free. This is not a cost cut on its own. It is the thing that makes every other cut findable.
Cost allocation tags label resources by environment, service, team, and project, so AWS can break the bill down by each. They are free, and they are the enabler for every other cost cut - without them you can see that a service costs money, but not which part of it to fix. Tag consistently, activate the tags in Billing, and the bill becomes readable.
Which tags actually matter?
Four tags cover most of the value - keep the set small and apply it everywhere:
| Tag | Example values | What it unlocks |
|---|---|---|
| Environment | prod / staging / dev | split production from the cheap-to-cut rest |
| Service / app | api / worker / web | see which service actually drives spend |
| Team / owner | payments / data | give each cost a person who can answer for it |
| Project | migration-2026 | track a temporary effort and shut it off after |
Why does untagged spend hide so well?
Because the default bill is organized by what AWS sells, not by what you run. AWS groups costs by service - EC2, RDS, S3 - which tells you nothing about which environment or team is behind each. A staging setup and a production one both show up as “EC2,” blended into one number. Tags are the only thing that splits that number along the lines you actually make decisions on. Without them, the biggest, easiest cut - non-production spend - is invisible inside the total.
How do I set it up and find what is untagged?
Apply your four tags consistently, then activate them under Cost Allocation Tags in the Billing console so they show up in Cost Explorer. The other half of the job is the untagged long tail - the resources escaping the breakdown. This lists resources that carry no tags at all, so you know exactly what to go label:
# resources with no tags - the ones escaping your cost breakdown
aws resourcegroupstaggingapi get-resources \
--query 'ResourceTagMappingList[?length(Tags)==`0`].ResourceARN' \
--output text | tr '\t' '\n'Once the bill is readable by environment, the fastest win it usually exposes is non-production spend - which is exactly what Multi-AZ dev databases and staging left running overnight are made of.
Cannot tell which part of your bill to cut first? Connect your account read-only and see what it is wasting, in real dollars.
The role can only read - Get, Describe, List, nothing else. Read the exact permissions before you deploy it, and delete the stack whenever you want.
Frequently asked questions
What are AWS cost allocation tags?+
Key-value labels on resources - like Environment=prod or Team=payments - that AWS can break your bill down by. Once activated, they turn a single lump sum into spend you can group by service, environment, team, or project in Cost Explorer and the Cost and Usage Report.
Why can I not see what is costing me money on AWS?+
Because untagged resources all land in one undifferentiated bill. Without tags, Cost Explorer can show you spend by service, but not which team, app, or environment inside that service is responsible. You see that EC2 costs a lot; you cannot see that 60% of it is a staging environment nobody needs running.
Do cost allocation tags cost anything?+
No. Tagging resources and activating cost allocation tags is free. The only cost is the small effort to apply a consistent set of tags. Given that tags are what make every other cost cut visible and targetable, they are the highest-leverage free thing in AWS cost management.
How do I set up cost allocation tags?+
Apply a consistent set of tags to your resources (Environment, Service, Team, Project), then activate them as cost allocation tags in the Billing console under Cost Allocation Tags. After activation they begin appearing in Cost Explorer and the Cost and Usage Report - note that activation is not retroactive, so the sooner you do it the more history you build.
Which cost allocation tags should I use?+
Start with four: Environment (prod/staging/dev), Service or app, Team or owner, and Project. Environment alone often pays for itself by exposing how much non-production spend is hiding in the total. Keep the set small and consistent - a few tags applied everywhere beats a dozen applied unevenly.
How do I find untagged resources?+
Use the Resource Groups Tagging API to list resources and filter for those with no tags. It gives you the inventory of what is escaping your cost breakdown, so you can go tag it. Fixing the untagged long tail is what makes the tags trustworthy enough to act on.
Related cost breakdowns
Are reserved instances worth it? The real math
A steady t2.micro drops from ~$9.78/month on-demand to ~$4.42/month on a 3-year reservation - 55% off, same server. Here is when reserving pays off and when it does not.
Savings Plans vs reserved instances: which one, and how much
A Compute Savings Plan cuts up to 66% and flexes across families, regions, Fargate and Lambda; an EC2 Instance Savings Plan cuts up to 72% but locks to a family. Here is how to choose.
Why your AWS bill suddenly jumped (the free tier ran out)
AWS free tier is time-limited: legacy accounts get 12 months, new ones get $200 in credits for 6 months. When it lapses, previously-free resources bill at full rate. Here is how to see it coming.