INSIGHTS
Cloud Computing

Microsoft AZ-104: Azure RBAC Without Role Assignment Confusion

In this article
  1. A role assignment is principal plus role plus scope
  2. Scope controls the blast radius of a permission
  3. Azure RBAC is additive unless another control blocks the action
  4. Role definitions separate management actions from data actions
  5. Groups and managed identities make assignments easier to govern
  6. Azure roles and Microsoft Entra roles are not interchangeable
  7. Conditions and privileged workflows can narrow sensitive access
  8. Troubleshooting access means calculating effective permissions
  9. Good RBAC design makes permissions explainable

Azure role-based access control becomes much easier when every permission decision is reduced to three questions: who is the principal, what role definition describes the allowed actions, and at what scope does the assignment apply? Azure calls the combination a role assignment. Most RBAC confusion comes from mixing those three parts, or from assuming that a role name alone explains a user’s effective permissions.

The current AZ-104 blueprint includes managing Azure access and assigning roles at different scopes, so this is not an edge topic. It is one of the administrator’s core controls. The same model applies to users, groups, service principals, and managed identities, which means a clean mental model scales from a single storage account to an enterprise hierarchy.

A role assignment is principal plus role plus scope

The principal answers “who.” It can be a Microsoft Entra user, security group, service principal, managed identity, or another supported security principal. The role definition answers “what.” Built-in roles such as Reader, Contributor, or service-specific data roles contain the permissions that Azure evaluates. The scope answers “where.” Azure supports role assignments at management group, subscription, resource group, and individual resource scope.

All three are required to interpret access correctly. Saying “Jordan is Contributor” is incomplete because the role may apply to one resource group rather than the whole subscription. Saying “the app has access to the storage account” is also incomplete because it may have only a management-plane role and no permission to read blob data. A useful access review records the complete assignment.

This three-part model also helps with automation. Infrastructure code should specify the principal object ID, role definition ID, and target scope explicitly. Descriptive names are helpful for humans, but stable identifiers make deployments predictable and reduce the chance that a role is applied to an unintended identity.

Role-assignment descriptions are worth using for privileged access because they capture intent that is otherwise lost. “Contributor” at a resource group says what Azure permits, but not why the person or workload needs it. A short description tied to an operational function, application, or change request can make later review faster and reduce the tendency to preserve access simply because nobody remembers who created it.

Scope controls the blast radius of a permission

Azure scope is hierarchical. A role assignment at a management group can flow down to subscriptions beneath it. A subscription assignment applies to its resource groups and resources. A resource-group assignment applies to resources inside that group. A resource-level assignment is the narrowest of those standard scopes.

Microsoft recommends using the smallest scope that satisfies the requirement. If an application needs to read one storage account, assigning a data role at the storage account is safer than granting the same role across the subscription. Narrow scope limits accidental use and reduces the impact if the identity is compromised.

Scope is also an operational boundary. Large numbers of individual resource assignments can become difficult to audit, while broad subscription assignments can be excessive. Groups, resource-group design, and workload boundaries can create a manageable middle ground. The goal is not “always assign at the resource”; it is to grant the minimum practical scope that still remains understandable and maintainable.

Resource moves can change the effective access picture. When a resource moves between resource groups or subscriptions, inherited assignments at the old parent no longer describe the new location, and different parent assignments may begin to apply. Access reviews should therefore be part of migration planning. A successful resource move is not complete until the target scope’s RBAC and policy behavior have been validated.

Azure RBAC is additive unless another control blocks the action

Azure RBAC normally combines applicable allow assignments. If a user receives Reader at a subscription and Contributor on one resource group, the user has the broader read access plus Contributor permissions inside that resource group. Multiple role assignments therefore accumulate rather than replacing one another.

This additive behavior explains many access-review surprises. Removing one assignment may not remove the effective permission because another assignment is inherited from a parent scope or arrives through group membership. Troubleshooting should enumerate all relevant assignments, including inherited and group-based access, instead of focusing on the one line that looks suspicious.

Deny assignments are different. They can block actions even when an allow role would otherwise permit them, and Azure uses deny assignments for specific managed scenarios. Administrators generally do not create ordinary deny assignments the way they create role assignments. If an action remains blocked despite apparently sufficient roles, checking for a deny assignment is part of a complete investigation.

Group nesting can make additive access less obvious. A user may not appear in the role assignment list because the assignment belongs to a group that contains another group. Effective-access tools and directory membership inspection are more reliable than scanning only direct user grants. This is also why emergency troubleshooting should avoid adding a new direct role before checking whether the required permission already exists through inheritance.

Role definitions separate management actions from data actions

A role definition is a collection of permissions. Management-plane actions control Azure Resource Manager operations on a resource: creating it, configuring it, reading properties, or deleting it. Data actions control access to the information managed by the service, such as reading blobs or messages. Those are not automatically the same thing.

This distinction is especially important for Azure Storage, Key Vault, and other services with strong data-plane authorization. A user can have permission to configure a storage account without automatically receiving the right to read every blob through Microsoft Entra authorization. Conversely, a data reader can be permitted to read content while having little ability to change the resource’s Azure configuration.

Choose roles by the actual task. Broad roles like Owner and Contributor are convenient but often grant far more management access than an operator needs. Service-specific built-in roles can express narrower responsibilities. Understanding the access needs before choosing the role is more reliable than starting with a familiar role name and hoping it is close enough.

Custom roles should be a deliberate exception, not the first response to every gap. Built-in roles receive Microsoft maintenance and are easier for other administrators to recognize. A custom role is justified when the organization has a stable permission set that built-ins cannot express without excessive privilege. When custom roles are used, document their actions, excluded actions, data actions, and assignable scopes so they do not become opaque security objects.

