Bird
Raised Fist0
Azurecloud~5 mins

Access policies vs RBAC in Azure - CLI Comparison

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Access policies and RBAC are two ways to control who can do what in Azure. They help keep resources safe by giving the right permissions to the right people or apps.
When you want to give a user or app permission to read or write secrets in Azure Key Vault.
When you need to control access to Azure resources like virtual machines or storage accounts with detailed roles.
When you want to limit access to specific actions without giving full control over a resource.
When you want to manage permissions centrally across many resources using roles.
When you want to allow an app to access a resource without sharing user credentials.
Commands
This command sets an access policy on the Azure Key Vault named 'myKeyVault' to allow the user or app with the given object ID to get and list secrets.
Terminal
az keyvault set-policy --name myKeyVault --object-id 12345678-1234-1234-1234-123456789abc --secret-permissions get list
Expected OutputExpected
No output (command runs silently)
→
--name - Specifies the name of the Key Vault.
→
--object-id - Specifies the Azure AD object ID of the user or app.
→
--secret-permissions - Defines the allowed secret operations.
This command assigns the built-in 'Reader' role to the user or app with the given object ID for the specified resource group scope. It uses RBAC to control access.
Terminal
az role assignment create --assignee 12345678-1234-1234-1234-123456789abc --role "Reader" --scope /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup
Expected OutputExpected
{ "canDelegate": null, "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Authorization/roleAssignments/abcdef12-3456-7890-abcd-ef1234567890", "name": "abcdef12-3456-7890-abcd-ef1234567890", "principalId": "12345678-1234-1234-1234-123456789abc", "principalType": "User", "roleDefinitionId": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", "scope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup", "type": "Microsoft.Authorization/roleAssignments" }
→
--assignee - Specifies the user or app object ID to assign the role.
→
--role - Specifies the role name or ID to assign.
→
--scope - Defines the resource or resource group where the role applies.
This command shows the details of the Key Vault, including its access policies, so you can verify the permissions set.
Terminal
az keyvault show --name myKeyVault
Expected OutputExpected
{ "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myKeyVault", "location": "eastus", "name": "myKeyVault", "properties": { "accessPolicies": [ { "objectId": "12345678-1234-1234-1234-123456789abc", "permissions": { "secrets": [ "get", "list" ] }, "tenantId": "87654321-4321-4321-4321-cba987654321" } ] }, "resourceGroup": "myResourceGroup", "type": "Microsoft.KeyVault/vaults" }
→
--name - Specifies the Key Vault name to show.
This command lists the RBAC role assignments for the user or app at the resource group scope to verify their permissions.
Terminal
az role assignment list --assignee 12345678-1234-1234-1234-123456789abc --scope /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup
Expected OutputExpected
[ { "principalId": "12345678-1234-1234-1234-123456789abc", "roleDefinitionName": "Reader", "scope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup" } ]
→
--assignee - Filters role assignments by user or app object ID.
→
--scope - Filters role assignments by resource scope.
Key Concept

If you remember nothing else from this pattern, remember: Access policies control permissions inside specific services like Key Vault, while RBAC controls permissions across Azure resources using roles.

Common Mistakes
Trying to use RBAC roles to control Key Vault secret permissions directly.
Key Vault requires access policies for secret permissions; RBAC roles alone do not grant secret access.
Use 'az keyvault set-policy' to assign secret permissions, and RBAC for broader resource access.
Assigning RBAC roles without specifying the correct scope.
The role assignment will not apply where expected, causing permission errors.
Always specify the correct scope, such as a subscription, resource group, or resource.
Not verifying permissions after setting policies or roles.
You might think permissions are set but they are not, leading to access failures.
Use 'az keyvault show' and 'az role assignment list' to confirm permissions.
Summary
Use 'az keyvault set-policy' to assign access policies for Key Vault secrets.
Use 'az role assignment create' to assign RBAC roles for broader Azure resource access.
Verify permissions with 'az keyvault show' and 'az role assignment list' commands.

Practice

(1/5)
1. What is the main difference between Azure Access Policies and RBAC?
easy
A. RBAC controls network traffic; Access Policies manage user passwords.
B. Access Policies grant permissions directly on resources; RBAC assigns roles at scopes.
C. Access Policies are used only for virtual machines; RBAC is for databases.
D. RBAC is a legacy system; Access Policies are the modern replacement.

Solution

  1. Step 1: Understand Access Policies

    Access Policies give permissions directly on specific resources, like a key vault.
  2. Step 2: Understand RBAC

    RBAC assigns roles with permissions at different levels like subscription or resource group.
  3. Final Answer:

    Access Policies grant permissions directly on resources; RBAC assigns roles at scopes. -> Option B
  4. Quick Check:

    Access Policies = direct resource permissions, RBAC = role-based scopes [OK]
Hint: Access Policies = direct, RBAC = role at scope [OK]
Common Mistakes:
  • Confusing Access Policies with RBAC roles
  • Thinking RBAC only applies to virtual machines
  • Assuming Access Policies control network settings
2. Which of the following is the correct way to assign an RBAC role using Azure CLI?
easy
A. az network policy add --role <role> --user <user>
B. az accesspolicy set --user <user> --permission <perm>
C. az vm assign-role --user <user> --role <role>
D. az role assignment create --assignee <user> --role <role> --scope <scope>

Solution

  1. Step 1: Identify correct RBAC command

    The Azure CLI command to assign RBAC roles is 'az role assignment create' with assignee, role, and scope parameters.
  2. Step 2: Verify other options

    Other options mention access policies or unrelated commands which are invalid for RBAC role assignment.
  3. Final Answer:

    az role assignment create --assignee <user> --role <role> --scope <scope> -> Option D
  4. Quick Check:

    RBAC role assignment uses 'az role assignment create' [OK]
Hint: RBAC role assignment uses 'az role assignment create' [OK]
Common Mistakes:
  • Using access policy commands for RBAC
  • Mixing VM or network commands with RBAC
  • Omitting the scope parameter
3. Given this Azure CLI command output snippet for a key vault access policy:
"permissions": {"keys": ["get", "list"], "secrets": ["get"]}
What permissions does this policy grant?
medium
A. Allows only listing keys, no secret access.
B. Allows creating and deleting keys and secrets.
C. Allows getting and listing keys, and getting secrets.
D. Allows full control over keys and secrets.

Solution

  1. Step 1: Read the permissions for keys

    The keys permission includes 'get' and 'list', so it allows reading and listing keys.
  2. Step 2: Read the permissions for secrets

    The secrets permission includes only 'get', so it allows reading secrets but no other actions.
  3. Final Answer:

    Allows getting and listing keys, and getting secrets. -> Option C
  4. Quick Check:

    Permissions match get/list keys and get secrets [OK]
Hint: Check each permission list carefully for allowed actions [OK]
Common Mistakes:
  • Assuming 'get' means create or delete
  • Confusing 'list' with full control
  • Ignoring secret permissions
4. You assigned an RBAC role to a user but they still cannot access a key vault secret. What is the most likely cause?
medium
A. The user lacks an access policy granting secret permissions on the key vault.
B. The RBAC role was assigned at subscription level, which is too broad.
C. The user needs to restart their Azure portal session.
D. RBAC roles do not control access to key vault secrets.

Solution

  1. Step 1: Understand RBAC vs Access Policies for Key Vault

    Key vault secrets require access policies to grant permissions, RBAC alone may not suffice.
  2. Step 2: Analyze the problem

    Even if RBAC role is assigned, without an access policy granting secret permissions, access is denied.
  3. Final Answer:

    The user lacks an access policy granting secret permissions on the key vault. -> Option A
  4. Quick Check:

    Key vault secret access requires access policies [OK]
Hint: Key vault secrets need access policies, not just RBAC [OK]
Common Mistakes:
  • Assuming RBAC alone controls key vault secrets
  • Thinking subscription-level RBAC restricts access
  • Believing portal restart fixes permission issues
5. You want to secure an Azure Key Vault so that only a specific user can read secrets, and a group can manage keys. Which approach follows best practices?
hard
A. Assign specific RBAC roles to the user for secret read (Key Vault Secrets User) and to the group for key management (Key Vault Crypto Officer).
B. Create an access policy granting the user secret read permission; assign an RBAC role to the group for key management.
C. Use access policies for both user and group to grant all permissions.
D. Assign the user an RBAC role for secrets and the group an access policy for keys.

Solution

  1. Step 1: Choose RBAC as best practice

    Azure recommends RBAC for Key Vault. Disable access policies and enable RBAC authorization on the Key Vault.
  2. Step 2: Assign granular roles at Key Vault scope

    Assign 'Key Vault Secrets User' role to user (get/list secrets). Assign 'Key Vault Crypto Officer' role to group (manage keys).
  3. Final Answer:

    Assign specific RBAC roles to the user for secret read (Key Vault Secrets User) and to the group for key management (Key Vault Crypto Officer). -> Option A
  4. Quick Check:

    RBAC Secrets User + Crypto Officer roles [OK]
Hint: RBAC best practice: Secrets User + Crypto Officer roles [OK]
Common Mistakes:
  • Trying to mix Access Policies and RBAC (not possible)
  • Using access policies for everything (legacy method)
  • Assigning overly broad roles or permissions