调用Microsoft Graph API添加Azure Virtual Desktop RBAC委派权限失败
解决AAD应用注册添加Azure Virtual Desktop RBAC权限的问题
问题核心
你尝试通过Microsoft Graph API的/applications端点为AAD应用注册添加Azure Virtual Desktop(AVD)的RBAC委派权限(如Microsoft.DesktopVirtualization/hostpools/*/read),但这类权限不在Microsoft Graph权限参考列表中,调用application-update接口时也无法找到相关权限,导致无法完成添加操作。
原因说明
AVD的这类权限属于Azure资源权限(由Azure Resource Manager管理),并非Microsoft Graph权限。Microsoft Graph权限列表仅包含与Graph服务相关的权限,因此无法通过Graph的/applications或application-update接口添加AVD的RBAC权限。
正确操作方式
1. 定位应用对应的服务主体
AAD应用注册会对应一个服务主体,你可以通过Microsoft Graph API的/servicePrincipals端点,传入应用的clientId查询其服务主体的objectId:
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '{clientId}'
2. 通过Azure RBAC分配权限
AVD的权限需要通过Azure RBAC机制分配给服务主体,可选择以下方式:
- Azure CLI命令示例:
az role assignment create \ --assignee <service-principal-objectId> \ --role "Desktop Virtualization Reader" \ --scope "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.DesktopVirtualization/hostpools/<hostpool-name>" - Azure PowerShell命令示例:
New-AzRoleAssignment ` -ApplicationId <service-principal-appId> ` -RoleDefinitionName "Desktop Virtualization Reader" ` -Scope "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.DesktopVirtualization/hostpools/<hostpool-name>" - ARM API调用示例:
发送PUT请求到ARM的角色分配端点:
请求体示例:PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentName}?api-version=2022-04-01{ "properties": { "roleDefinitionId": "/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<role-definition-id>", "principalId": "<service-principal-objectId>" } }
3. 自定义权限范围处理
如果需要使用如Microsoft.DesktopVirtualization/hostpools/*/read这类自定义权限范围,需先创建自定义RBAC角色,再将该角色分配给服务主体。
内容的提问来源于stack exchange,提问作者Ankur Soni
相关产品推荐
相关产品推荐