Groups and managed identities make assignments easier to govern

Human access is usually easier to manage through Microsoft Entra groups than through dozens of direct user assignments. A group can represent a job function or operational team, and membership changes can be handled in the identity system without rewriting every Azure scope. The role assignment stays attached to the group while people join and leave.

Workloads should use service principals or managed identities rather than a human account. Managed identities are particularly useful for Azure-hosted workloads because Azure manages the credential lifecycle. The identity can receive an Azure role at the exact resource scope it needs, avoiding secrets embedded in code or configuration.

The identity focus overlaps with SC-300, while an editorial discussion of the Microsoft Identity and Access Administrator role gives broader context. Azure RBAC controls access to Azure resources; Microsoft Entra administration covers a wider identity and access domain. Keeping those layers distinct prevents role-name confusion.

Group design should follow responsibility rather than individual projects where possible. A durable operations group can hold the role while application ownership changes around it. For workloads, the same principle means assigning permissions to the workload identity rather than to the deployment engineer’s account. That keeps runtime authorization independent of the employee who happened to create the resource.

Azure roles and Microsoft Entra roles are not interchangeable

Azure RBAC roles control Azure resources through Azure Resource Manager and supported data planes. Microsoft Entra roles control directory functions such as users, groups, enterprise applications, and identity administration. A Global Administrator is not simply “Owner everywhere in Azure,” and an Azure subscription Owner is not automatically a directory administrator.

This matters because cloud administrators often hold both types of responsibility. Troubleshooting must begin by identifying which control plane rejected the action. If the task is assigning an Azure role to a resource, inspect Azure RBAC permissions. If the task is creating a user or changing a directory setting, inspect Microsoft Entra roles.

Separating the two also improves least privilege. A person who manages virtual machines may need a resource role but no directory administration. An identity administrator may need to manage authentication but no authority to delete production resources. The Azure administrator role sits at the resource-management side of that boundary and often collaborates with dedicated identity teams.

The portal can blur these layers because a single administrator may navigate from a subscription to Microsoft Entra ID in the same session. During access reviews, record the control plane explicitly: Azure resource role, Microsoft Entra directory role, or service-specific permission. This prevents a directory privilege from being mistaken for data access and makes separation-of-duties discussions much more precise.

Conditions and privileged workflows can narrow sensitive access

Role assignments can include conditions for supported scenarios, particularly where Azure attribute-based access control extends RBAC. Conditions add context to an assignment so that a principal can perform a data action only when specified attributes match. This can reduce the need to create many custom roles for narrowly constrained access patterns.

For human privileged access, organizations may also use Microsoft Entra Privileged Identity Management to make eligible access time-bound and approval-based. PIM does not change the core Azure RBAC model; it changes how a privileged assignment becomes active. The effective Azure permission is still evaluated through the activated role at the relevant scope.

These features should solve a real governance requirement rather than add complexity for its own sake. A simple permanent Reader assignment does not need an elaborate approval workflow. High-impact production access may justify stronger activation, monitoring, or conditional controls. Design the privilege process around risk and operational urgency.

Time-bound privilege is especially valuable for roles that can change production configuration or grant access to others. An eligibility model lets the normal state remain unprivileged while preserving a defined path for emergency or maintenance work. Activation controls should still be practical: if approval takes longer than the business can tolerate during an outage, the governance process needs a documented emergency path rather than an informal permanent bypass.

Troubleshooting access means calculating effective permissions

When a user says “I have the role but it still fails,” confirm the identity first. Similar display names, guest accounts, managed identities, and service principals can lead to an assignment being made to the wrong object. Then verify the role definition and exact scope. A correct role at the wrong resource group is still ineffective for the target resource.

Next check inheritance, group membership, deny assignments, and service-specific authorization. Some services require data-plane roles in addition to management access. Role changes can also take time to propagate, so a newly created assignment may not appear effective instantly. Repeatedly adding broader roles during that delay can create unnecessary permanent privilege.

Use the Access control (IAM) experience, CLI, PowerShell, or resource graph and audit tools to inspect assignments systematically. The troubleshooting goal is to explain the effective permission set, not merely to find one role that looks correct. Once the cause is understood, remove temporary or redundant access added during diagnosis.

Audit logs are useful after the effective role is understood. They can show when assignments were created, changed, or removed and help distinguish a permissions issue from an application error. In high-impact incidents, capture the failing operation and correlation information before altering access. Otherwise a temporary broad role may make the symptom disappear while erasing the evidence needed to understand the original misconfiguration.

Good RBAC design makes permissions explainable

A healthy Azure environment lets an auditor or operator answer who has access, why they have it, and where it applies. Use groups for stable human job functions, managed identities for workloads, narrow built-in roles where possible, and scopes that align with resource ownership. Add descriptions or documented purpose for privileged assignments so that future reviewers understand the reason.

Avoid role accumulation. When teams change, projects end, or resources move, old assignments can remain and silently expand effective access. Periodic access review should look for direct user grants that should be group-based, broad Owner or Contributor assignments, orphaned service principals, and roles inherited from scopes that no longer match the organization.

RBAC becomes confusing when it is treated as a list of role names. It becomes predictable when every permission is interpreted as principal, role definition, and scope. Keep those three elements visible, apply least privilege, and troubleshoot the full effective path before changing access. That is the model that scales from an AZ-104 lab to a large Azure estate.

Use the broader Microsoft certification inventory as a reminder that identity skills cross many Azure roles, but keep access design grounded in the resource’s real operating model. Certification categories can help organize learning; they should not dictate production scope. The production question is always who needs which action on which resource, for how long, and through which reviewed assignment path.

Filed under Cloud Computing