Connect Azure billing
Export amortized cost from Cost Management to a storage account and give KubeOn's identity read access.
Who does what
How Azure data reaches KubeOn
- 01
Billing export
A daily Cost Management export of amortized cost or FOCUS data to a storage account you own.
Your storage account
- 02
Read-only access
A managed identity with Storage Blob Data Reader on the export and Cost Management Reader on the scope.
KubeOn managed identity
- 03
Cluster snapshots
A cluster token from KubeOn. No workload identity or storage account: snapshots go to your organization in KubeOn and nowhere else.
Agent in each cluster
- 04
Allocate + reconcile
The hub joins hourly snapshots with the bill, allocates each node's cost to pods, teams and labels, and reconciles every cluster to its bill.
KubeOn hub
The KubeOn agent never changes your clusters. The billing identity only reads, and the agent can only write snapshots.
No keys needed
Create the export and grant access
# 1. Export amortized cost (FOCUS) daily to a storage accountaz costmanagement export create \ --name kubeon-daily \ --scope "/subscriptions/00000000-0000-0000-0000-000000000000" \ --storage-account-id "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/finops/providers/Microsoft.Storage/storageAccounts/acmecostexports" \ --storage-container cost-exports \ --storage-directory kubeon \ --timeframe MonthToDate \ --type AmortizedCost \ --recurrence Daily \ --recurrence-period from="2026-10-01T00:00:00" to="2027-10-01T00:00:00"# 2. Let the KubeOn identity read the export and cost dataaz role assignment create \ --assignee "<kubeon-managed-identity-client-id>" \ --role "Storage Blob Data Reader" \ --scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/finops/providers/Microsoft.Storage/storageAccounts/acmecostexports"az role assignment create \ --assignee "<kubeon-managed-identity-client-id>" \ --role "Cost Management Reader" \ --scope "/subscriptions/00000000-0000-0000-0000-000000000000"Exports can be created at subscription, resource group, management group or billing account scope. Create one per scope you want covered, or one at billing account scope for everything.
Add the integration
In Settings > Integrations, choose Azure and enter the storage account, container and directory. Use the managed identity client ID shown on the page.
Amortized or FOCUS
KubeOn reads both the amortized cost export and the FOCUS export. Amortized cost spreads reservations and savings plans over the hours they cover, which is what allocation needs.
Tags and labels
Azure resource tags and Kubernetes labels resolve to the same owner keys through tag normalization, so a CostCenter tag on a node pool and a cost-center label on a pod land in the same column.