Logo
CloudWithSingh
Back to all field notes
Cheatsheet
Azure
Intermediate

Azure Virtual Desktop RBAC: Which Role for Which Job

All 14 built-in AVD roles mapped to the jobs they're actually for: helpdesk, session host ops, app publishing, autoscale, and Start VM on Connect. Plus the role pairings and scope rules that cause most permission errors. From someone who has deployed AVD for multiple enterprises.

Parveen Singh
July 8, 2026
7 min read
Prerequisites:A working AVD deployment (host pool, application group, workspace)Permission to create role assignments (Owner or User Access Administrator)
TLDR

Azure Virtual Desktop ships 14 built-in RBAC roles and almost every AVD permission problem comes from picking the wrong one, assigning it at the wrong scope, or missing a required pairing. This cheatsheet maps each role to the job it exists for, gives you the assignment commands, and covers the two service-principal roles that autoscale and Start VM on Connect refuse to work without.

πŸ—ΊοΈ The 14 Roles at a Glance

Every AVD-specific role starts with "Desktop Virtualization". Here's the full set and who each one is for:

RoleWho it's forOne-line job description
Desktop Virtualization ContributorAVD platform adminsManage all AVD objects (not user assignment, not VMs)
Desktop Virtualization ReaderAuditors, monitoringView everything, change nothing
Desktop Virtualization UserEnd usersLaunch desktops and apps from an application group
Host Pool ContributorHost pool adminsManage host pool settings end to end
Host Pool ReaderSupport, ops reviewView host pool config
Application Group ContributorApp publishersManage app groups and published apps
Application Group ReaderSupportView app group config
Workspace ContributorWorkspace adminsManage workspaces users subscribe to
Workspace ReaderSupportView workspaces
User Session OperatorHelpdeskMessage, disconnect, and log off user sessions
Session Host OperatorL2 opsView and remove session hosts, set drain mode
Power On ContributorAVD service principalLets the AVD service start VMs (Start VM on Connect)
Power On Off ContributorAVD service principalLets the AVD service start and stop VMs (autoscale)
Virtual Machine Contributor (Desktop Virtualization)AVD service principalFull VM lifecycle for the AVD service (create, delete, update, start, stop)
Pro Tip

Notice that three of the 14 roles are not for humans at all. The Power On, Power On Off, and Desktop Virtualization Virtual Machine Contributor roles exist for the Azure Virtual Desktop service principal so the platform can manage session host power state for you.

🎯 Scenario Cheatsheet: "I Need Someone To..."

This is the table I wish existed during every AVD engagement:

The jobAssign thisAt this scopeAlso needs
Log off or message stuck users (helpdesk)User Session OperatorHost poolNothing else
Drain and remove session hostsSession Host OperatorHost poolVM roles if they also deallocate VMs
Publish and manage RemoteAppsApplication Group ContributorApp group or RGUser Access Administrator to assign users
Assign users to desktops/appsUser Access AdministratorApp groupPairs with any Contributor role
Manage host pool settings (RDP props, load balancing)Host Pool ContributorHost pool or RGVM Contributor if they build session hosts
Full AVD administrationDesktop Virtualization ContributorResource groupUser Access Administrator + Virtual Machine Contributor
Let users actually connectDesktop Virtualization UserApplication groupNothing else (this IS the end-user role)
Read-only audit of the whole estateDesktop Virtualization ReaderSubscription or RGNothing else
Start VM on ConnectPower On ContributorSubscription or RG with the VMsAssigned to the Azure Virtual Desktop service principal
Autoscale via scaling plansPower On Off ContributorSubscription or RG with the VMsAssigned to the Azure Virtual Desktop service principal
Gotcha

The number one AVD permission mistake: assigning Desktop Virtualization Contributor and expecting it to do everything. It cannot assign users to application groups (that needs User Access Administrator) and it cannot create or manage the session host VMs (that needs Virtual Machine Contributor). AVD-object management and VM management are deliberately separate permission planes.

