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
| Plan | Cost sources per workspace |
|---|---|
| Starter | 2 |
| Team | 10 |
| Enterprise | 20 |
Kinds
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.
Azure cost export: Azure is in beta, on request. Ask for access from the Help menu in the app: it opens a support request.
| Detail | AWS Data Export | GCP billing export Beta | Azure cost export Beta |
|---|---|---|---|
| Identified by | AWS account ID | Billing account ID | Billing scope ID |
| Reads | A Data Export (CUR 2.0 or FOCUS) in Parquet, to an S3 bucket in the account that holds it, usually the management account | The Cloud Billing export to BigQuery (detailed usage cost) of one billing account | A 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 |
| Credential | A cost role with an External ID, from a CloudFormation stack generated for you in that account | Your workspace's principal set, which our collector signs in to through workload identity federation, with no key | A managed identity in your subscription, from an ARM template generated for you, whose federated credentials trust only your workspace, with no secret |
| Permissions | s3:ListBucket on the export prefix and s3:GetObject under it, and kms:Decrypt if the bucket uses your own KMS key | roles/bigquery.dataViewer on the export dataset, and roles/bigquery.jobUser on the dataset's project, where the queries run | Storage Blob Data Reader on the export container |
| Set up in your cloud | The Data Export, and the stack. Optionally, launch the stack first with a setup role that lists your Data Exports, pick one, then update the stack | The billing export, and the two roles | The 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 |