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.I'm already connected. Can I add CUR 2.0 later?
I'm already connected. Can I add CUR 2.0 later?
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 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, so 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, so 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.The same applies to CUR 2.0: an existing bucket must also allow bcm-data-exports.amazonaws.com. See Let AWS Data Exports write to an existing bucket.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"
Why is Cluster Name missing in Kubernetes Explorer?
Why is Cluster Name missing in Kubernetes Explorer?
aws:eks:cluster-name active in your payer account. Without that tag, nOps never receives the warehouse column resource_tags_aws_eks_cluster_name, and Explorer shows that Cluster Name isn’t available for this account.Check all three:- In Billing and Cost Management preferences, opt in to Split Cost Allocation Data for Amazon EKS (payer account). See Enabling Split Cost Allocation Data.
- On your Legacy CUR export, enable Split cost allocation data under Additional export content (CloudFormation-created exports already include this; bring-your-own must match).
- Under Cost allocation tags, confirm
aws:eks:cluster-nameis Active. AWS enables this tag by default for new accounts, but a tag that was previously deactivated stays off until you activate it again.
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. The wizard has these steps:- Account: Payer account ID, integration name, optional AWS Organization ID
-
Setup: Choose CloudFormation (Recommended) or Manual IAM:
- CloudFormation: Deploy one stack that creates the S3 bucket, your Legacy CUR export, your CUR 2.0 export, and the IAM role. This is the whole setup; there is no Step 3.
- Manual IAM: Configure your Legacy CUR in Billing > Data Exports (new export or bring your own) and enter the bucket, export name, and path in nOps.
- IAM Policy Creation (Manual IAM only): Choose Minimum or Full Platform permissions, create customer-managed policies and a cross-account role with an external ID, then submit the Role ARN
- Verify: Run verification to confirm nOps can access your account
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 setup
Step 2: Setup
After Next on the Account step, choose how to connect your payer account.Option A: CloudFormation (Recommended)
Choose CloudFormation and a permission level
Name the S3 bucket
us-east-1. Already have a CUR bucket? See the FAQ, or choose Manual IAM instead.Check AWS CUR 2.0
Deploy the payer stack
us-east-1, select the box acknowledging that CloudFormation may create IAM resources, and create the stack. Wait for it to show CREATE_COMPLETE.Paste the Role ARN
Optional: deploy child roles
Start onboarding
Option B: Manual IAM
Select Manual IAM. 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 and Split Cost Allocation Data
aws:eks:cluster-name active — see the CUR requirements checklist.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
Set up CUR 2.0
Continue to IAM
CUR 2.0 (BCM Data Exports)
CUR 2.0 is AWS’s newer cost and usage export. AWS also calls it a standard data export or BCM Data Exports. nOps reads it in addition to your Legacy CUR. It does not replace it, so you still complete the Legacy CUR settings above. CUR 2.0 is part of Step 2 in the wizard. You’ll see an AWS CUR 2.0 section on the setup screen (below the Legacy CUR settings with Manual IAM). Enable AWS CUR 2.0 (BCM Data Exports) is checked by default. Keep it checked so nOps can show Amazon Bedrock details, including which IAM principal made each model call.What you enter in nOps
- CloudFormation (recommended)
- Manual IAM
Choose CloudFormation
Name the S3 bucket
Fill in AWS CUR 2.0
- S3 bucket: the same bucket you named above
- S3 path prefix:
nops-cur2 - Export name:
nops_cur2_{your_nops_client_id}_hourly
Deploy the stack
us-east-1, then create the stack in AWS. It creates your Legacy CUR export, your CUR 2.0 export, and the IAM role.Paste the Role ARN
Check that it’s working
On the AWS integration card in Settings > Cloud Provider Integrations, a CUR 2.0 badge shows the export’s status:Add CUR 2.0 to an existing integration
Use this if you already connected AWS with a Legacy CUR and want to add CUR 2.0 now. Your Legacy CUR keeps working and nothing about it changes. You add CUR 2.0 from Manage, with a small add-on stack that creates the export (and, if you want, its bucket) without touching the stack you deployed originally.Before you start
- You’re an Admin in nOps and can create CloudFormation stacks in your AWS payer account.
- Decide where the CUR 2.0 files will land. The easiest choice is a new bucket, because the add-on stack sets it up completely. Reusing your Legacy CUR bucket or another bucket you own means editing that bucket’s policy first (see below).
Choose an option
Steps
Open Manage
Fill in AWS CUR 2.0
- S3 bucket. A new bucket name, or the existing bucket you’re reusing.
- Export name. For a new export, use
nops_cur2_{your_nops_client_id}_hourly. For an export you already have, use the exact name AWS shows. - S3 path prefix (optional). Leave blank to use
nops-cur2for a new export. For an export you already have, enter the prefix it uses.
Deploy the add-on stack
us-east-1. Keep that region, select the box acknowledging that CloudFormation may create IAM resources, create the stack, and wait for CREATE_COMPLETE.The stack also attaches a separate nOpsCur2BucketPolicy to your existing nOps role, so nOps can read the bucket.Save in nOps
Check the badge
If the stack fails
Other ways to do it
Prefer not to add a stack? Pick one of these instead:- Update your original stack. Set CreateCur2Export to
trueand Cur2BucketName to your bucket, then update the stack. - Do it by hand. Create the export in AWS using the Manual IAM tab above, then copy the
nOpsBucketPolicyJSON from Step 3 over your existing policy.
Let AWS Data Exports write to an existing bucket
When a stack creates the bucket, it also lets AWS Data Exports write to it. When you use a bucket you already own, the stack never edits your bucket policy. A bucket policy is a single document, so writing one would replace everything already on it. If AWS fails the export with “Failed to verify customer bucket permission”, add these two statements to theStatement list in the bucket’s policy (replace YOUR_BUCKET and YOUR_ACCOUNT_ID) and deploy again:
billingreports.amazonaws.com grant your Legacy CUR uses. A bucket that already receives a Legacy CUR usually needs both.
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 set up CUR 2.0 alongside it (see CUR 2.0 (BCM Data Exports))
- 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 (Manual IAM)
This step is only for Manual IAM. If you chose CloudFormation, the stack already created everything here and you can skip to Verify. 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 the setup screen, 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 when you attach policies below, 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.Verify
The last step of the wizard checks that nOps can reach your account. Click Run verification and wait for the results. Each check shows whether it passed and, if not, what to fix. Common fixes:ce:…checks fail with “User not enabled for cost explorer access”: turn on Cost Explorer, as described in Turn on Cost Explorer in your payer account.- CUR checks fail: confirm the bucket name, export name, and prefix, and that the export meets the requirements.
- Role can’t be assumed: confirm the Role ARN, and for Manual IAM that the trust policy has the external ID from the wizard.
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). Manage skips the CloudFormation-or-manual choice and opens the CUR settings directly, then the IAM step, and ends with Save changes. To add CUR 2.0 to an integration you already have, follow Add CUR 2.0 to an existing integration.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.