Skip to main content

Identity and Access Model

Access is the control plane for everything else. If access is assigned carelessly — Owner to individuals, broad scopes, no elevation path — then no amount of policy or network design will keep the platform safe. This page defines an access model that is least-privilege by default and auditable by design.

Purpose

This page defines the Azure control-plane identity and access model using Microsoft Entra ID and Azure RBAC, and the operational practices around them: group-based assignment, Privileged Identity Management, and emergency access.

Design Reasoning

Microsoft Entra ID and Azure RBAC are related but separate, and confusing them is a common source of over-permissioning:

  • Microsoft Entra roles manage tenant-wide identity and directory capabilities (for example, Global Administrator, User Administrator).
  • Azure RBAC roles manage access to Azure resources (for example, Reader, Contributor, Network Contributor) at management group, subscription, resource group, or resource scope.

The strongest default model is consistent and boring:

  • Assign roles to groups, never to individual users.
  • Use built-in, job-function roles where possible; reserve custom roles for genuine gaps.
  • Avoid Owner and broad Contributor as default roles.
  • Assign access at the narrowest practical scope.
  • Use Privileged Identity Management (PIM) for elevated privileges — eligible, not standing.
  • Keep emergency access accounts outside normal operating processes.

Architecture Decision Record

DecisionChoiceRationale
Access modelRole-assigned security groups per scope and environmentMore scalable, auditable, and maintainable than direct user assignments; survives joiners, movers, and leavers.
Privileged accessEligible assignments activated through PIMLowers standing privilege and produces an audit trail for every elevation.

Tradeoff: Group-based, PIM-gated access adds a layer between a person and a permission. That friction is the point — it is what makes access reviewable and time-bound instead of permanent and invisible.

A baseline group-to-role mapping. Group names are illustrative; the pattern is what matters.

GroupRoleScope
az-platform-adminsReader by default; elevated admin roles through PIMPlatform management group or platform subscriptions
az-network-adminsNetwork ContributorConnectivity subscription
az-security-readersSecurity Reader or ReaderSecurity and management scopes
az-workload-owners-<app>-prodOwner or User Access Administrator, only when justifiedSpecific production workload subscription
az-workload-contributors-<app>-nonprodContributorNon-production resource group or subscription
az-breakglass-adminsGlobal AdministratorCloud-only emergency access accounts

Use Owner sparingly. Most teams never need permanent Owner; they need a least-privilege role plus a clear elevation path for the rare case.

Emergency access (break-glass) accounts

Microsoft recommends maintaining at least two cloud-only emergency access accounts with the Global Administrator role permanently assigned, used only when normal administrative access is unavailable.

Current break-glass guidance

Older guidance excluded break-glass accounts from all Conditional Access and MFA. Microsoft now enforces mandatory MFA for the Azure and Entra admin portals, so emergency accounts must be protected with phishing-resistant authentication (a FIDO2 passkey or certificate-based authentication), while still being excluded from Conditional Access policies that could cause a lockout. Monitor every sign-in, and validate the accounts on a schedule (around every 90 days).

Example Implementation

The same access model expressed as personas — default access plus the elevation path:

PersonaDefault accessElevation
Platform operationsReader on workload subscriptionsTemporary troubleshooting role through PIM
Network teamNetwork Contributor on the connectivity subscriptionNo workload Contributor by default
Security teamSecurity Reader or ReaderTemporary investigation access through PIM
Workload production teamLeast-privilege workload roleOwner or User Access Administrator only with justification
Workload non-production teamContributorUsually no elevation required

Assign a role to a group at a scope with the Azure CLI:

Terminal window
az role assignment create \
--assignee-object-id <group-object-id> \
--assignee-principal-type Group \
--role "Network Contributor" \
--scope /subscriptions/<connectivity-subscription-id>

Validation Steps

Terminal window
# Review role assignments at a scope
az role assignment list --scope /subscriptions/<subscription-id> --output table
# Inspect what a built-in role actually grants
az role definition list --name "Network Contributor"

Also validate that emergency access accounts are cloud-only, excluded from Conditional Access policies that could lock them out, protected with phishing-resistant MFA, closely monitored, used only for break-glass scenarios, and tested on a schedule.

Common Mistakes

  • Assigning Azure roles directly to users instead of to groups.
  • One shared Contributor group across multiple landing zones, which collapses isolation.
  • Granting Owner by default, or giving application teams management-group-scoped access.
  • Leaving service principals with broad, standing permissions.
  • Not using PIM for privileged roles, or never testing emergency access accounts.

References