Skip to main content

FAQs

  • Enterprise Agreement (EA): A contract between your organization and Microsoft for large-scale Azure usage. EA billing accounts use numeric enrollment numbers (e.g., 12345678).
  • Microsoft Customer Agreement (MCA): A newer billing model available through Microsoft sales representatives or the Azure portal. MCA billing accounts use GUID-based IDs (e.g., 5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_2019-05-31).
If you are unsure which type you have, go to Cost Management + Billing in the Azure Portal and check the Properties of your billing account.
A Management Group is a container in Azure that helps you manage access, policies, and compliance across multiple subscriptions. All subscriptions within a management group automatically inherit the conditions applied to the management group, including RBAC role assignments.nOps assigns roles at the management group scope so that all subscriptions underneath are automatically covered.
Yes. If you want nOps to have visibility across all subscriptions in your tenant, use your Tenant ID as the Management Group ID. The root management group in Azure always matches the Tenant ID.

Overview

Integrate your Microsoft Azure environment with the nOps platform for comprehensive cost tracking, optimization recommendations, and commitment management. This integration uses Azure’s native RBAC system and FOCUS cost exports to provide full visibility into your Azure spending. nOps supports two onboarding tiers:
  1. Savings Analysis — Read-only cost visibility, resource inventory, and optimization recommendations
  2. Commitment Management — Automated purchasing and management of Azure Reservations and Savings Plans (requires Savings Analysis first)

What You’ll Need

  • Azure AD Global Administrator or Privileged Role Administrator access — to grant admin consent for the nOps application
  • Azure RBAC Owner or User Access Administrator role on the target management group or subscription — to assign roles to nOps (via Portal or Terraform)
  • MCA only — Savings Analysis: Billing Account Owner on the MCA billing account — to assign the Billing Account Reader role to the nOps service principal. This is a billing-scope role, separate from Entra ID and Azure RBAC. Find who holds this role in Cost Management + Billing → select billing account → Access control (IAM).
  • MCA only — Commitment Management: Billing Profile Owner on the relevant MCA billing profile — to assign the Billing Profile Contributor role to the nOps service principal. This is a billing-scope role, separate from Entra ID and Azure RBAC. Find who holds this role in Cost Management + Billing → select billing account → Billing profiles → select profile → Access control (IAM).
  • Your Management Group ID — determines the scope of nOps visibility
  • An Azure Subscription — nOps will create a storage account and FOCUS cost export in this subscription
  • Knowledge of your Billing Account Type — Enterprise Agreement (EA) or Microsoft Customer Agreement (MCA)
Additional requirement for Commitment Management:
  • A dedicated Azure subscription for nOps reservation and savings plan purchases
Entra ID roles ≠ Azure RBAC roles ≠ billing-scope roles. Being a Global Administrator in Microsoft Entra ID does not automatically grant permissions on Azure resources (subscriptions, management groups), and neither Entra ID nor Azure RBAC Owner grants billing-scope roles such as Billing Account Owner or Billing Profile Owner. For MCA accounts, the billing role assignment in Step B must be completed by a Billing Account Owner (SA) or Billing Profile Owner (CM). If you are a Global Admin but have never managed Azure resources, follow the steps below to enable Azure RBAC access.

Enabling Azure RBAC Access for Global Admins

Azure has two separate permission systems that are commonly confused: The nOps setup requires Azure RBAC permissions (Owner or User Access Administrator) to assign roles to the nOps service principal. If you are a Global Administrator without Azure RBAC roles, you’ll need to enable elevated access.
1

Enable Elevated Access

  1. Go to Microsoft Entra ID > Properties in the Azure Portal
  2. Find “Access management for Azure resources”
  3. Toggle to Yes and click Save
This grants your Global Admin account the User Access Administrator role at the root scope, which cascades to all management groups and subscriptions.
2

Sign Out and Sign Back In

You must sign out of the Azure Portal and sign back in to pick up the new User Access Administrator role:
  1. Click your profile picture in the top-right corner of the Azure Portal
  2. Click Sign out
  3. Navigate back to portal.azure.com and sign in again
Azure uses Continuous Access Evaluation (CAE) which may invalidate cached tokens when permissions change. After signing back in, if you still see permission errors, wait 2-3 minutes for the role to fully propagate.
3

Assign Yourself Owner on the Subscription

The User Access Administrator role only allows managing role assignments. You also need Owner to register resource providers and manage resources:
  1. Go to Subscriptions in the Azure Portal
  2. Select the subscription where you’ll run the nOps setup
  3. Click Access control (IAM) in the left menu
  4. Click Add > Add role assignment
  5. In the Role tab, search for and select Owner
  6. In the Members tab, click + Select members
  7. Search for your email address and select your user account
  8. Click Select, then Review + assign
4

