如何以编程方式获取拥有Azure资源(如Blob容器)读取权限的AAD身份列表
问题结论
你当前仅调研Microsoft Graph API的查找方向不正确。Azure资源的RBAC权限配置存储在Azure资源管理层,需要调用Azure Resource Manager (ARM) API获取,Microsoft Graph API仅用于后续补全AAD身份的详情信息,无法直接查询资源层的权限分配。
具体实现步骤
- 调用ARM的
角色分配列表API,请求路径格式为https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01,其中scope参数需定位到具体的Blob容器,示例格式为/subscriptions/替换为你的订阅ID/resourceGroups/替换为你的资源组名/providers/Microsoft.Storage/storageAccounts/替换为存储账户名/blobServices/default/containers/替换为容器名 - 筛选返回结果中
properties.roleDefinitionId对应的角色为包含读取权限的角色,常见的内置角色有Storage Blob Data Reader、Reader,如果使用自定义角色,可提前调用ARM的角色定义API拉取所有包含读取操作的角色ID做匹配 - 筛选后的结果中
properties.principalId字段即为拥有对应权限的AAD身份ID,若需要获取身份的名称、类型等详细信息,可调用Microsoft Graph API传入该ID查询对应实体信息
简化实现方式
- 如果你使用官方Azure SDK开发,可直接调用对应语言的授权管理模块封装好的方法,例如Python的
azure-mgmt-authorization包、C#的Azure.ResourceManager.Authorization包,无需手动拼接HTTP请求 - 若仅需要快速获取结果,可直接使用Azure CLI执行命令
az role assignment list --scope 替换为你的资源scope --query "[].{principalName:principalName, principalType:principalType, roleDefinitionName:roleDefinitionName}"直接得到格式化的权限列表
注意:调用ARM相关接口的身份凭证,需要持有目标资源的
Microsoft.Authorization/roleAssignments/read权限,一般分配了所有者、用户访问管理员角色的身份可满足权限要求。
内容的提问来源于stack exchange,提问作者Elena Zgherea
相关产品推荐
相关产品推荐

