如何使用Azure Python SDK将Principal_id转换为用户名

问题描述

使用Azure Python SDK,我正在尝试构建一个脚本,该脚本将审核我们的各种用户角色授权。我可以使用以下命令提取角色分配列表:

authorizationClient = AuthorizationManagementClient(credential,subscription_id)
roles = authorizationClient.role_assignments.list()

这有效,并且我得到了一系列字典,其中似乎包含除principal_name之外我需要的所有信息。响应示例:

{'additional_properties': {},'id': '/providers/Microsoft.Management/managementGroups/<group_ID>/providers/Microsoft.Authorization/roleAssignments/<role_ID>','name': '<role_ID>','type': 'Microsoft.Authorization/roleAssignments','scope': '/providers/Microsoft.Management/managementGroups/<scope_ID>','role_deFinition_id': '/subscriptions/<subscription_ID>/providers/Microsoft.Authorization/roleDeFinitions/<role_def_id>','principal_id': '<principal_ID>','principal_type': 'Group','can_delegate': None}

使用Azure Python SDK,有没有一种方法可以在给定principal_id的情况下查找principal_name?

我已经阅读了几个小时的SDK文档,但似乎找不到答案。我所能发现的是,认情况下,蔚蓝的cli会弹出Principal_id和Principal_name,但SDK不会。感谢您的任何帮助。

解决方法

您需要使用azure-graphrbac软件包: https://pypi.org/project/azure-graphrbac/

用法示例:

    objects = graphrbac_client.objects.get_objects_by_object_ids({
        'object_ids': [app.object_id],'types': ['ServicePrincipal']
    })

也有过滤器语法。我没有用ID过滤的人,但这给了你一个主意:

    users = graphrbac_client.users.list(
        filter="displayName eq 'Test Buddy'"
    )

graphrbac的文档: https://azuresdkdocs.blob.core.windows.net/$web/python/azure-graphrbac/0.61.1/azure.graphrbac.html

一些广泛的单元测试可以帮助: https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/graphrbac/azure-graphrbac/tests/test_graphrbac.py

RestAPI文档可以为您提供一些有关SDK可以做什么的见解: https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/api-catalog

(我在Python SDK团队的MS部门工作)