如何获取Azure AD主体含PIM的全范围角色分配,无需遍历多订阅?
可行实现方案
最优方案:调用租户级Microsoft Graph相关接口(无需遍历订阅)
该方案直接在租户维度拉取指定主体的所有角色分配,覆盖管理组、订阅、资源组、单个资源全层级,同时包含永久分配和PIM的合格/活跃分配,完全不需要遍历所有订阅。
1. 代码/API实现
- 首先将输入的用户名/SPN名称转换为对应的Azure AD主体ID
- 调用三类Graph接口拉取全量分配:
- 永久RBAC角色分配:
directoryObjects/{principalId}/getMemberObjects接口,传入角色分配类型筛选 - PIM活跃角色分配:
roleManagement/directory/roleAssignmentScheduleInstances接口按主体ID筛选 - PIM合格(待激活)角色分配:
roleManagement/directory/roleEligibilityScheduleInstances接口按主体ID筛选
- 永久RBAC角色分配:
- 对返回结果做字段映射,提取作用域、角色定义名称、分配类型(永久/PIM活跃/PIM合格)即可得到完整结果。
- 权限要求:调用接口的身份需要拥有
RoleManagement.Read.All、PrivilegedAccess.Read.AzureResources应用权限或委托权限。
2. 无代码/PowerShell快速实现
使用Azure官方Az模块的内置命令,几行代码即可完成查询,示例如下:
# 1. 登录Azure Connect-AzAccount # 2. 获取目标主体ID(查用户替换为Get-AzADUser,查SPN替换为Get-AzADServicePrincipal) $principal = Get-AzADUser -UserPrincipalName "目标用户名" $principalId = $principal.Id # 3. 查询全租户范围的永久RBAC分配 $permanentAssign = Get-AzRoleAssignment -PrincipalId $principalId -Scope "/" -ExpandPrincipalGroups # 4. 查询全租户范围的PIM活跃分配 $pimActiveAssign = Get-AzRoleAssignmentScheduleInstance -Filter "principalId eq '$principalId'" # 5. 查询全租户范围的PIM待激活分配 $pimEligibleAssign = Get-AzRoleEligibilityScheduleInstance -Filter "principalId eq '$principalId'"
上述命令返回的结果已经包含该主体的所有权限分配,无需逐一遍历订阅。
补充说明:你之前尝试的Azure Resource Graph目前已经支持角色分配查询,对应
AuthorizationResources表,但是该方式仅能查询永久分配,不包含PIM分配,因此不满足你的核心需求。
可选方案:使用Azure AD内置权限分析功能
如果不需要集成到自有系统,仅需人工查询,可以直接使用Azure AD Identity Governance模块下的「权限管理」-「我的访问」或者「访问评审」功能,输入目标用户后可以直接导出其所有Azure资源访问权限,自动包含PIM分配结果,无需任何代码开发。
内容的提问来源于stack exchange,提问作者codegal
相关产品推荐
相关产品推荐

