You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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筛选
  • 对返回结果做字段映射,提取作用域、角色定义名称、分配类型(永久/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:42:01