Everything you do in Azure goes through Azure Resource Manager. When you create a VM from the portal, run an Azure CLI command, or deploy an ARM template, ARM is the layer that receives, authenticates, authorizes, and executes the request. Understanding ARM means understanding how Azure is organized, how deployments work, and how governance controls like Azure Policy and management groups enforce rules across your entire environment. The AZ-104 exam tests ARM and governance together because you cannot properly govern Azure without understanding the resource hierarchy it sits on top of.
Practice this topic
Azure organizes resources in a four-level hierarchy: Management Groups at the top, then Subscriptions, then Resource Groups, then individual Resources. Policies, RBAC assignments, and cost tracking all flow down this hierarchy. Applying a policy at a management group level automatically applies it to all subscriptions, resource groups, and resources below it.
Subscriptions are billing boundaries and access control boundaries. Each subscription has its own spending limits, invoice, and set of Azure RBAC assignments. Separating environments (production, development, testing) into separate subscriptions gives you clean cost tracking and prevents a misconfiguration in one environment from affecting another.
Resource groups are the logical containers for related Azure resources. Every resource must belong to exactly one resource group. Resources in the same resource group can be in different Azure regions. Resource groups are useful for lifecycle management: deleting a resource group deletes all resources inside it. Apply tags to resource groups to organize cost reporting and automate management.
Azure RBAC (Role-Based Access Control) controls who can do what to which resources. RBAC assignments consist of three parts: a security principal (user, group, service principal, or managed identity), a role definition (what actions are allowed), and a scope (where the assignment applies). Roles are inherited downward through the hierarchy: a Contributor at the subscription level can modify any resource in that subscription.
ARM templates are JSON files that declare the desired state of your Azure infrastructure. Deploy the template and ARM creates, updates, or deletes resources to match the declaration. This is infrastructure as code. Incremental mode only changes what is different from the current state. Complete mode deletes any resource in the resource group not defined in the template, which can cause unintended deletions if used carelessly. Bicep is Microsoft's domain-specific language that compiles to ARM templates with cleaner, more readable syntax.
Azure Policy evaluates resources against rules you define: every storage account must have encryption enabled, every VM must use approved image types, no public IP addresses may be created. Policies can be in Audit mode (flag violations without blocking) or Deny mode (block the deployment entirely). Policy initiatives group related policies together for simpler assignment.
Scope for RBAC: assign at the highest scope that works. Owner at subscription = can manage all resources in that subscription. Reader at a specific resource group = read-only for that group only.
ARM template deployment modes: Incremental = safe, adds or updates, does not delete untracked resources. Complete = enforces exact template state, deletes resources not in the template.
Azure Policy vs RBAC: RBAC controls who can take actions. Policy controls what configurations are allowed. You can have permission to create a storage account (RBAC) but policy can prevent it from being created without encryption.
Management groups: apply policy and RBAC at scale across multiple subscriptions. Root management group applies to the entire tenant.
Locks: ReadOnly lock prevents any modifications or deletions. CanNotDelete lock prevents deletion but allows modifications. Locks override RBAC: even an Owner cannot delete a resource protected by a CanNotDelete lock without first removing the lock.
| Role | Can read? | Can modify? | Can delete? | Can manage access? |
|---|---|---|---|---|
| Owner | Yes | Yes | Yes | Yes |
| Contributor | Yes | Yes | Yes | No |
| Reader | Yes | No | No | No |
| User Access Administrator | Yes | No | No | Yes (RBAC only) |
The resource group location restricts where resources inside it can be deployed.
The resource group location only stores the resource group metadata. Resources inside the group can be deployed to any Azure region regardless of the resource group's own location.
Azure Policy and RBAC serve the same purpose.
RBAC controls who can take actions on resources. Azure Policy controls what configurations are permitted regardless of who is making the request. An Owner with full RBAC permissions can still be blocked from deploying a non-compliant resource by a Deny policy.
ARM template Complete mode is safer because it enforces a clean state.
Complete mode deletes any resource in the resource group that is not defined in the template. If the template is missing resources that should exist, Complete mode will delete them silently. Use Incremental mode for most deployments and reserve Complete only when you explicitly want to enforce the exact template state.
These questions are representative of what you will see on AZ-104 exams. The correct answer and explanation are shown immediately below each question.
A developer has Contributor RBAC access to a production resource group. An Azure Policy in Deny mode prevents creation of storage accounts without encryption. The developer tries to create an unencrypted storage account. What happens?
Explanation: Azure Policy operates independently from Azure RBAC. RBAC controls who can take actions; Policy controls what configurations are permitted. Even with Contributor access (which allows resource creation), an Azure Policy in Deny mode blocks any deployment that doesn't meet the policy requirement. Policy enforces compliance rules that override individual user permissions.
An organization deploys an ARM template in Complete mode to a resource group that already contains a storage account not defined in the template. What happens to the existing storage account?
Explanation: ARM template Complete mode enforces the exact state defined in the template within the targeted resource group. Any resource in the resource group not defined in the template is deleted. This is a significant risk — use Complete mode carefully and only when you explicitly want the resource group to contain exactly what's in the template. Incremental mode adds or updates resources without deleting untracked ones.
An administrator assigns the Reader RBAC role to a user at the subscription level. The user attempts to modify a VM in a resource group within that subscription. What is the result?
Explanation: Reader is a read-only RBAC role. Assigned at the subscription level, it grants read access to all resources within that subscription (inherited through the hierarchy). It does not allow any modifications. RBAC assignments are additive and inherited downward — a Reader at subscription scope is a Reader everywhere in that subscription unless a more permissive role is added at a lower scope.
A company needs to prevent accidental deletion of a critical production database while still allowing configuration changes to it. Which Azure resource lock should be applied?
Explanation: CanNotDelete lock prevents deletion of the resource but still allows read and write operations — including configuration changes. ReadOnly lock would prevent any modifications (including desired configuration changes). Locks override even Owner RBAC permissions — no one can delete a CanNotDelete-locked resource without first removing the lock.
A company has 15 Azure subscriptions across three departments. They need to apply a security policy to all subscriptions simultaneously without applying it to each subscription individually. What should they use?
Explanation: Management Groups allow hierarchical organization of subscriptions. Policies and RBAC assignments applied at a Management Group level are inherited by all subscriptions, resource groups, and resources within it. This is the correct pattern for enforcing governance at scale across multiple subscriptions without individual manual configuration.
Azure Resource Manager is the management layer that processes every Azure request — whether from the portal, CLI, PowerShell, REST API, or SDK. It authenticates the request (using Entra ID), authorizes it (checking RBAC and Policy), and then executes it. ARM is also the deployment engine for ARM templates and Bicep, enabling infrastructure as code deployments where you declare desired state and ARM reconciles the current state.
Azure RBAC controls who can perform which actions on which resources (identity and access management). Azure Policy controls what configurations are permitted regardless of who is making the request. You can think of it this way: RBAC says 'you are allowed to create storage accounts', Policy says 'any storage account you create must have encryption enabled'. A Deny policy blocks non-compliant deployments even from users with full Contributor or Owner access.
Azure uses a four-level hierarchy: (1) Management Groups — organize multiple subscriptions for policy and RBAC at scale; (2) Subscriptions — billing and access control boundaries, each with its own invoice; (3) Resource Groups — logical containers for related resources that share a lifecycle; (4) Resources — individual Azure services (VMs, storage accounts, databases). Policies and RBAC assignments applied at higher levels are inherited by everything below.
Incremental mode (default) adds or updates resources defined in the template but leaves existing resources not in the template unchanged. This is safe for most deployments. Complete mode enforces the exact state in the template — any resource in the target resource group not defined in the template is deleted. Complete mode is useful for environment enforcement but dangerous if the template doesn't include all intended resources.
Resource locks prevent accidental deletion or modification of Azure resources. CanNotDelete lock: users can read and modify the resource but cannot delete it. ReadOnly lock: users can read the resource but cannot modify or delete it. Locks override RBAC permissions — even an Owner cannot delete a CanNotDelete-locked resource without first removing the lock. Locks can be applied at subscription, resource group, or resource level and are inherited downward.
Try free Azure Resource Manager practice questions with explanations, topic links and progress tracking.