Azure Resource Tagging Strategy

Mandatory and optional tag keys for Azure resources, how they build on a naming convention rather than replace it, and the rules that keep cost reports and policy enforcement reliable.

Published 18 August 2025

Tags are key-value metadata attached to resources, resource groups, and subscriptions. Where a naming strategy tells you what a resource is at a glance, a tagging strategy carries the business context that doesn’t fit in a name: who owns it, which cost centre pays for it, how sensitive the data is, and which environment it belongs to. Tags are what make cost reports, Azure Policy enforcement, and automation actually useful. Without them, cost and ownership questions turn into manual digging through resource groups.

The two strategies are meant to reuse each other. Tagging should reuse the workload and environment codes already defined in the naming convention (webapp, hrportal, prod/uat/dev) rather than inventing separate values for the same thing.

Mandatory tags

Applied to every resource group, and inherited down where Azure supports tag inheritance:

Tag keyPurposeExample value
environmentDeployment stageprod, uat, dev
workloadTies the resource back to the naming convention’s workload codewebapp, hrportal
ownerPerson or team accountable for the resourcecloudops
costcenterBilling attributionecommerce, hr
dataclassificationSensitivity of data the resource handlespublic, internal, confidential

Optional tags

Applied where relevant:

Tag keyPurposeExample value
businessimpactHow critical the resource is to the businesshigh, medium, low
reviewdateWhen the resource should next be reviewed for decommission2027-02-01

Rules that keep it working:

Worked example

Continuing the web app platform from the naming strategy:

ScopeTags applied
rg-webapp-prod-uks-01environment=prod, workload=webapp, owner=cloudops, costcenter=ecommerce, dataclassification=internal
stwebappprod01 (product images)inherits group tags, dataclassification=public (product images aren’t sensitive, so this overrides the group default)
sqldb-webapp-prod-uks-01 (orders and customer data)inherits group tags, dataclassification=confidential (contains customer PII and payment references)

Where a whole workload handles sensitive data by default, set dataclassification=confidential once at the resource group and leave it to inherit everywhere, rather than repeating it per resource.

Key points and gotchas

References