Verify Access

To confirm you now have the necessary permissions:
  1. Go to the subscription you just assigned Owner to
  2. Click Access control (IAM) in the left menu
  3. Click View my access (top button)
  4. You should see both User Access Administrator (inherited from root) and Owner (subscription-level) listed
The first time you access Management Groups or run certain operations, Azure may automatically register resource providers like Microsoft.Management. This one-time operation can take 30-60 seconds.
For more details, see Microsoft’s documentation on Elevating access to manage all Azure subscriptions.

1. Understanding Billing Account Types

Your billing account type determines how nOps configures billing access. You must select the correct type during onboarding. Follow only the path that matches your agreement — EA and MCA are two separate setup paths.
Supported Billing Account Types: nOps supports Enterprise Agreement (EA) and Microsoft Customer Agreement (MCA) billing accounts only. If you have a Pay-As-You-Go (MOSP) subscription, please contact your Microsoft account representative to upgrade to an EA or MCA billing account before proceeding.

Path A: If you have an Enterprise Agreement (EA)

Use this path if your organization has a direct Enterprise Agreement with Microsoft. What you need:
  • EA Enrollment Number — A numeric ID (e.g., 12345678) that identifies your EA billing account. You will enter this in the nOps wizard in Get Started (and can edit it later in Configure).
  • Where to find it: Go to Cost Management + Billing in the Azure Portal, select your EA billing account, and copy the enrollment number shown at the top.
  • Billing hierarchy: Enrollment → Departments → Accounts → Subscriptions. nOps uses the enrollment (billing account) scope for role assignment and FOCUS exports.
  • How to confirm: In Cost Management + Billing, open your billing account → Settings > Properties. The Agreement type field must show “Enterprise Agreement”.

Path B: If you have a Microsoft Customer Agreement (MCA)

Use this path if your organization has a Microsoft Customer Agreement (the newer billing model, often via Microsoft sales or the Azure portal). What you need:
  • Billing Account — Your MCA billing account (GUID-style ID). You do not need to enter a numeric enrollment number; the nOps wizard will use your billing account and profiles.
  • Where to find it: Go to Cost Management + Billing in the Azure Portal and select your Microsoft Customer Agreement billing account. For Commitment Management, you will assign roles at the Billing Profile level.
  • Billing hierarchy: Billing Account → Billing Profiles → Invoice Sections → Subscriptions.
  • How to confirm: In Cost Management + Billing, open your billing account → Settings > Properties. The Agreement type field must show “Microsoft Customer Agreement”.

Quick reference: EA vs MCA


2. Verifying You Do NOT Have a CSP Subscription

Cloud Solution Provider (CSP) subscriptions are NOT supported. nOps only works with direct Microsoft agreements (EA or MCA). If your Azure account is through a reseller or partner using the CSP program, you cannot use nOps.
A Cloud Solution Provider (CSP) is a Microsoft partner who resells Azure services. CSP subscriptions are billed through the partner, not directly by Microsoft. This creates a different billing structure that nOps does not currently support. The fastest way to confirm eligibility is the nOps onboarding qualifier, a read-only script that groups your subscriptions by billing account, classifies each as EA / MCA / Reseller / CSP, shows month-to-date spend, and prints an overall verdict. What it does, and does not do
  • It is completely read-only. It does not create, modify, deploy, or configure anything in your environment, and it does not grant nOps any access.
  • It reads only billing metadata (the billing account, profile, and agreement type each subscription belongs to) and month-to-date spend per subscription.
  • Nothing is transmitted anywhere. The script prints its results to your screen, and you decide what to share.
For spend figures, the account you sign in with needs Cost Management Reader (or Reader) at subscription scope. Without it, those subscriptions show n/a instead of a number, and the EA / MCA / CSP classification still works.
Run it in Azure Cloud Shell (about two minutes) Cloud Shell already has the Azure CLI and jq installed and is signed in as you, so there is nothing to install and no separate login.
1

Sign in, then open Cloud Shell

Sign in to the Azure portal with an account that can view your billing (ideally whoever manages billing for your organization), confirm your organization’s directory is selected (top right), then open Cloud Shell with the >_ icon in the top toolbar. Choose Bash if prompted.
2

Add the script

Upload nops-onboarding-qualifier.sh (Manage files → Upload), or copy the script below and paste it into Cloud Shell.
3

Run it

Run bash nops-onboarding-qualifier.sh. It finishes in a few seconds. Add --csv results.csv to also write a CSV, --last-month for the previous month’s spend, or --help for all options.
Prefer your own terminal? With the Azure CLI and jq installed, run az login and then bash nops-onboarding-qualifier.sh.
Reading the verdict Each billing account is also flagged ✓ onboard, ✗ not supported, or ⚠ review in the output. If you are working with an nOps contact, you can share the output (or the CSV written by --csv results.csv) so they can confirm your billing scope. The easiest way is to copy everything the script printed, top to bottom, and paste it into your reply. Prefer not to run a script? You can check in the Azure Portal instead (below).

