如何通过Azure Python SDK或API获取资源角色分配的类型(eligible/active)
如何通过Azure Python SDK或API获取资源角色分配的类型(eligible/active)
我之前也碰到过一模一样的问题——常规的RoleAssignment类确实不会返回分配类型(eligible/active)的信息,毕竟这部分属于Azure PIM(特权身份管理)的范畴,不是基础角色分配的内容。下面给你两种可行的解决方案:
使用Azure Python SDK获取分配类型
你需要用到azure-mgmt-authorization这个包,它提供了PIM相关的角色分配计划操作接口。步骤如下:
- 首先安装依赖包:
pip install azure-mgmt-authorization azure-identity
- 编写代码区分eligible和active分配:
from azure.identity import DefaultAzureCredential from azure.mgmt.authorization import AuthorizationManagementClient # 替换成你的资源信息 subscription_id = "你的订阅ID" resource_group = "你的资源组名称" resource_provider = "Microsoft.Compute" # 比如存储是Microsoft.Storage,根据资源类型调整 resource_type = "virtualMachines" resource_name = "你的资源名称" # 构造资源的完整ID resource_id = f"/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/{resource_provider}/{resource_type}/{resource_name}" # 初始化授权管理客户端 credential = DefaultAzureCredential() auth_client = AuthorizationManagementClient(credential, subscription_id) # 获取**Active(活跃)**角色分配:这部分就是常规的角色分配查询 print("=== 活跃角色分配 ===") for assignment in auth_client.role_assignments.list_for_resource( resource_group, resource_provider, resource_type, resource_name ): print(f"主体:{assignment.principal_name},角色:{assignment.role_definition_name}") # 获取**Eligible(合格)**角色分配:需要查询PIM的角色分配计划 print("\n=== 合格角色分配 ===") for schedule in auth_client.role_assignment_schedules.list_for_scope(resource_id): # 筛选出类型为Eligibility的计划,就是合格分配 if schedule.properties.role_assignment_schedule_type == "Eligibility": print(f"主体:{schedule.properties.principal_name},角色:{schedule.properties.role_definition_name}")
这里的核心逻辑是:
- 活跃分配直接通过
role_assignments接口查询,这是你之前可能已经用过的常规接口 - 合格分配属于PIM的资格计划,需要通过
role_assignment_schedules接口,筛选role_assignment_schedule_type为Eligibility的条目
使用REST API获取分配类型
如果不想用SDK,直接调用Azure REST API也能实现:
获取活跃角色分配
请求地址:
GET https://management.azure.com/{resource-id}/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01
返回结果里的所有条目都是活跃的角色分配。
获取合格角色分配
请求地址:
GET https://management.azure.com/{resource-id}/providers/Microsoft.Authorization/roleAssignmentSchedules?api-version=2020-10-01
返回结果中,筛选properties.roleAssignmentScheduleType值为Eligibility的条目,就是合格的角色分配。
注意:不管用SDK还是API,你都需要拥有Privileged Role Administrator或Security Administrator这类有权限读取PIM分配信息的角色,否则会返回权限不足的错误。
备注:内容来源于stack exchange,提问作者Shakesbeer
相关产品推荐
相关产品推荐

