Management wants a breakdown of last month's cloud spending by department, but the cost analysis filters are inconsistent and many resources appear as "unassigned" in the billing export. Resources deployed by a vendor are grouped clearly enough to track, but years of internally created storage accounts, NAT gateways, and other services have inconsistent or missing tags. What tagging, resource-group, policy, or automation strategies do you use to keep ownership and cost allocation accurate without creating a maintenance nightmare?
5 Answers
I ended up using PowerShell to enforce the tagging standard because relying on engineers to tag resources consistently did not work. Policy can handle a lot, but an automated script or reusable module is useful for fixing existing resources and flagging bad names or missing ownership data. I would avoid deleting anything until the inventory and last-used information are verified.
Azure Policy is a good starting point. You can require key tags and inherit tags from resource groups down to their child resources. Be careful with strict enforcement, though—services such as AKS and Container Apps can create related resources automatically and may not behave nicely with every policy. Infrastructure as code, such as Terraform, also helps establish the tags at deployment time.
A practical setup is roughly one service per resource group, or even one subscription per service for larger environments. Maintain an expected tag map for each resource group, run a validation script before monthly reporting, and use a remediation pipeline to copy resource-group tags to child resources every few hours. For charges that do not map neatly to resource groups, keep a separate service-to-cost-center mapping file.
Another option is to pull the detailed cost data through the Azure billing API and maintain the allocation logic outside the portal. A scheduled process can map resources to departments, highlight outliers, and identify new unassigned resources for review. Automation is especially helpful because the portal layout and capabilities keep changing.
For reporting, I usually start at the resource-group level because it is more dependable than trying to make every individual resource perfect. Keep services reasonably separated into resource groups, then use Azure Policy to add useful metadata such as creation date and ownership. Resource-group boundaries often provide a cleaner cost model than tags alone.

Related Questions
Can't Load PhpMyadmin On After Server Update
Redirect www to non-www in Apache Conf
How To Check If Your SSL Cert Is SHA 1
Windows TrackPad Gestures