Grant Root Management Group Permissions
This guide is to be performed once per Azure Tenant.
The guide assumes that you have already created an Azure App Registration in your Azure Tenant.
If you haven't created an App Registration yet, please follow the Create a New Azure App Registration guide.
This guide assumes that you have Azure Management Groups enabled in your Azure Tenant.
If you do not have Azure Management Groups enabled, you can follow the link to Learn about Azure Management Groups.
This guide will walk you through the process of assigning the App Registration permissions at the root management group level.
Assigning the permissions at the root management group level will cascade the permissions to all the Azure Subscriptions under the root management group, giving Chronom the ability to automatically discover and scan all the Azure Subscriptions under the root management group.
Prerequisites
In order to grant the App Registration permissions at the root management group level, you need to have:
- At least one Active Azure Subscription.
- An Azure App Registration with a client secret. Create a New Azure App Registration
- Azure Management Groups enabled in your Azure Tenant.
- The ability to create a custom role at the root management group level.
- The ability to assign the custom role to the App Registration.
(In order to gain the ability to create custom roles, you need to elevate your Entra ID Permissions to theUser Access Administratorrole by following this guide)
Instructions
Create a Custom Role (Recommended)
If you want to grant Chronom the ability to perform a more in-depth scan of your Azure Subscriptions, you can create a custom role with the necessary permissions.
To create a custom role, follow these steps:
- Azure Portal
- Azure CLI (bash)
- Azure CLI (PowerShell)
-
Download the
Chronom Custom Role JSONfile by clicking here and saving it to your computer. -
Open the Azure Portal
Management Groups. -
Select the
Tenant Root Groupfrom the list of management groups.
(Alternatively, you can select any other management group that you want to assign the custom role to, but this guide assumes that you are assigning the custom role at the root management group level.)
-
Click on the
Access control (IAM)tab.
-
Click on the
+ Addbutton and selectAdd custom role.
-
Fill in the following details:
- Baseline Permissions:
Start from JSON - Upload the JSON file you downloaded in step 1.
- Click on the
Nextbutton.

