Microsoft Cloud Solution Provider (CSP) Partner - Azure MCA (New)
Flexera One is migrating to new Azure Cost Management APIs to provide Azure Cloud Solution Providers (CSPs) with the latest billing details for cost analysis. Using these APIs, Azure CSP Modern Commerce Agreement (MCA) cost and usage details are imported into Flexera One. This new configuration replaces the legacy method, which will be deprecated. Your account manager will work with you to migrate to the Azure Cost Management APIs to maintain your Azure cost reporting in Flexera One and ensure a seamless transition.
The following features are supported in CSP partner - Azure MCA subscription:
| • | Reservations and savings plans cost and usage |
| • | Amortization and commitment reallocation |
| • | Commitment inventory (reservations and savings plans) with expiration and utilization details |
| • | Account-level configuration is available for child organizations to display either list price, cost price, or both. By default, both the List Price and Cost columns in the Tabular View and dashboards display list price values. To enable the display of list price and cost price values in their respective columns for specific child organizations, contact Flexera Support. |
Important:The following features related to CSP partner - Azure MCA subscription are not yet available to all customers. If you would like these features enabled, contact Flexera Support. For more information, see Contacting Flexera Support.
| • | The Savings and Savings Percentage metrics |
| • | The Rate Reduction Savings dashboard |
This topic includes the following subsections:
| • | Supported Scopes |
| • | Scoping Scenarios |
| • | Export Mechanisms |
| • | Azure Permissions Required |
| • | Connecting Azure MCA CSP Billing to Flexera One |
You can export Azure cost and usage data at the following scopes:
| • | Customer Tenant |
| • | Billing Profile |
| • | Billing Account |
| • | Subscription |
Note:The subscription scope is available only for an Azure Tier‑2 CSP (Indirect Reseller). To use the subscription scoping mechanism, see Subscription Scoping.
The following table lists the scoping scenarios for a CSP MCA.
|
Scope |
Description |
Scenario |
Recommended For |
|
Customer Tenant |
Billing data is scoped to an individual customer tenant (for example, customer A, customer B). |
A CSP supporting multiple customers, where each customer wants access to their own cost dashboard. |
Customer-level isolation and transparency. |
|
Billing Profile |
Costs grouped under a billing profile, which may span several tenants. |
A CSP using one profile for internal dev/test tenants or small bundled customers. |
Use cases where granular separation is not required. |
|
Billing Account |
Shows all usage and charges across all customers and profiles under the CSP. |
A finance team needs a consolidated view of all customer consumption. |
Internal financial operations, not for customer-facing portals. |
|
Subscription (L2 Indirect Resellers only) |
Billing data is scoped to an individual subscription within a customer tenant without requiring a Billing Account ID. |
Azure is sold by a Tier-2 partner, while billing and Microsoft relationship are managed by the Tier-1 CSP |
Customers purchasing Azure through a Tier-2 CSP (Indirect Reseller), where the Tier-1 CSP owns the Microsoft billing account. |
Using the subscription scoping mechanism, Azure Tier-2 Cloud Solution Provider (CSP) customers—who purchase Azure through a Tier-1 CSP that owns the billing account—can be onboarded by ingesting Azure billing exports without requiring a Billing Account ID. This capability allows billing exports to be ingested independently, without relying on the Tier-1 CSP.
By ingesting this data, organizations gain visibility into their Azure spending, helping them manage cloud costs efficiently, avoid unnecessary expenses, and maximize savings.
Limitations of Subscription Scoping
The following limitations apply specifically to Azure Tier‑2 CSP onboarding that uses the subscription scoping mechanism:
| • | Commitment inventory (reservations and savings plans) with expiration and utilization details is not available when you use the subscription scoping mechanism. |
| • | Rate reduction savings is not available at the subscription scope for Indirect Resellers because the list price (paygCostInBillingCurrency) is zero at this scope. |
| • | The following columns are not included in subscription-scoped data: |
| • | invoiceId |
| • | previousInvoiceId |
| • | billingAccountId |
| • | billingProfileId |
| • | billingProfileName |
| • | invoiceSectionId |
| • | invoiceSectionName |
| • | partnerTenantId |
| • | costInPricingCurrency |
| • | paygCostInBillingCurrency |
| • | paygCostInUsd |
| • | isAzureCreditEligible |
| • | partnerEarnedCreditRate |
| • | partnerEarnedCreditApplied |
Prerequisites and Bill Connect Setup via API
Prerequisites
The following prerequisites are required to use the subscription scoping mechanism:
Tier-1 CSP actions
| • | Configure Azure Cost Management exports so that billing data is written to an Azure storage account owned by the Tier-2 CSP. When you create the export, you must use dataset version 2021-10-01, which is the dataset schema supported by this integration. |
Tier-2 CSP actions
| • | Create a Microsoft Entra application and assign it the Storage Blob Data Reader role on the storage account that contains the exports. Provide the Entra app credentials (client ID, client secret, tenant ID) for this storage account. |
| • | From the storage account, obtain the export URLs for both the amortized and actual cost exports. |
Creating Bill Connect Using the FinOps Onboarding API
As the Bill Connect UI for subscription scoping is not yet available, your organization must create the bill connect using the FinOps Onboarding API.
Consider the following example of creating a bill connect.
curl --location 'https://api.flexera.com/finops-onboarding/v1/orgs/100/bill-connects/azure-csp' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{bearerToken}}' \
--data '{
"billingAccountId": "", //The billingAccountId field is optional because Microsoft does not expose a billing account ID to tier-2 CSPs
"clientId": "",
"clientSecret": "",
"exportDetails": {
"actualCostExportURL": "https://exportname.blob.core.windows.net/export-container/test/test-export-billingMonthToDate-actual",
"amortizedCostExportURL": "https://exportname.blob.core.windows.net/export-container/test/test-export-billingMonthToDate-amortized",
"enableOOBExports": true,
"storageTenantID": ""
},
"scopeDetails": {
"subscriptionDetails": {
"subscriptionId": "" //subscriptionId is required
},
"scopeType": "Subscription" //ingesting data at subscription level for tier-2 CSPs
},
"startBillingPeriod": "202308",
"tenantId": ""
}'
Field Descriptions
The following list explains the fields used in the example request.
| • | billingAccountId |
Tier-2 CSP accounts do not have a billing account ID. This field is optional in the API request and is not required for Tier-2 CSP accounts.
| • | clientId, clientSecret, tenantId |
Microsoft Entra application credentials (client ID, client secret, and tenant ID) that you provide in the request.
| • | exportDetails.actualCostExportURL |
The URL of the Azure storage location containing the actual cost export file.
| • | exportDetails.amortizedCostExportURL |
The URL of the Azure storage location containing the amortized cost export file.
| • | exportDetails.enableOOBExports |
When set to true, Flexera can trigger out-of-band (OOB) exports to generate cost data more frequently than once per day.
| • | exportDetails.storageTenantID |
The tenant ID of the Microsoft Entra directory for the Azure storage account that stores the billing exports. This can be the same as or different from the Azure CSP tenant.
| • | scopeDetails.subscriptionDetails.subscriptionId |
The Azure subscription ID to ingest. This field is mandatory when scopeDetails.scopeType is "Subscription", and is required for Tier-2 CSP subscription‑level onboarding.
| • | scopeDetails.scopeType |
Must be set to "Subscription" for Tier-2 CSP onboarding using the subscription scoping mechanism. SubscriptionId is mandatory when scope type is Subscription.
| • | startBillingPeriod |
Optional. Specifies the first billing period to ingest in YYYYMM format. The value must be on or after the enrollment start date and on or before the current year and month. If not provided, ingestion begins with the billing period that is current at the time you create the bill connect.
Note:This section is not applicable to subscription scoping.
Exports can be delivered to:
| • | A storage account in partner tenant |
For more details, see Creating Scheduled Exports in the Azure Portal.
| • | A storage account in other tenant using a SAS token. To do so, perform the following steps: |
| 1. | Create a SAS token for a target Azure storage account. For more details, see Microsoft documentation on Export cost data with an Azure Storage account SAS key. |
| 2. | Create Exports with SAS token. Do one of the following: |
| • | Creating Exports in Azure Portal. For more information, see Creating Exports in the Azure Portal. |
| • | Creating Exports using Exports API. For more information, see Creating Export Using the Exports API. |
Creating Scheduled Exports in the Azure Portal
Note:This step is required only if you are using Exports.
Note:In the Azure Portal, scheduled exports must be in one-month chunks and can go back up to a maximum of 395 days.
Exports enable you to create a recurring task that automatically exports your billing data to an Azure Blob Storage on a daily, weekly, or monthly basis. The exported data is in CSV format and contains all the cost and usage data.
You can export large amounts of data with exports from Cost Management and import it into Flexera One.
To export data in the Azure storage account for importing it into Flexera One for cost reporting purposes:
| 1. | Sign in to the Azure portal (portal.azure.com) using your Azure account. |
| 2. | In the upper-left corner of the Web page, click the Show portal menu icon, and then click Cost Management + Billing. |
| 3. | In the left pane, click Cost Management, and under the Settings section in the left pane, click Exports. |
| 4. | Select the Scope at which you want to create export (Billing Account, Billing Profile, Customer). |
| 5. | Click Add to create a new billing export. The New export page opens. |
| 6. | Input information on the Basics tab. |
| a. | From the Type of data dropdown list, select one of the following options. |
Note: You must create two exports—one for each type. Repeat steps below for each export type.
| • | Cost & Usage (Actual)—To export standard usage and purchase costs. |
| • | Cost & Usage (Amortized)—To export amortized costs for purchases like Azure reservations and Azure savings plan. |
| b. | In the Export name field, enter the name for your export. |
| c. | From the Dataset version dropdown list, select the dataset version. For Azure CSP, use the 2021-10-01 version. |
| d. | From the Frequency dropdown list, select Daily export of month-to-date costs so that the latest data is aggregated from the previous daily exports. You can then specify more fields to define the date range in UTC format. |
Note:It is recommended to use the Daily export of month-to-date costs option.
| 7. | Click Add and then click Next. The Destination tab is activated for you to define the export destination. |
| 8. | Input information on the Destination tab. |
| a. | From the Storage type dropdown list, select the storage type. The default type is Azure blob storage. |
| b. | In the Destination and storage section, choose the Use existing or Create new option, and input information of your Azure storage account subscription. |
| c. | From the Storage account dropdown list, select the storage account name or create a new one. If you create a new storage account, choose an Azure region. |
Important:If you are setting up a new storage account in the Azure portal, you must assign the Storage Blob Data Reader role to the storage account to access the blob data. For instructions, see Granting Required Permissions to Your App in Microsoft Entra ID.
| d. | In the Container and Directory fields, input the storage container and directory path for the export file. |
| e. | If you want to split your exports into multiple smaller files, enable the File partitioning option. This option is enabled by default. It is recommended to keep it enabled. |
| f. | Choose whether to enable the Overwrite data option. This option is enabled by default. When it’s enabled, daily exports replace the previous day's file with an updated file. |
| g. | From the data Format dropdown list, select CSV. |
| h. | From the Compression Type dropdown list, select None as compressed file is not supported. |
| 9. | Click Next. The Review + create tab is activated. |
| 10. | Finally, create the export URL to connect a Bill Connect in Flexera One. The URL should be in the following format. |
https://<storage-account>.blob.core.windows.net/<container-name>/<directory-path>/<export-name>
Tip:For information on creating and managing exported data, see Microsoft documentation on Improved exports experience - Preview.
Creating Exports in the Azure Portal
Exports enable you to create a recurring task that automatically exports your billing data to an Azure Blob Storage on a daily, weekly, or monthly basis. The exported data is in CSV format and contains all the cost and usage data.
You can export large amounts of data with exports from Cost Management and import it into Flexera One.
To export data in the Azure storage account for importing it into Flexera One for cost reporting purposes:
| 1. | Sign in to the Azure portal (portal.azure.com) using your CSP partner account. |
| 2. | In the upper-left corner of the Web page, click the Show portal menu icon, and then click Cost Management + Billing. |
| 3. | In the left pane, click Cost Management, and under the Settings section in the left pane, click Exports. |
| 4. | Select the Scope at which you want to create export (Billing Account, Billing Profile, Customer). |
| 5. | Click Add to create a new billing export. The New export page opens. |
| 6. | Input information on the Basics tab. |
| a. | From the Type of data dropdown list, select one of the following options. Repeat steps below for each export type. |
Important: You must create two exports—one for each type.
| • | Cost & Usage (Actual)—To export standard usage and purchase costs. |
| • | Cost & Usage (Amortized)—To export amortized costs for purchases like Azure reservations and Azure savings plan. |
| b. | In the Export Name field, enter the name for your export. |
| c. | From the Dataset version dropdown list, select the dataset version. For example, use the 2021-10-01 version. |
| d. | From the Frequency dropdown list, select Daily export of month-to-date costs so that the latest data is aggregated from the previous daily exports. You can then specify more fields to define the date range in UTC format. |
Note:It is recommended to use the Daily export of month-to-date costs option.
| 7. | Click Add and then click Next. The Destination tab is activated for you to define the export destination. |
| 8. | Input information on the Destination tab. |
| a. | From the Storage type dropdown list, select the storage type. The default type is Azure blob storage. |
| b. | In the Destination and storage section, choose the SAS Token option. |
| c. | In the Storage account field, enter the name of the storage account. |
| d. | In the SAS Token field, enter the SAS token and prefix the token with the question mark icon (?). |
| e. | In the Container and Directory fields, input the storage container and directory path for the export file. |
| f. | From the data Format dropdown list, select CSV. |
| g. | From the Compression Type dropdown list, select None as compressed file is not supported. |
| 9. | Click Next. The Review + create tab is activated. Review the export details. |
| 10. | Finally, create the export URL to connect a Bill Connect in Flexera One. The URL should be in the following format. |
https://<storage-account>.blob.core.windows.net/<container-name>/<directory-path>/<export-name>
Creating Export Using the Exports API
The Azure portal does not have the option to create SAS-based exports for Billing Profile and Customer scopes. So, you must use the Exports API to create SAS token based exports.
To create SAS token based exports using the Exports API:
| 1. | Open Microsoft documentation on Exports - Create Or Update. Click Try It in the HTTP request block. |
| 2. | Click Sign in. Sign in with CSP partner account. |
| 3. | Enter the following parameters as part of the API request: |
| • | exportName—Enter the name of the export. |
| • | scope—Enter the scope string in the following format with valid details for: |
| • | Billing Account: /providers/Microsoft.Billing/billingAccounts/{billingAccountId} |
| • | Billing Profile: /providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId} |
| • | Customer: /providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId} |
| • | api-version—use 2025-03-01. |
| 4. | Enter the parameters in the request body for dataSet, destination, and recurrencePeriod. |
{
"properties": {
"definition": {
"dataSet": {
"configuration": {
"dataVersion": "2021-10-01",
"filters": []
},
"granularity": "Daily"
},
"timeframe": "MonthToDate",
"type": "ActualCost"
},
"deliveryInfo": {
"destination": {
"container": "{{storage-container}}",
"rootFolderPath": "{{storage-path}}",
"type": "AzureBlob",
"sasToken": "{{SAS-TOKEN}}",
"storageAccount": "{{storage-account-name}}",
"resourceId": null
}
},
"schedule": {
"recurrence": "Daily",
"recurrencePeriod": {
"from": "2025-04-16T00:00:00.000Z", // Export Start Date
"to": "2050-02-01T00:00:00.000Z" // Export End Date
},
"status": "Active"
},
"format": "Csv",
"partitionData": true,
"dataOverwriteBehavior": "OverwritePreviousReport",
"compressionMode": "none",
"exportDescription": "test"
}
}
Important: You must create two exports—one for ActualCost and the other for AmortizedCost.
| 5. | Click Run. |
To configure exports and connect billing data, the following Azure roles are required:
| • | Billing Account Reader at the relevant billing scope |
| • | Storage Blob Data Reader on the destination storage account (in your tenant or the target tenant) |
For cross-tenant exports, assign Storage Blob Data Reader in the target tenant and use a multi-tenant service principal.
Connecting Azure MCA CSP Billing to Flexera One
The following topics describe how to connect Azure MCA CSP Billing to Flexera One.
| 1. | Generating Credentials for MCA CSP Partner Billing Configurations |
| 2. | Obtaining the Required Data Fields From Azure |
| 3. | Connecting Azure MCA Cloud Solution Provider in Flexera One (New) |