⚑ Assignment Commands

Assign a role to a helpdesk group at host pool scope:

# Get the host pool resource ID
HP_ID=$(az desktopvirtualization hostpool show \
  --name hp-prod-canadacentral \
  --resource-group rg-avd-prod \
  --query id -o tsv)
 
# Helpdesk: session management only
az role assignment create \
  --assignee-object-id <helpdesk-group-object-id> \
  --assignee-principal-type Group \
  --role "Desktop Virtualization User Session Operator" \
  --scope $HP_ID

Let end users launch their desktop (application group scope):

az role assignment create \
  --assignee-object-id <users-group-object-id> \
  --assignee-principal-type Group \
  --role "Desktop Virtualization User" \
  --scope $(az desktopvirtualization applicationgroup show \
      --name ag-prod-desktop \
      --resource-group rg-avd-prod \
      --query id -o tsv)

Grant the AVD service principal the power roles (Start VM on Connect and autoscale):

# Find the Azure Virtual Desktop service principal
AVD_SP=$(az ad sp list --display-name "Azure Virtual Desktop" \
  --query "[?appDisplayName=='Azure Virtual Desktop'].id" -o tsv)
 
# Start VM on Connect needs start only
az role assignment create \
  --assignee-object-id $AVD_SP \
  --assignee-principal-type ServicePrincipal \
  --role "Desktop Virtualization Power On Contributor" \
  --scope /subscriptions/<sub-id>/resourceGroups/rg-avd-prod
 
# Scaling plans need start AND stop
az role assignment create \
  --assignee-object-id $AVD_SP \
  --assignee-principal-type ServicePrincipal \
  --role "Desktop Virtualization Power On Off Contributor" \
  --scope /subscriptions/<sub-id>/resourceGroups/rg-avd-prod
Warning

Scope these service principal assignments to the resource group holding your session host VMs, not the whole subscription, unless your VMs genuinely span resource groups. Autoscale failing with authorization errors is almost always this assignment missing or scoped to the wrong resource group.

🧭 Scope Rules That Save You Later

  • Assign to groups, never individuals. Helpdesk turnover shouldn't mean role assignment archaeology
  • Host pool scope for session work, app group scope for user access. User Session Operator at subscription scope means helpdesk can log off the CFO in any environment including prod pilots. Keep blast radius small
  • Readers first. Most "I need access to AVD" requests are satisfied by Desktop Virtualization Reader. Start there and upgrade on evidence
  • Separate prod and dev by resource group so a single role assignment can't cross environments

πŸ” Roles Are Half the Story

RBAC controls who can manage and launch AVD. It does not control the conditions under which they connect. That's Conditional Access, and AVD has two separate authentication flows that policies need to handle correctly. I covered the full setup in Implementing Conditional Access for Azure Virtual Desktop, and there's a video walkthrough:

YouTube

Implementing Conditional Access Policy for AVD

The two AVD authentication flows and how to build Conditional Access policies that secure both without locking users out.

youtube.comWatch the Walkthrough

πŸ“š Official References

ResourceWhat's There
Built-in Azure RBAC roles for AVDEvery role with its full permission list and role IDs
Assign RBAC roles to the AVD service principalsThe service principal assignment walkthrough
Azure RBAC documentationScopes, deny assignments, and how role evaluation works

Print the scenario table, pin it next to your host pool naming standard, and most AVD access requests become a two-minute job. πŸ–₯️

What's Next

Bookmark this page

Save it for your next project sprint

Start a project

Apply what you just learned hands-on

Follow on Instagram

Daily cloud tips & behind-the-scenes

Try hands-on labs

Practice in a real cloud environment

Parveen Singh

Parveen Singh

Microsoft Certified Trainer & Cloud Solutions Consultant

Related Field Notes

Found this useful?

Stay in the loop

Weekly cloud insights, no spam

Subscribe

Explore CloudLearn

Hands-on labs & projects

Start Learning

Book Training

Custom cloud training for your team

Get in Touch

On this page