Management Group Hierarchy
Management groups are the top-level governance and access structure above subscriptions. They exist for one reason: to let Azure Policy and Azure RBAC be assigned once and inherited by every subscription beneath them. Everything in this series — policy, identity, connectivity — anchors to this hierarchy.
Purpose
This page defines the management group hierarchy that the rest of the platform hangs from. New subscriptions are placed under the tenant root management group by default, so a landing zone design must decide, deliberately, where subscriptions belong instead.
Design Reasoning
The hierarchy should be simple and purpose-driven. Microsoft recommends designing management groups around governance, policy, compliance, connectivity, and feature needs — not around the company org chart, and not around Azure regions.
Two practical rules follow directly from Microsoft’s guidance:
- Keep it shallow. Aim for three to four levels. A management group tree supports up to six levels of depth (excluding the tenant root and the subscription level), but depth is complexity, and complexity is debugging inherited policy.
- Limit root-level assignments. Everything below the tenant root inherits root assignments, so reserve them for genuinely tenant-wide requirements. Most guardrails belong lower in the tree.
Microsoft’s reference architecture places an intermediate root management group (given an organization prefix, for example contoso) directly under the tenant root. This keeps your hierarchy out of the tenant root group, lets you move existing subscriptions in cleanly, and gives you a single parent to assign baseline policy to.
Harden the hierarchy early
By default, any principal in the tenant can create management groups under the root. Enable Azure RBAC authorization on the management group hierarchy settings, and configure a default management group for new subscriptions (a sandbox group is a good candidate) so nothing lands directly under the tenant root.
Architecture Decision Record
| Decision | Choice | Rationale |
|---|---|---|
| Management group design | Flat, capability-based hierarchy under an intermediate root | Avoids org-chart complexity and keeps governance scopes understandable. |
| Workload separation | Workload archetypes (corp / online), not dev/test/prod groups | Microsoft explicitly recommends against environment-based management groups; separate environments by subscription instead. |
Tradeoff: A capability-based hierarchy means the tree does not mirror how the business is organized, which can feel unintuitive at first. In exchange, policy and access scopes map directly to security and compliance needs, which is what management groups are actually for.
Recommended Configuration
A practical starting structure for a small-to-medium organization:
platform— shared platform subscriptions, with optional child groups foridentity,management,connectivity, andsecuritylanding-zones— workload subscriptions, with archetype child groups such ascorpandonlinesandbox— isolated experimentation, with deliberately lighter guardrailsdecommissioned— a holding area for subscriptions on their way to deletion
flowchart TD A[Tenant root group] --> B[contoso - intermediate root] B --> C[platform] B --> D[landing-zones] B --> E[sandbox] B --> F[decommissioned] C --> C1[identity] C --> C2[management] C --> C3[connectivity] C --> C4[security] D --> D1[corp] D --> D2[online]
This structure supports shared services in platform subscriptions, workloads grouped by archetype, sandboxes with separate guardrails, isolation of decommissioned subscriptions, and policy/RBAC inheritance at meaningful scopes.
The corp and online archetypes match how Microsoft separates workloads: corp for workloads that need corporate (often hybrid) connectivity through the hub, and online for internet-facing workloads that may not need a virtual network at all. A local archetype exists in the reference architecture for Azure Local / hybrid workloads; add it only when you have those workloads.
Example Implementation
Bicep deploys policy, RBAC, and child management groups at management group scope; the Azure CLI deploys those templates with az deployment mg create.
targetScope = 'managementGroup'
@description('Name of the policy assignment.')param policyAssignmentName string
@description('Resource ID of the policy or initiative definition to assign.')param policyDefinitionId string
resource assignment 'Microsoft.Authorization/policyAssignments@2025-03-01' = { name: policyAssignmentName properties: { displayName: 'Allowed locations baseline' policyDefinitionId: policyDefinitionId enforcementMode: 'Default' }}# Create the intermediate root and a child management groupaz account management-group create --name contoso --display-name "Contoso"az account management-group create --name platform --display-name "Platform" --parent contoso
# Deploy management-group-scoped Bicep (policies, RBAC, child groups)az deployment mg create \ --management-group-id contoso \ --name platform-baseline \ --location switzerlandnorth \ --template-file ./infra/management-groups/main.bicepValidation Steps
# Inspect the full hierarchyaz account management-group entities list --output table
# Confirm policy assignments at the intermediate root scopeaz policy assignment list \ --scope /providers/Microsoft.Management/managementGroups/contoso \ --output tableAlso confirm that workload teams do not require management-group-scoped RBAC. Broad management group permissions should be reserved for platform teams, and even then granted just-in-time through Privileged Identity Management rather than as standing access.
Common Mistakes
- Creating
dev,test, andprodmanagement groups instead of using workload archetypes and subscription boundaries. - Copying the company org chart into the management group hierarchy.
- Assigning too many policies at the tenant root, which makes inherited policy hard to debug.
- Modeling Azure regions as management groups instead of using policy, tags, or deployment configuration.
- Granting workload teams RBAC at management group scope, which over-permissions them through inheritance.