AWS: Validate your Cost and Usage Report

When connecting to your AWS Management or Payer Account, CloudZero will attempt to connect to an existing Cost and Usage Report if it is in the correct format and granularity for CloudZero to ingest.

If there is no existing Cost and Usage Report that is suitable, the Automated path will try to create one, or the Manual path will provide instructions on how to create one.

For a Cost and Usage Report to be valid for CloudZero, it must have the following required settings:

  • Time Granularity: Hourly
  • Report Versioning: Create New Report Version
  • Export format: CSV with GZIP compression, or Parquet
  • Include Resource IDs: ON
  • Data Refresh Settings: AUTOMATIC

The following are recommended settings:

  • S3 bucket name: <your-company-name>-billing (recommended name)
  • Report path prefix: hourly-billing (recommended name)
ℹ️

CloudZero supports CUR 1.0 in either CSV (GZIP) or Parquet format. If you create a Cost and Usage Report manually, you must select Legacy CUR export.

ℹ️

Tag handling differs between CSV and Parquet CUR formats. When AWS writes a Parquet CUR, AWS normalizes tag column names by lowercasing them and replacing non-alphanumeric characters with underscores. This happens at AWS's end, before CloudZero receives the file. CSV CUR is not affected — AWS preserves the original tag key in CSV column headers.

What this means in CloudZero: if you have multiple active cost allocation tag keys that differ only by capitalization or punctuation — for example, Environment and environment, or cz-owner and cz:owner — they appear as a single tag in CloudZero reports. The surviving tag is the first one returned by AWS Cost Explorer; the others are not visible.

  • Tag values on each resource are preserved if you only apply one variant per resource (the common case). The values appear correctly under the surviving tag.
  • Filtering or grouping by the merged-away tag returns no results in CloudZero, because that tag does not exist as a separate column.
  • If you apply both variants to the same resource (for example, tagging one EC2 instance with both Environment=prod and environment=staging), AWS keeps only one value when writing the Parquet file. The other value is lost at AWS's end and cannot be recovered.

To check whether any of your tags collide: in the AWS console, open Billing → Cost allocation tags, filter for Active user-defined tags, and look for keys that match each other after lowercasing and replacing non-alphanumeric characters with underscores. For example, both cz-owner and cz:owner become cz_owner.

To preserve full tag-key fidelity: either standardize your tag keys in AWS so each concept uses one consistent form, or use CSV CUR instead of Parquet CUR.

ℹ️

If you create a new Cost and Usage Report, it can take up to 24 hours before AWS releases billing data to the new report.

For more information on configuring AWS Cost and Usage Reporting, see the AWS documentation for Creating reports.