FAQs
Who can connect or manage an AWS integration in nOps?
Who can connect or manage an AWS integration in nOps?
How does nOps use my Cost and Usage Report?
How does nOps use my Cost and Usage Report?
Can I use an existing CUR export instead of creating a new one?
Can I use an existing CUR export instead of creating a new one?
nops_cur_{your_nops_client_id}_hourly is only for teams that choose to create a new export in AWS.What happens if my existing CUR does not meet the requirements?
What happens if my existing CUR does not meet the requirements?
Is this the same as AWS Commitment Management setup?
Is this the same as AWS Commitment Management setup?
Can I add a CUR 2.0 (BCM Data Exports) export alongside my Legacy CUR?
Can I add a CUR 2.0 (BCM Data Exports) export alongside my Legacy CUR?
Can nOps deploy the IAM role and policies for me?
Can nOps deploy the IAM role and policies for me?
- The bucket name must not already exist in your account. The stack creates it, so a name that is already taken fails the deployment. If you already have a CUR bucket, see the next question.
- Deploy in
us-east-1. The nOps link opens CloudFormation inus-east-1for you — don’t change the region. AWS only offers the Legacy CUR resource type there, and deploying elsewhere fails withUnrecognized resource types: [AWS::CUR::ReportDefinition].
I already have an S3 bucket for my CUR. Can I still use the CloudFormation option?
I already have an S3 bucket for my CUR. Can I still use the CloudFormation option?
false and enter your existing bucket name.When you do this, nOps does not touch your bucket’s policy. A bucket policy is a single document, so writing one would replace everything already on your bucket — we’d rather leave your permissions alone. That means your bucket must already let AWS billing deliver the report: s3:GetBucketAcl, s3:GetBucketPolicy, and s3:PutObject for the billingreports.amazonaws.com service. Buckets that already receive a CUR normally have this. If yours doesn’t, AWS fails the export with “Failed to verify customer bucket permission” — add the grant and redeploy.The stack’s CurBucketPolicyManaged output tells you which happened: true means nOps created the bucket and its delivery policy, false means the bucket is yours to grant.What is the difference between Minimum Platform and Full Platform permissions?
What is the difference between Minimum Platform and Full Platform permissions?
- Minimum Platform (
nOpsMinimumPlatformPermissions) — Savings Analysis: read-focused access for CUR ingestion, Cost Explorer commitment visibility, and organization metadata. Use this when you only need cost and savings insights. - Full Platform (
nOpsFullPlatformPermissions) — Inform & Operate: includes all Minimum Platform permissions plus additional read and write actions for broader inventory, recommendations, and operational workflows. Full Platform also attaches the AWS-managedReadOnlyAccesspolicy and a customer-managed Deny policy.
nOpsBucketPolicy + nOpsMinimumPlatformPermissions). Full Platform uses four customer-managed policies (nOpsBucketPolicy, nOpsFullPlatformDenyList1, nOpsFullPlatformDenyList2, nOpsFullPlatformPermissions) plus the AWS-managed ReadOnlyAccess policy. See Permissions & Resources for the full breakdown.My stack deployed fine, but the ce:… permission checks fail with "User not enabled for cost explorer access"
My stack deployed fine, but the ce:… permission checks fail with "User not enabled for cost explorer access"
Overview
You’re setting up savings analysis for AWS—linking your organization’s billing data to nOps so we can help you understand costs and find ways to save. The in-app wizard walks you through it. Open Connect Amazon Web Services from Settings > Cloud Provider Integrations. You’ll complete three steps:- Account — Payer account ID, integration name, optional AWS Organization ID
- CUR Export Configuration — Legacy CUR in Billing > Data Exports (new export or bring your own); you enter bucket, export name, and path in nOps
- IAM Policy Creation — Choose Minimum or Full Platform permissions, create customer-managed policies, cross-account role with external ID, Role ARN submission
Prerequisites
Before you start, make sure you can:- Use the payer (management) account (or have someone available who can) for AWS Billing and IAM
- Create or use an S3 bucket where the Legacy CUR is (or will be) delivered — including an existing export you bring yourself, if it meets the requirements
- Create IAM policies and a cross-account IAM role in your account
- Turn on Cost Explorer in the payer account (see below) — this is separate from the IAM policies
- Optional: know your AWS Organizations ID (
o-…) if you want to group this integration in nOps
Turn on Cost Explorer in your payer account
AWS blocks all Cost Explorer API calls until the account is opted in, no matter which IAM permissions you grant. If Cost Explorer has never been opened in your payer account, nOps permission checks report thece:… actions as failing with “User not enabled for cost explorer access” even though your policy is correct.
In the payer account:
- Open Billing and Cost Management → Cost Explorer and choose Launch Cost Explorer. You can’t do this through the API, and your cost data takes up to 24 hours to appear.
- Signed in as the root user, go to the Account page and turn on IAM user and role access to Billing information. Without this, roles are denied Cost Explorer even with the right policies.
Step 1: Account
Open Cloud Provider Integrations
Enter payer account and integration name
- Payer AWS Account ID — The 12-digit account ID of your AWS Organizations management (payer) account (the account that receives the consolidated bill). Child/member account IDs are not supported for Savings Analysis onboarding.
- Integration name — A friendly label (for example, your company name plus “AWS Production”).
Optional: AWS Organization ID
o-xxxxxxxxxx) so nOps can group accounts consistently. You can select an existing org from the dropdown or enter a new ID.Continue to CUR export
Step 2: CUR Export Configuration
In the AWS Billing console, open Data Exports, choose Create, and select Legacy CUR export. Align the export with the following so nOps can rely on the data shape and delivery behavior.Export name
nops_cur_<client_id>_hourly (shown in the UI) when you are setting up a new export in AWS.Billing view and report settings
Include resource IDs
Refresh and format
Enter S3 details in nOps
- S3 bucket — Bucket name only (for example
my-cur-bucket), not ans3://URL - S3 path prefix (optional) — Prefix AWS uses under the export path, if you configured one in Data Exports
Continue to IAM
Bring your own CUR
You do not need to create a new Cost and Usage Report if you already deliver a Legacy CUR to Amazon S3 from your payer (management) account. Many teams reuse an export they configured for another FinOps or billing tool. Bring your own means you keep your existing export in AWS and tell nOps where to read it (export name, S3 bucket, and optional prefix). nOps does not require a specific export name—only that the export’s settings match what ingestion expects.When bring-your-own works well
- You already have a Legacy CUR export delivering Parquet files to S3 — a CUR 2.0 / standard data export alone does not satisfy this onboarding path, but you can add one as an optional add-on once this integration is active
- The export is on the same payer account you connect in Step 1
- You can grant the nOps integration role read access to that bucket (Step 3 updates
nOpsBucketPolicywith your bucket ARN) - You are willing to change export settings in AWS if your current export does not match the checklist below
CUR requirements checklist
Your export must meet all of the following. If any item differs, update the export in AWS Billing > Data Exports before onboarding (or create a second export that complies and use that one with nOps).What to enter in nOps (Step 2)
Use the exact values AWS shows for your existing export:- Export name — The Legacy CUR export name in Data Exports (not the S3 object filename).
- S3 bucket — Bucket name only (for example
company-cur-prod), not ans3://URL. - S3 path prefix (optional) — Only if you configured a prefix in the export’s storage settings; leave blank if files land at the bucket root under AWS’s default path.
nops_cur_{client_id}_hourly is for new exports. For bring-your-own, type your existing export name instead.
S3 bucket access
The integration IAM role must be able to list the bucket and get CUR objects. In Step 3, replace<example-bucket-name> in nOpsBucketPolicy with your CUR bucket name. If you use a bucket policy, ensure it allows the nOps role (after you create it) to read the CUR prefix.
If your export is close but not exact
Step 3: IAM Policy Creation
Create customer managed policies and a cross-account role that trusts nOps using the external ID shown in the wizard.Choose a permission level
At the top of Step 3, select Minimum Platform or Full Platform. This controls which platform policy JSON nOps shows and which IAM policy name to create:nOpsBucketPolicy) is the same for both levels.Create customer managed policies in IAM
- Minimum Platform:
nOpsBucketPolicy+nOpsMinimumPlatformPermissions(two policies) - Full Platform:
nOpsBucketPolicy+nOpsFullPlatformDenyList1+nOpsFullPlatformDenyList2+nOpsFullPlatformPermissions(four policies) — you’ll also attach the AWS-managedReadOnlyAccesspolicy in Step 4, which has no JSON to create
nOpsFullPlatformDenyList1 + nOpsFullPlatformDenyList2 + nOpsFullPlatformPermissions).IAM Policy: nOpsBucketPolicy
IAM Policy: nOpsBucketPolicy
IAM Policy: nOpsMinimumPlatformPermissions (Minimum Platform)
IAM Policy: nOpsMinimumPlatformPermissions (Minimum Platform)
IAM Policy: nOpsFullPlatformDenyList1/2 + nOpsFullPlatformPermissions (Full Platform)
IAM Policy: nOpsFullPlatformDenyList1/2 + nOpsFullPlatformPermissions (Full Platform)
ReadOnlyAccess policy plus three customer-managed documents: nOpsFullPlatformDenyList1 and nOpsFullPlatformDenyList2 (split Deny lists that carve sensitive read actions out of ReadOnlyAccess; split to stay under IAM’s policy-size quota) and nOpsFullPlatformPermissions (writes and reads ReadOnlyAccess doesn’t cover).Use Copy Policy in the nOps wizard for each document when Full Platform is selected, or see the full breakdown in Permissions & Resources.Create the IAM role
nops-integration-role-<client_id>), and you can copy it from the modal.Enter the custom trust policy
IAM Policy: trust policy
IAM Policy: trust policy
Attach policies to the role
- Minimum Platform:
nOpsBucketPolicy+nOpsMinimumPlatformPermissions - Full Platform:
nOpsBucketPolicy+nOpsFullPlatformDenyList1+nOpsFullPlatformDenyList2+nOpsFullPlatformPermissions+ the AWS-managedReadOnlyAccesspolicy (search and attach — no JSON to paste for this one). A Deny always overrides an Allow, so attachingReadOnlyAccessalongside the Deny lists cannot grant back anything those lists block.
Paste Role ARN and start onboarding
Optional: deploy child roles for member accounts
nops-sa-child-role or nops-sa-child-role-minimal) via CloudFormation StackSets from your payer/management account. Not required to finish onboarding — see Permissions & Resources for details.Manage an existing integration
Admin users can open Manage on an active AWS integration card to walk through the same steps again (for example, to update the CUR bucket, export name, or role).Request a manual CUR backfill
If you need historical CUR data that is not yet available in nOps, use Request Backfill to open a guided modal and create an AWS Support ticket. In AWS Support Console, create the case using these selections:- Related Issue: Account and Billing
- Service: Billing
- Category: Consolidated Billing Questions
- Severity: General question
- Open AWS Support Console.
- Select:
- Related Issue: Account and Billing
- Service: Billing
- Category: Consolidated Billing Questions
- Severity: General question
- Click Next step: Additional information.
- Paste the prefilled values from the modal:
- Subject:
CUR Backfill Request - Description:
- Subject:
- Click Next step: Solve now or contact us.
- Switch to the Contact us tab.
- Select Web.
- Submit the case.