【问题标题】:Azure python SDK ComputerManagementClient errorAzure python SDK ComputerManagementClient错误
【发布时间】:2017-04-06 07:52:02
【问题描述】:

尝试使用 Python SDK for Azure 解除分配虚拟机时出现错误。

基本上我会尝试类似:

credentials = ServicePrincipalCredentials(client_id, secret, tenant)
compute_client = ComputeManagementClient(credentials, subscription_id, '2015-05-01-preview')
compute_client.virtual_machines.deallocate(resource_group_name, vm_name)
pprint (result.result())

-> 异常:

msrestazure.azure_exceptions.CloudError: Azure Error: AuthorizationFailed
Message: The client '<some client UUID>' with object id '<same client UUID>' does not have authorization to perform action 'Microsoft.Compute/virtualMachines/deallocate/action' over scope '/subscriptions/<our subscription UUID>/resourceGroups/<resource-group>/providers/Microsoft.Compute/virtualMachines/<our-machine>'.

我不明白的是,错误消息包含我未在凭据中使用的未知客户端 UUID。 Python 是 2.7.13 版本,SDK 版本是昨天的。

我想我需要的是一个应用程序的注册,我这样做是为了获取凭据信息。我不太确定我需要向 IAM 注册应用程序的确切权限。要添加访问条目,我只能选择现有用户,而不是应用程序。

那么是否有任何编程方式来找出某个操作需要哪些权限以及我们的客户端应用程序具有哪些权限?

谢谢!

【问题讨论】:

  • 请参阅此链接,了解如何将角色/权限分配给服务主体:docs.microsoft.com/en-us/azure/azure-resource-manager/…。 HTH。
  • 您好,感谢您提供的链接。我知道。但是我仍然想知道是否有一种方法可以通过使用 API 来获取有关哪些权限是必要的更具体的信息。
  • 当您遇到此类错误时,您可以查看此页面以了解您需要什么权限:docs.microsoft.com/en-us/azure/active-directory/…。您将看到您需要将角色“虚拟机贡献者”添加到凭证中。
  • 感谢您的链接!

标签: python azure virtual-machine azure-management-api


【解决方案1】:

正如@GauravMantri 和@LaurentMazuel 所说,问题是由于未将角色/权限分配给服务主体造成的。我已经回答了另一个 SO 线程 Cannot list image publishers from Azure java SDK,这与您的类似。

有两种方法可以解决此问题,包括使用 Azure CLI 和在 Azure 门户上执行这些操作,请参阅我的第一种答案的详细信息,我在下面更新第二种旧方法。

如果您想以编程方式找出这些权限,您可以参考 REST API Role Definition List 以获取适用于范围及以上的所有角色定义,或参考 Azure Python SDK Authentication Management 通过代码authorization_client.role_definitions.list(scope)

希望对你有帮助。

【讨论】:

    【解决方案2】:

    谢谢大家的回答!创建应用程序并将其注册到正确角色的最佳方法 - 虚拟机贡献者 - 确实在 https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal 上提供 我遇到的主要问题是在 IAM 中添加角色时存在错误。我使用添加。我选择“虚拟机贡献者”。通过“选择”,我会看到一个用户列表,但不是我为此目的创建的应用程序。输入我的应用程序名称的前几个字母将给出一个过滤输出,但这次包括我的应用程序。然后注册完成,可以继续进行。

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多