TL;DR: You can't measure AWS spend by team, project, or environment until resources are tagged and those tag keys are activated for cost allocation. It's two separate switches — apply the tag, then flip it to Active in Billing — and the second is the one teams forget. That single activation is the difference between "we spend $80k/month" and "Data spends $32k, Platform $24k, and $24k is untagged." It's the dimension layer nearly every other cost tool quietly assumes you've done.
The numbers
- Two switches: tag the resource (a label AWS's billing ignores) → activate the key in Billing → Cost allocation tags (now it flows into Cost Explorer, Budgets, CUR). New data appears ~24h after activation, forward-only — historical breakdowns before activation aren't reliable.
- Untagged is real and persistent — even a well-tagged account leaves 5–15% in the untagged bucket (data transfer, NAT processing, taxes, credits don't carry tags).
- Keys are case-sensitive (
team≠Team≠TEAM); limit is 500 active user-defined keys (most accounts use 5–10). - Field examples: a $40k/mo account with 45% untagged got to 6% in six weeks (3 keys + Tag Editor bulk-fix + IaC enforcement), turning the cost review from a debate into a 5-minute read; a $9k/mo "shared services" black hole became a transparent per-team allocation once its resources were tagged.
Do this
- Pick just three keys with controlled vocabularies —
Env(prod/staging/dev/sandbox),TeamorCostCenter(not both),ProjectorApplication. Write casing and allowed values in a one-page README day one. - Activate them in Billing → Cost allocation tags, then wait ~24 hours — the cheapest cost-management improvement on AWS.
- Bulk-fix the top untagged spenders with Resource Groups → Tag Editor — filter "missing the
Teamtag," select all, set the value; don't try to backfill everything, just the top spenders. - Auto-tag new resources in IaC (Terraform variables / CDK defaults) so coverage doesn't decay.
- Enforce going forward — SCPs to deny untagged creation in prod accounts, Tag Policies (report-only) in dev, plus a weekly dump of newly-untagged resources; add an "Untagged spend > 15%" budget alert.
Gotchas
- Activation is the forgotten step — tagging 200 instances does nothing in Cost Explorer until the key is flipped Active; the #1 "why isn't this working."
- Not cleanly retroactive — trust forward-looking data; don't trust breakdowns for periods before activation.
- Case-sensitivity bites — renaming
Team→teamafter activation creates two reporting columns; decide casing once. - In an Org, only the payer account manages activation — member accounts have no knob.
Skip this if
- Nothing — this is the 30-minute foundation everything else sits on: Budgets can only go account-wide without it, Cost Explorer can only group by AWS-controlled dimensions, and anomaly detection can't say "EC2 spiked for Phoenix." Once tags are solid, AWS Cost Categories re-bundles them into stakeholder views and Cost and Usage Reports carries them as line-item columns.