How to Check for CSP Subscriptions

The easiest way to verify you don’t have CSP subscriptions is through the Azure Marketplace eligibility checker:
1

Go to Private Offer Management

2

Click Check Eligibility

Click the Check Eligibility button on the right-hand side
3

Review the Results

Look for the eligibility check results. You should see:
  • Green checkmark: “No Cloud Solution Provider (CSP) subscription found” — You can use nOps
  • Red X: “Cloud Solution Provider (CSP) subscription found” — You cannot use nOps
If you find that you have CSP subscriptions, please contact your CSP reseller/partner for cost optimization solutions. You may need to migrate to a direct EA or MCA agreement with Microsoft if you want to use nOps in the future.

3. Finding Your Management Group ID

nOps assigns RBAC roles at the management group scope to provide visibility across all subscriptions in that group.
  1. Go to Management Groups in the Azure Portal.
  2. If you want nOps to see all subscriptions, use the Tenant Root Group — its ID matches your Tenant ID.
  3. If you want to limit nOps to a subset of subscriptions, find the appropriate management group and note its ID.
If your organization does not use management groups, you can use your Tenant ID as the Management Group ID. This is equivalent to the root management group and covers all subscriptions.

4. Preparing a Subscription for FOCUS Exports

You will need an Azure subscription where nOps can create resources for cost data exports. Choose the subscription with the most spend.
The setup will create a resource group, storage account, and FOCUS export in this subscription. These resources incur minimal cost (storage fees only).

Required Resource Providers

For FOCUS Exports (on the export subscription)

These must be registered on the subscription where the storage account will be created:
  1. Go to Subscriptions > select your export subscription > Settings > Resource providers
  2. Search for each provider above and click Register
  3. Wait for all three to show Registered (1-2 minutes)
Most subscriptions already have Microsoft.Storage and Microsoft.CostManagement registered. Microsoft.CostManagementExports is the one most likely to require manual registration, especially on newer subscriptions. The Terraform setup method handles this automatically.

For Lighthouse (on the deployment subscription)

Lighthouse requires Microsoft.ManagedServices to be registered on the subscription where you deploy:
  1. Go to Subscriptions > select the subscription > Settings > Resource providers
  2. Search for Microsoft.ManagedServices, click Register
Most subscriptions already have this registered. If it already shows “Registered”, no action is needed.

Storage Account Network Access

The FOCUS export storage account must allow public network access so that the nOps data ingestion service can read the exported cost data. If your organization enforces storage account firewalls via Azure Policy, you may need to whitelist the nOps IP addresses (44.246.45.84, 52.11.53.164, and 52.39.155.200) on the storage account after creation. The Terraform setup method detects this automatically and prompts you to add the IPs.

5. Understanding RBAC Roles for nOps

nOps requires specific Azure RBAC roles to operate. These roles are assigned at different scopes depending on the integration tier.

Savings Analysis Roles (Read-Only)

The Owner role is granted exclusively on the storage account created by nOps for FOCUS exports (nopsfocus<tenant-prefix>) — it does not grant Owner access to any other resources in your environment.
| Tenant (Reservations) | Reservations Reader | 582fc458-8989-419f-a480-75249bc5db7e | Read all reservations in the tenant | | Tenant (Savings Plans) | Savings Plan Reader | d534ad90-4ac5-4815-a178-b2e47397baab | Read all savings plans in the tenant |

Billing Access Roles

Commitment Management Roles (Additional)

These roles are added on top of Savings Analysis roles when you upgrade to Commitment Management:

6. Purchase Policies (Commitment Management Only)

If you plan to use Commitment Management for reservation and savings plan purchases, your billing account must have purchase policies enabled. Without these, only billing administrators can make purchases — users with the Reservations Purchaser RBAC role (including those delegated via Azure Lighthouse) will be blocked.
For MCA, only the billing profile associated with the dedicated subscription needs these policies enabled. You do not need to change policies on other billing profiles.

Next Steps

Once you have your Management Group ID, know your billing account type, and have a subscription ready for FOCUS exports, you are ready to connect Azure to nOps.
Ready to connect? Go to nOps Settings > Cloud Provider Integrations and click the Microsoft Azure card to start the integration wizard.
nOps offers two onboarding tiers. Start with Savings Analysis, then upgrade to Commitment Management when ready:

Savings Analysis Setup

Read-only cost visibility, resource inventory, optimization recommendations, and daily FOCUS cost exports.

Commitment Management Setup

Automated purchasing and management of Azure Reservations and Savings Plans. Requires Savings Analysis first.