AWS Cost & Usage Reports (CUR)
Integrate AWS Cost & Usage Reports (CUR, also referred to as CUR v1) with Cloudaware to ingest detailed spend and usage data for Cost Management dashboards, allocation, and optimization.
- Audience: Cloudaware administrators, FinOps, finance teams
- Outcome: CUR files regularly ingested into Cloudaware from S3
How It Works
- AWS delivers Cost & Usage Report files to an S3 bucket in your management (payer) or member account.
- Cloudaware uses a read‑only cross‑account role, deployed through AWS CloudFormation, to read objects from the CUR bucket and prefix.
- New CUR files are detected on a schedule and normalized for Cost Management dashboards and reporting.
Prerequisites
Before you begin, confirm that you have the following:
- AWS management (payer) account with access to Billing & Cost Management.
- Dedicated S3 bucket for CUR files (versioning is recommended).
- AWS management or member account is already connected to Cloudaware. If it is not connected, complete the AWS Setup Guide first.
- Cloudaware cross‑account role is updated through CloudFormation with these permissions:
s3:ListBucketon the CUR buckets3:GetObjecton the CUR bucket prefixs3:GetBucketLocations3:ListAllMyBuckets
- If your S3 bucket uses KMS encryption, check security notes.
For AWS Organizations, you can use either a single payer‑level CUR that includes all member accounts or per‑account CURs in individual member accounts.
Locate or Configure the CUR in AWS
- Sign in to the AWS console.
- Open Billing & Cost Management → Cost & Usage Reports.
- In the navigation pane, under Legacy Pages, select Cost and Usage Reports.
- If a CUR already exists:
- Ensure that:
- Include resource IDs is enabled.
- Automatically refresh your Cost & Usage Report when charges are detected for previous months with closed bills is enabled.
- Ensure that:
- To create a new CUR:
- Click Create report.
- Enter a report name (for example,
billing-cur). - Enable Include resource IDs and Refresh automatically.
- Select an S3 bucket, then specify a prefix for CUR delivery.
- Select the desired time granularity (Hourly, Daily, or Monthly).
- Configure report versioning and data integration settings if required.
- Select the compression type (ZIP or GZIP).
- Complete the wizard and verify that the report status is Active.
For more details, refer to AWS documentation.
Use one CUR per payer account with all member account data, unless you intentionally need per‑account billing integrations.
Grant Cloudaware Access to the CUR Bucket
For each management or member account whose CUR you want Cloudaware to ingest, you must grant read access to the S3 bucket.
- In Cloudaware, go to Admin.
- Select Amazon Web Services, then click CONFIGURED.
- Select the relevant AWS account, click the three-dot menu, and choose Download CloudFormation Template.
- Open the downloaded template in a text editor. Verify that the S3 bucket placeholders are populated with your actual CUR bucket name and prefix.
- In the AWS console, open CloudFormation, select the existing Cloudaware stack for that account and click Update.
- Upload the updated template and apply the change set.
- Wait for the stack update to complete successfully.
The stack update modifies the cross-account role so Cloudaware can read objects from the CUR bucket and prefix.
Validate or Enable AWS CUR Billing Integration in Cloudaware
- In Cloudaware, go to Admin.
- Find AWS Billing and click CONFIGURED.
- Under Payer Account, locate the payer account entry or review the individual member accounts.
- Confirm that Cloudaware has discovered the correct billing report for the expected S3 bucket and prefix. The integration status must be green.
- In Cost Fields Handler, confirm the selected report type is set to CUR. Cloudaware uses the selected report type as the billing source for cost data on CMDB objects. For AWS CUR-based billing, CUR must be selected. If needed, click EDIT and select CUR. Click SAVE.
After billing is enabled, Cloudaware starts ingesting new CUR files during the next collection cycle.
AWS Organizations and Member Accounts
If you do not want to add the management account to Cloudaware, use per-account CUR integrations instead:
Important prerequisite: Member accounts can only create their own CURs if the management (payer) account has explicitly enabled Member account cost and usage reports in the AWS Billing preferences.
Create a Cost & Usage Report in each member account:
- Follow the steps in the Locate or Configure the CUR in AWS section for the member account.
- Deliver the report to an S3 bucket in that same member account.
For each member account:
- In Cloudaware, go to Admin.
- Select Amazon Web Services, click CONFIGURED.
- Select the AWS member account, click the three-dot menu, and select Download Cloudaware CloudFormation template.
- Verify that the CUR bucket name and prefix for that account are present in the template.
- Update the CloudFormation stack in AWS with the new template.
- Go back to Cloudaware. Locate the member account, and verify that the integration status shows green.
This approach allows Cloudaware to collect billing data for each account without using a payer-level integration.
As you add new member accounts to your AWS Organization over time, you must repeat these configuration steps for each new account to ensure their billing data is ingested into Cloudaware.
Verification
After you enable the integration, wait until the next collection cycle for data to appear.
- In Cloudaware, go to Admin → AWS Billing → CONFIGURED. Verify that the CUR integration status is green and that CUR is selected in Cost Fields Handler.
- Verify that AWS costs appear as expected on Cloudaware CMDB objects.
- In Cost Management dashboards when provided:
- Filter to AWS if needed, and verify that account IDs, services, regions, and cost allocation tags appear as expected.
See also: AWS Billing Verification
Troubleshooting
Data collection and processing time in Cloudaware depends on the volume of billing files. If costs do not appear within 24 hours, check the following:
- In the AWS console, verify that the CUR is still Active and delivering files to the expected S3 bucket and prefix.
- In Amazon S3, verify that new CUR objects are being created on schedule and that object timestamps are recent.
- Verify that the CloudFormation stack and IAM role used by Cloudaware grant:
s3:ListBucketon the CUR buckets3:GetObjecton the CUR prefixs3:GetBucketLocations3:ListAllMyBuckets
- In Cloudaware, go to Admin → AWS Billing, and verify that the CUR billing source is discovered, enabled, and healthy (green).
- Review any error or warning messages shown for the affected integration.
See also: AWS Billing Troubleshooting
If costs do not match AWS Cost Explorer, note that AWS billing totals may differ depending on the source used for comparison. AWS Cost Explorer is the recommended reference point for customers to validate AWS costs, but Cloudaware uses AWS Cost and Usage Report (CUR) line-item data. Because CUR and Cost Explorer can use different aggregation timing, cost views, rounding, and line-item treatment, the values may not match exactly.
In addition, CUR data is subject to reporting latency because AWS requires time to aggregate, process, and publish detailed cost data across services. As a result, CUR-based data in Cloudaware may not reflect the most recent charges immediately.
For more details, refer to AWS documentation.
Security Notes
-
Cloudaware uses a read‑only cross‑account role and never writes to your S3 buckets.
-
Restrict the role to the minimal required permissions on the CUR bucket and prefix.
-
Use separate buckets or prefixes for billing data if you require tighter access control.
-
If your S3 bucket uses KMS encryption, Cloudaware needs permission to decrypt the billing files. Because Cloudaware uses a cross-account IAM role, you must use a Customer Managed Key (CMK); the default AWS managed key (
aws/s3) does not support cross-account sharing.Update your configuration with the following:
- KMS Key Policy: Explicitly allow the Cloudaware IAM role ARN to perform kms:Decrypt. (You can also include
kms:DescribeKeyas an auditing best practice, though it is not strictly required). - Cloudaware IAM Role: Add the
kms:Decryptpermission to the Cloudaware cross-account role deployed via CloudFormation, scoped to your CMK's ARN.
- KMS Key Policy: Explicitly allow the Cloudaware IAM role ARN to perform kms:Decrypt. (You can also include