Cost allocation starts with a short required tag set, enforced at create time, then a billing export that can group by those keys. AWS uses resource tags plus Cost Allocation Tags in the billing console. Azure needs tags on resources and, for some invoices, tag inheritance enabled on the billing account or subscription. Google Cloud uses labels on resources and projects, which appear in Cloud Billing export. Shared platform costs (hub NAT, logging buckets, EKS control plane) will never be 100% tagged to a product. Document the remainder. Documentation dated 2026-08-30 is the product source. Tags do not replace account or subscription boundaries.
The concept layer is cloud cost allocation fundamentals. The FinOps operating definition is What is FinOps?.
Assumptions
- You have payer or billing-account access to activate tags or see label dimensions.
- Required keys are few enough to enforce at create time. A 30-key dictionary is out of scope.
- Shared platform costs will remain unallocated to a product. You will document a remainder rule.
- Tags refine account or subscription allocation. They do not replace those boundaries.
A dictionary small enough to enforce
Required keys that earn their place:
| Key | Purpose | Example values |
|---|---|---|
cost-center | Finance owner | platform, payments, data |
environment | Prod versus not | prod, nonprod |
application | Product or service | checkout-api |
owner | Pageable team | platform-sre |
Optional keys (compliance, data-class) help security reviews. They rarely help the monthly allocate meeting. AWS tag policies and Azure Policy can deny creates that omit the required set. Google Cloud organization policies can require labels on selected resource types.
Case and punctuation matter. Cost-Center, cost_center and cost-center are three keys. Pick one spelling and publish it.
Do not use tags as the only isolation. A shared account with perfect tags still shares IAM blast radius. See multi-account and multi-subscription structure.
Activation is a billing step, not a tagging step
On AWS, a tag on an EC2 instance does not appear in Cost Explorer until you activate that key as a cost allocation tag in the payer account. Activation is not retroactive for all historical views.
aws ce list-cost-allocation-tags --status Active --output table
aws ce get-tags --time-period Start=2026-08-01,End=2026-09-01 --tag-key cost-center
list-cost-allocation-tags shows what Finance can group by. If cost-center is missing, Cost Explorer will not split on it no matter how many instances carry the tag. get-tags lists values seen in the period. A long tail of untagged, unknown or typos (paymnets) is your data-quality backlog.
Azure: Microsoft documents enabling tags to appear on the billing invoice and in Cost Management. Inheritance can push a subscription or resource-group tag onto child usage, which helps for shared disks and some hidden resources. It also hides a resource that was tagged differently on purpose. Read the current Cost Management tag page before you turn inheritance on for the whole billing account.
az tag list --resource-id /subscriptions/00000000-0000-0000-0000-000000000000
Google Cloud:
gcloud billing accounts list
# Labels appear on the BigQuery billing export; confirm a project label:
gcloud projects describe PROJECT_ID --format='yaml(labels)'
Empty labels on a project that holds production GCE is an allocation hole for every SKU in that project.
Shared costs need an explicit rule
Hub NAT, Transit Gateway attachments, Azure Firewall, Cloud Logging storage and Kubernetes system DaemonSets are platform. Allocate them by:
- A fixed platform cost center, or
- A documented tax (percentage of product spend), or
- Split by measured bytes or vCPU where you have a meter
Do not invent a tag on the NAT gateway for every product that sent a packet. That tag will be wrong by Tuesday. Measure egress in egress cost planning and Kubernetes idle in Kubernetes cost allocation.
The cost baseline calculator is a planning worksheet, not a CUR substitute.
Provider differences
AWS Organizations tag policies can deny non-compliant tags on supported resource types. They do not tag existing resources for you.
Azure tags are not applied to every meter. Microsoft’s tag-in-billing document lists limitations. Some classic or partner meters stay untagged.
Google Cloud labels have character limits and are not tags. Network and some Google-managed resources may not carry your labels. GKE cost allocation adds its own k8s-namespace labels after you enable that feature.
Alibaba Cloud uses tags and Resource Directory members. If that is the payer, use the Alibaba billing and tag docs, not Cost Explorer.
Risks and limitations
CUR, Azure Cost Management and Cloud Billing disagree with amortized commitment views. State unblended versus amortized in every report.
Tag mutation after the fact does not rewrite last month’s invoice. Chargeback arguments that depend on a tag you added on the 20th will fail.
Automation that copies tags from a Terraform default_tags block will not cover resources created in the console. Detect untagged spend weekly. When spend jumps and tags are missing, use Finding unexpected cloud cost increases.
CloudArch Pro’s FinOps work is allocation and operating model, described at FinOps consulting. Native tools versus third-party platforms: native cost tools vs independent FinOps platforms.