【问题标题】:How to get list of users who are having owner access for a azure subscription using python如何使用 python 获取拥有 azure 订阅所有者访问权限的用户列表
【发布时间】:2019-03-20 13:22:06
【问题描述】:

我正在尝试获取拥有订阅所有者访问权限的用户列表。

我尝试检查 python azure sdk。但我没有得到任何执行此功能的 api。

订阅列表 API 可用,但未提供有权访问特定订阅的用户的详细信息。

我试过下面的代码

subscriptionClient = SubscriptionClient(credentials)
for subscription in subscriptionClient.subscriptions.list():
    print (subscription)

任何帮助将不胜感激

【问题讨论】:

标签: python azure azure-active-directory azure-automation azure-sdk-python


【解决方案1】:

这个 PowerShell 命令:

(Get-AzureRmRoleAssignment -RoleDefinitionId "8e3af657-a8ff-443c-a75c-2fe8c4bcb635" -Scope "/subscriptions/<your azure sub ID>" | where {($_.ObjectType -EQ "user") -and ($_.Scope -EQ "/subscriptions/<your azure sub ID>") }  ) | select DisplayName,SignInName

将返回所有具有订阅所有者角色的 Azure AD 用户。

我已经尝试捕获关于这个ps命令的数据包,它调用了多个rest API来完成这个过程。 您可以在 Azure 应用服务 webjobs、Azure 函数或 Azure 自动化上托管此命令,并在需要时探索 webhook 以获取用户列表。 希望对您有所帮助。

【讨论】:

  • 感谢这工作。但是,当我尝试在 webapps 中运行此命令时,它会抛出诸如“找不到命令”之类的错误。我尝试了是否可以通过扩展添加在 webapps 中安装 azure powershell。但是 azure powershell 在扩展中不可用。 webapps里面的命令怎么用。
  • Azure Webapps 有一个名为 Azure webjobs 的内部服务,您可以使用它按计划或通过触发器运行 powershell 脚本。详情可参考:docs.microsoft.com/en-us/azure/app-service/…
  • 感谢您的回复。但问题是我无法在 webapps 中运行 azure powershell 命令。这是我收到的错误 [10/19/2018 03:08:04 > 5198ab: ERR] Connect-AzureRmAccount:无法识别术语“Connect-AzureRmAccount” 我检查了 webapp 扩展,但没有得到任何结果。再次感谢您的帮助。
  • 欢迎!我得到了同样的错误。使用 Add-AzureRmAccount 将解决这个问题:)
  • 如果您是 Microsoft 合作伙伴,我会找到一个免费渠道来解决 azure 查询:aka.ms/devchat。他们支持在线聊天和电子邮件。
【解决方案2】:

Azure Python SDK

如果您希望使用 Azure Python SDK,那么您应该使用 AuthorizationManagementClient class

您可以尝试在订阅范围内为您的订阅获取 RoleAssignments。

我与 C# 密切合作,因此手头没有 Python 代码,但稍后会尝试使用 Python 代码更新。

更新

这是一个示例代码。我希望这足以让您继续。

from azure.mgmt.authorization import AuthorizationManagementClient

authorizationClient = AuthorizationManagementClient(credentials, '<your subscription guid>')
roles = authorizationClient.role_assignments.list()
for role in roles:
print(role)

REST API

如果您想直接从代码调用 REST API,请使用 Microsoft.Authorization/roleAssignments REST API。

GET https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments?api-version=2018-01-01-preview

{scope} 将是 subscriptions/&lt;your subscriptionId&gt; 以获取订阅级别的角色分配。

这是对此 API 的示例请求和响应。

查找已在订阅级别明确分配“所有者”角色的所有用户

请求:

GET https://management.azure.com/subscriptions/{my subscription GUID}/providers/Microsoft.Authorization/roleAssignments?api-version=2018-01-01-preview

回复:

请注意,响应中的角色定义 ID 为“8e3af657-a8ff-443c-a75c-2fe8c4bcb635”。这对应于内置的 Owner 角色。

{"value":[{"properties":{"roleDefinitionId":"/subscriptions/{my Subscription GUID}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635","principalId":"{some user GUID}","principalType":"User","scope":"/subscriptions/{my Subscription GUID}","createdOn":"2018-10-03T05:12:52.7213301Z","updatedOn":"2018-10-03T05:12:52.7213301Z","createdBy":"GUID","updatedBy":"GUID"},"id":"/subscriptions/{my Subscription GUID}/providers/Microsoft.Authorization/roleAssignments/83eee76b-4a0d-4f61-8c62-409501e95457","type":"Microsoft.Authorization/roleAssignments","name":"83eee76b-4a0d-4f61-8c62-409501e95457"}]}

收到响应后,它将包含角色定义 ID,而不是确切的名称。对于所有内置角色,您可以通过访问此Microsoft documentation 事先知道它是哪个角色。例如。 Owner 角色的 ID 为“8e3af657-a8ff-443c-a75c-2fe8c4bcb635”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2020-11-15
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多