What You'll Need to Provide in Costory
Role ARN (federated identity)
S3 Bucket name
Prefix (path to CUR 2.0 data)
Step 0: Prepare Your AWS Account (EKS/ECS Users)
Skip this step if you don't use EKS or ECS.
0.1 Enable Split Cost Allocation Data
Under Split cost allocation data, enable EKS and/or ECS
Select Based on resource_request
0.2 Activate Cost Allocation Tags
Go to Cost Allocation Tags
Activate all tags you want Costory to analyze (now and in the future)
For EKS/ECS splitting: ensure all
aws:eks:*andaws:ecs:*tags are enabled
Important: Tags not activated won't appear in your CUR 2.0 data. This cannot be fixed retroactively.
Step 1: Choose Your Setup Method
Option A: CloudFormation Template (Recommended)
One-click setup that creates everything automatically.
Set your region to US East (N. Virginia) - click the region selector in the top-right corner
Open the CloudFormation template: Launch Stack
Click Create stack and follow the prompts
Once complete, go to the Outputs tab and save:
Bucket Name
Role ARN
Prefix
What the template creates:
S3 bucket for CUR exports
CUR 2.0 Data Export (Parquet format)
IAM role with read-only access for Costory
Option B: Manual Setup
Step 1a: Create the Data Export
Go to Data Exports (must use parent billing account)
Click Create → Select Standard Data Export
Configure the export:
Name: e.g.,
yourcompany-data-exportFormat: CUR 2.0
Include: Resource IDs, Split cost allocation data
Granularity: HOURLY (for EKS splitting) or DAILY (otherwise)
Compression: Parquet
Overwrite: Enable "Override existing data export file"
Create or select an S3 bucket (e.g.,
costory-exports)Set a prefix (do NOT include trailing
/- AWS adds it automatically)Click Review and Complete
Note: First export takes up to 12 hours.
Step 1b: Create IAM Policy
Go to IAM Policies → Create policy → JSON
Paste this policy (replace
<YOUR_BUCKET_NAME>):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetObject"],
"Resource": [
"arn:aws:s3:::<YOUR_BUCKET_NAME>",
"arn:aws:s3:::<YOUR_BUCKET_NAME>/*"
]
}
]
}Name it
Costory-read-s3and create
Step 1c: Create IAM Role
Go to IAM Roles → Create role → Custom trust policy
Paste this trust policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "accounts.google.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"accounts.google.com:sub": [
"110566759229541603476",
"107654210203154458570"
]
}
}
}
]
}Click Next, search for and attach
Costory-read-s3Name the role
costory-trust-linkCopy the Role ARN from the role summary
Step 2: Request a Backfill
AWS only exports the current month by default. Choose your backfill approach:
For up to 12 months (self-service)
Go to Cost Allocation Tags
Select AWS-generated cost allocation tags tab
Find and activate
aws:createdByWait for status to change to Active
Select
aws:createdByagain → Click Backfill tagsChoose your backfill start date (up to 12 months)
For more than 12 months
Submit an AWS Support request:
Hi AWS Support, Please backfill our AWS Cost and Usage Report (CUR 2.0) named <CUR_NAME> with the last 36 months of billing data for account ID [Your AWS Account ID]. Let me know if anything is needed from our end to proceed. Thanks
Step 3: Configure in Costory
Wait until you see data in your S3 bucket (up to 12 hours after creating the export).
Go to Costory → Datasources → Billing
Click Import New Billing Datasource → Select AWS
Enter:
Bucket Name
Role ARN
Prefix (must end with
/)EKS Split Data: Enable if using EKS
Start/End Date: Only if requested by Costory Support
Click Next to validate, then Import
Data will be available the next day.
FAQ
What format should the CUR 2.0 file be in?
Parquet format is required for optimal processing and analytics performance.
Does the CUR need to be in the master payer account?
No, but it must include complete billing data for the master payer.
Can the CUR file overwrite itself during the month?
Yes, this is expected and ensures up-to-date data.
How long until data appears in Costory?
First fetch takes about 48 hours. Check the next morning (around 10 AM local time).