- Baseline Permissions:
-
Review the permissions and click on the
Nextbutton.
If the permissions are too broad, you can remove the problematic permissions by clicking on the 🗑️ icon.
(Any of the permissions can be removed except for the*/readpermissions.)
In addition, you can exclude specific actions by clicking on the+ Exclude permissionsbutton. -
Under
Assignable scopesclickAdd assignable scopes, make sure the type is set toManagement Group, and select theTenant Root Group.
Click on theSelectbutton then clickNext.
-
Review the role JSON and click on the
Review + createbutton. If you prefer, you can modify the role permissions by clicking on theEditbutton.
(any of the permissions can be removed except for the*/readpermissions.) -
Review the role details and click on the
Createbutton once you are ready.
All steps below should be executed in the same bash session.
It is recommended to copy and paste the commands one by one to avoid any mistakes.
The steps below assume you have Azure CLI installed and configured with the necessary permissions.
If you haven't installed Azure CLI yet, you can follow the instructions here.
-
If not already installed, install the
curlandsedpackages according to your specific OS. -
Authenticate Azure CLI with the Tenant where your subscriptions are by running the following command:
az login -
Download the
Chronom Custom Role JSONfile by running the following command:tenantId=$(az account show --query tenantId -o tsv)
rootGroupId=$(az account management-group show --name "$tenantId" --query id --output tsv)
jsonFilePath="/tmp/chronom-custom-role-cli.json"
curl -o $jsonFilePath "https://docs.chronom.ai/assets/files/chronom-custom-role-cli.json"
sed -i "s|/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|${rootGroupId}|g" "$jsonFilePath" -
Create the custom role by running the following command:
az role definition create --role-definition @$jsonFilePath
The complete bash script
# Login to Azure CLI
az login
# Set the Management Group ID Variables
tenantId=$(az account show --query tenantId -o tsv)
rootGroupId=$(az account management-group show --name "$tenantId" --query id --output tsv)
# Download the Chronom Custom Role JSON file
jsonFilePath="/tmp/chronom-custom-role-cli.json"
curl -o $jsonFilePath "https://docs.chronom.ai/assets/files/chronom-custom-role-cli.json"
sed -i "s|/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|${rootGroupId}|g" "$jsonFilePath"
# Create the custom role
az role definition create --role-definition @$jsonFilePath
All steps below should be executed in the same PowerShell session.
It is recommended to copy and paste the commands one by one to avoid any mistakes.
The steps below assume you have Azure CLI installed and configured with the necessary permissions.
If you haven't installed Azure CLI yet, you can follow the instructions here.
-
Authenticate Azure CLI with the Tenant where your subscriptions are by running the following command:
az login -
Download the
Chronom Custom Role JSONfile by running the following command:$tenantId = az account show --query tenantId -o tsv
$rootGroupId = az account management-group show --name "$tenantId" --query id --output tsv
$jsonFilePath="$env:USERPROFILE\Downloads\chronom-custom-role-cli.json"
Invoke-WebRequest -Uri "https://docs.chronom.ai/assets/files/chronom-custom-role-cli.json" -OutFile $jsonFilePath
(Get-Content $jsonFilePath) -replace "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", $rootGroupId | Set-Content $jsonFilePath -
Create the custom role by running the following command:
az role definition create --role-definition @$jsonFilePath
The complete PowerShell script
# Login to Azure CLI
az login
# Set the Management Group ID Variables
$tenantId = az account show --query tenantId -o tsv
$rootGroupId = az account management-group show --name "$tenantId" --query id --output tsv
# Download the Chronom Custom Role JSON file
$jsonFilePath="$env:USERPROFILE\Downloads\chronom-custom-role-cli.json"
Invoke-WebRequest -Uri "https://docs.chronom.ai/assets/files/chronom-custom-role-cli.json" -OutFile $jsonFilePath
(Get-Content $jsonFilePath) -replace "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", $rootGroupId | Set-Content $jsonFilePath
# Create the custom role
az role definition create --role-definition @$jsonFilePath
Grant Permissions to the App Registration
To grant permissions to the App Registration, Follow these steps:
- Azure Portal
- Azure CLI (bash)
- Azure CLI (PowerShell)
-
Open the Azure Portal
Management Groups. -
Select the
Tenant Root Groupfrom the list of management groups.
(Alternatively, you can select any other management group that you want to assign the custom role to, but this guide assumes that you are assigning the custom role at the root management group level.)
-
Click on the
Access control (IAM)tab.
-
Click on the
+ Addbutton and selectAdd role assignment.
-
Search for the Role that will be assigned to the App Registration.
If you created a custom role in the previous stage, search for the role name you created (Most likelyChronom Reader), otherwise, search for theReaderrole.
Select the role and click on theNextbutton.
-
Click on the
+ Select membersand search forChronom Read-Only App Registration(or the name you gave to the App Registration).
Select the App Registration and click on theSelectbutton then clickNext.
-
Click on the
Review + assignbutton. -
Once the role assignment is created, you can go back to Chronom and click on the
Savebutton to complete the process.
All steps below should be executed in the same bash session.
It is recommended to copy and paste the commands one by one to avoid any mistakes.
The steps below assume you have Azure CLI installed and configured with the necessary permissions.
If you haven't installed Azure CLI yet, you can follow the instructions here.
-
Authenticate Azure CLI with the Tenant where your subscriptions are by running the following command:
az login -
Get the App Registration's SP ID by running the following commands:
appName="Chronom Read-Only App Registration"
spId=$(az ad sp list --display-name "$appName" --query "[0].id" -o tsv) -
Confirm the App Registration's SP ID by running the following command: (Make sure the output contains the
appDisplayNameasChronom Read-Only App Registrationand thereplyUrlsashttps://app.chronom.ai)echo $spId
az ad sp show --id $spId -
Assign the role to the App Registration by running the following command:
⚠️ Replace<role-name>with the name of the role you created in the previous step. (Most likelyChronom Reader) (If you opted to use theReaderrole, replace<role-name>withReader)roleName="<role-name>" # Replace with the role name you created / Reader
tenantId=$(az account show --query tenantId -o tsv)
rootGroupId=$(az account management-group show --name "$tenantId" --query id --output tsv)
az role assignment create --role "$roleName" --assignee "$spId" --scope "$rootGroupId"
The complete bash script
# Login to Azure CLI
az login
# Set the variables
appName="Chronom Read-Only App Registration"
roleName="Chronom Reader"
# Get the App Registration's SP ID
spId=$(az ad sp list --display-name "$appName" --query "[0].id" -o tsv)
# Confirm the App Registration's SP ID
echo $spId
az ad sp show --id $spId
# Retrieve the Tenant Root Group ID
tenantId=$(az account show --query tenantId -o tsv)
rootGroupId=$(az account management-group show --name "$tenantId" --query id --output tsv)
# Assign the role to the App Registration
az role assignment create --role "$roleName" --assignee "$spId" --scope "$rootGroupId"
All steps below should be executed in the same PowerShell session.
It is recommended to copy and paste the commands one by one to avoid any mistakes.
The steps below assume you have Azure CLI installed and configured with the necessary permissions.
If you haven't installed Azure CLI yet, you can follow the instructions here.
-
Authenticate Azure CLI with the Tenant where your subscriptions are by running the following command:
az login -
Get the App Registration's SP ID by running the following commands:
$appName="Chronom Read-Only App Registration"
$spId=(az ad sp list --display-name "$appName" --query "[0].id" -o tsv) -
Confirm the App Registration's SP ID by running the following command: (Make sure the output contains the
appDisplayNameasChronom Read-Only App Registrationand thereplyUrlsashttps://app.chronom.ai)$spId
az ad sp show --id $spId -
Assign the role to the App Registration by running the following command: ⚠️ Replace
<role-name>with the name of the role you created in the previous step. (Most likelyChronom Reader) (If you opted to use theReaderrole, replace<role-name>withReader)$roleName="<role-name>" # Replace with the role name you created / Reader
$tenantId=(az account show --query tenantId -o tsv)
$rootGroupId=(az account management-group show --name "$tenantId" --query id --output tsv)
az role assignment create --role "$roleName" --assignee "$spId" --scope "$rootGroupId"
The complete PowerShell script
# Login to Azure CLI
az login
# Set the variables
$appName="Chronom Read-Only App Registration"
$roleName="Chronom Reader"
# Get the App Registration's SP ID
$spId=(az ad sp list --display-name "$appName" --query "[0].id" -o tsv)
# Confirm the App Registration's SP ID
$spId
az ad sp show --id $spId
# Retrieve the Tenant Root Group ID
$tenantId=(az account show --query tenantId -o tsv)
$rootGroupId=(az account management-group show --name "$tenantId" --query id --output tsv)
# Assign the role to the App Registration
az role assignment create --role "$roleName" --assignee "$spId" --scope "$rootGroupId"
Grant Reservation Permissions
-
Browse to the Reservations page in the Azure Portal.
-
Click on
Role assignmentsin the right-hand side menu.
-
Click on the
+ Addbutton and selectAdd role assignment.
-
In the Role assignment page:
- Role: Select
Reservation Reader - Assign access to: Select
User, group, or service principal - Members: Search for and select
Chronom Read-Only App Registration(the app registration created in previous steps) - Click
Review + assignand thenAssign

noteThe Reservation Reader role allows the App Registration to read reservation details and utilization data, which is necessary for cost optimization insights in Chronom.
- Role: Select