0

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

基本上我尝试类似:

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 注册应用程序的确切权限。要添加访问条目,我只能选择现有用户,而不是应用程序。

那么有没有任何程序化的方式来找出一个动作需要哪些权限以及我们的客户端应用程序有哪些权限?

谢谢!

4

2 回答 2

0

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

于 2017-05-16T13:44:29.143 回答
0

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

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

在此处输入图像描述

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

希望能帮助到你。

于 2017-04-07T09:28:06.450 回答