Exam domain: 25–30%
Every AZ-305 question in this domain reduces to one of four decisions :
Where does identity live?
What’s the tenant boundary?
Who can do what, where?
How is that enforced automatically?
Tenant vs subscription
A tenant = an Entra ID directory. It’s the identity plane.
A subscription = a billing container inside a tenant. It’s the resource plane.
One tenant → many subscriptions. You cannot move a user across tenants , but you can move a
subscription.
Scenario Recommended topology Single company, single directory Single tenant, many subscriptions M&A / distinct security postures Multi-tenant, connected via Entra B2B Customer-facing app with sign-up Separate Entra External ID (formerly B2C) tenant Hybrid AD (on-prem + cloud) Entra Connect (cloud sync) → single Entra tenant
Management groups nest above subscriptions. They exist so you can apply RBAC and Azure
Policy to many subscriptions at once.
flowchart TD
R[Tenant Root Group] --> P[Platform]
R --> L[Landing Zones]
R --> D[Decommissioned]
P --> ID[Identity sub]
P --> Net[Connectivity sub]
P --> Mgmt[Management sub]
L --> Corp[Corp workloads]
L --> Online[Online workloads]
L --> Sandbox[Sandbox]
Depth ≤ 6 levels. Anything deeper is a smell.
Do not create one MG per environment (dev/test/prod). Instead, tag subscriptions and let
Policy target tags.
Every subscription belongs to exactly one MG.
Azure RBAC is expressed as assignments of (role) × (scope) × (principal).
Role — collection of Actions (allowed) and NotActions (subtracted). Prefer built-in.
Scope — MG > Subscription > Resource group > Resource. Assignments inherit downwards.
Principal — user, group, service principal, or managed identity.
"Name" : " Read-only KeyVault Secrets Peeker " ,
"Description" : " See secret names in Key Vault, but not values. " ,
" Microsoft.KeyVault/vaults/read " ,
" Microsoft.KeyVault/vaults/secrets/read "
" /subscriptions/00000000-0000-0000-0000-000000000000 "
Effect matters
Deny — blocks non-compliant resources at create time.
DeployIfNotExists (DINE) — creates missing resources (e.g. deploy a diagnostic setting).
Modify — mutates the request (add tag, force a SKU).
AuditIfNotExists — reports, doesn’t block. Good for rollouts.
Author policy at Audit effect and assign at MG scope.
Watch non-compliance for 1–2 weeks.
Fix your worst offenders.
Flip to Deny / DeployIfNotExists .
{ "field" : " type " , "equals" : " Microsoft.Network/networkInterfaces " },
"field" : " Microsoft.Network/networkInterfaces/ipConfigurations[*].publicIPAddress.id " ,
Requirement Answer ”Contractors should have admin for 8 hours ” Entra PIM with time-bound activation”Block subscriptions from moving out of an MG” Resource lock at MG scope”All storage accounts must have HTTPS-only” Azure Policy Deny at MG ”Non-prod should be cheaper skus” Azure Policy Modify on sku.name ”Least-priv for a CI pipeline in AKS” Workload identity (federated)