Skip to content

Cost sources

A cost source connects a workspace to one cloud's cost export, for every account it bills.

A cost source reads one cost export: an AWS Data Export, a GCP billing export or an Azure cost export. It has its own keyless credential, apart from your asset sources. Billing rarely matches how you connect accounts: single AWS accounts are often billed through their management account, and a GCP billing account can pay for projects in several organizations.

Cost sources are optional. Without one, a workspace shows its assets and changes but no cost.

What a cost source covers

A cost source imports every row of its export and links each to its account and asset, whichever asset source holds them. An account that's in no asset source still shows in cost reports, as not connected. Each cost source page lists the accounts it covers, and each asset source page shows which cost source covers each account.

Each billing account or scope is connected once per workspace. When two exports bill the same account, such as a member account's own Data Export beside its management account's, the one you connected first keeps it, and the other shows a warning, so no cost is counted twice.

Syncs and permission checks

Each cost source syncs once a day, and whenever you ask. Every export is mapped to FOCUScolumns, so costs from all three clouds sit in one model. Clouds keep correcting a month for days after it ends, for credits and refunds, so each sync rewrites the current and the previous month. A missing permission shows as a warning on the cost source, and never stops asset collection.

Firewalls

AssetHermit reaches your clouds from a few fixed addresses, which each workspace's settings list under Network. A storage account, a VPC Service Controls perimeter or anything else that admits callers by address needs them; when one turns AssetHermit away, the permission check says so and lists them beside the fix. Each region has its own addresses, shared with other workspaces there, so an allowlist admits AssetHermit, not one workspace: the role or identity you grant is what limits access to yours. We keep the addresses fixed, and tell a workspace's admins if they ever change.

Plan limits

PlanCost sources per workspace
Starter2
Team10
Enterprise20

Kinds

Beta

GCP billing export: Google Cloud is in beta, on request. Ask for access from the Help menu in the app: it opens a support request.

Beta

Azure cost export: Azure is in beta, on request. Ask for access from the Help menu in the app: it opens a support request.

DetailAWS Data Export GCP billing export BetaAzure cost export Beta
Identified byAWS account IDBilling account IDBilling scope ID
ReadsA Data Export (CUR 2.0 or FOCUS) in Parquet, to an S3 bucket in the account that holds it, usually the management accountThe Cloud Billing export to BigQuery (detailed usage cost) of one billing accountA Cost Management export of cost and usage details (FOCUS), daily, in Parquet, to a storage account, for a billing account, a billing profile or a subscription. Pay-as-you-go billing accounts can't create one
CredentialA cost role with an External ID, from a CloudFormation stack generated for you in that accountYour workspace's principal set, which our collector signs in to through workload identity federation, with no keyA managed identity in your subscription, from an ARM template generated for you, whose federated credentials trust only your workspace, with no secret
Permissionss3:ListBucket on the export prefix and s3:GetObject under it, and kms:Decrypt if the bucket uses your own KMS keyroles/bigquery.dataViewer on the export dataset, and roles/bigquery.jobUser on the dataset's project, where the queries runStorage Blob Data Reader on the export container
Set up in your cloudThe Data Export, and the stack. Optionally, launch the stack first with a setup role that lists your Data Exports, pick one, then update the stackThe billing export, and the two rolesThe export, and the template, deployed into the storage account's resource group. With an Azure asset source connected, pick a subscription's export from those it sees. Then enter the identity's client ID