← Back to home

AWS FinOps for Cloud Ops Teams — Week 2
Cost Visibility & Tagging at Scale

Mar 29, 2026 6 min read FinOps • AWS • Tagging Series: 2 of 7

Last week I argued that FinOps is fundamentally about making cloud cost legible at scale. This week we get to the foundation: cost visibility and tagging. Without this layer, every other FinOps activity — commitments, rightsizing, governance, dashboards — runs on guesswork.

If you remember one line from this post: youou cannot manage what you cannot attribute.

The problem with many accounts

AWS Organizations and consolidated billing give you a single number per account, per service, per month. That's enough to know your bill went up. It is nowhere near enough to know why.

In the multi-account environments I've worked in, the same five questions come up every month:

Each of those is a tagging question.

A tagging strategy that survives contact with reality

The mistake I see most often is teams designing a 20-tag schema, then enforcing none of it. You end up with technically rich but practically useless metadata — half the resources have owner, a quarter have Owner, and the rest are blank.

Pick a small, mandatory baseline. Make every other tag optional. Here's the schema I'd start with:

Tag KeyExample ValueWhy it exists
Environmentproduction, staging, devDrives nearly every cost question
Teamplatform, data-engineeringPoints at a human owner
Projectcheckout-service, ml-pipelineConnects spend to a business outcome
CostCenter1042, 2310Lets finance map spend to GL accounts

Four tags. That's it. Anything beyond this is bonus, not baseline.

Enforcement: where most programs quietly fail

A schema in a wiki page is not enforcement. There are three layers I'd insist on for any serious tagging program at 40+ accounts:

If you only do one of those, do AWS Config. The compliance report alone changes behavior, because suddenly engineers can see their score.

Activate the tags in Billing! If not, then none of this matters, just give up now

This is the easy step that's easy to miss: tags only show up in Cost Explorer and Cost & Usage Reports if they're activated as Cost Allocation Tags in the Billing console of the management account. Activation only applies going forward, so do this before you start running reports.

Activate every tag in your required schema, plus any optional ones you want to slice on (e.g., Service, Owner).

Cost Explorer for ops engineers

Once tags are flowing, Cost Explorer becomes a different tool. A few queries I run constantly:

Save these as Cost Explorer reports and share the URLs with team leads. People look at things you make easy to look at.

Don't ignore the long tail

One of the realities of multi-account environments is that most of the unattributed spend lives in shared services accounts: NAT Gateways, Transit Gateway, Route 53 resolver endpoints, central logging buckets. These can't be tagged in a way that maps cleanly to a product team.

You have two reasonable options:

Pick one and write it down. The worst outcome is "shared services are someone else's problem", which is how you end up with $40K/month NAT Gateway bills nobody touches.

Account vending: the real long-term fix

If your organization is growing accounts faster than humans can tag them, the right place to enforce tagging isn't on individual resources — it's on the accounts themselves, at creation time. AWS Control Tower, Account Factory for Terraform, or your own vending pipeline can guarantee:

Account-level tags inherit nothing automatically, but they give Cost Explorer something useful to group on even when individual resources are still messy.

Rule of thumb

If a resource doesn't have at least an Environment and Team tag, you've already lost the ability to meaningfully attribute its cost. Anything more sophisticated — RIs, rightsizing, governance, reviews — is built on top of this.

Next week we move from "where is the money going?" to "how do we stop overpaying for it?" — Reserved Instances and Savings Plans across many accounts.

Previous← Week 1 — Why FinOps Matters at Scale Next weekWeek 3 — Reserved Instances & Savings Plans →