2017-08-30 95 views
0

我需要从keyvault中检索秘密。这是到目前为止我的代码:Python Azure sdk:如何从keyvault中检索秘密?

from azure.mgmt.keyvault import KeyVaultManagementClient 
from azure.common.credentials import ServicePrincipalCredentials 


subscription_id = 'x' 
# See above for details on creating different types of AAD credentials 
credentials = ServicePrincipalCredentials(
    client_id = 'x', 
    secret = 'x', 
    tenant = 'x' 
) 

kv_client = KeyVaultManagementClient(credentials, subscription_id) 

for vault in kv_client.vaults.list(): 
    print(vault) 

但我收到此错误:

msrestazure.azure_exceptions.CloudError: Azure Error: AuthorizationFailed Message: The client 'x' with object id 'x' does not have authorization to perform action 'Microsoft.Resources/subscriptions/resources/read' over scope '/subscriptions/x'.

现在我能够访问与使用C#代码相同的凭证相同keyvault/PowerShell的那么肯定是有什么授权错误。不知道为什么它不使用SDK。请帮忙。

+0

不知道,持票人标记可能有错误的观众或沿着这些线路的东西 - 尝试在https://github.com/Azure/azure-sdk-for-python/issues询问,如果你确定SPN对那个资源有好处。尝试找到一种打开跟踪的方法,也许它会提示您有关令牌中的内容。 – evilSnobu

+0

您的代码适用于我,我可以在密钥库中列出秘密。如果可能的话,你能否给你的服务负责人'所有者'安宁,然后再试一次。 [将应用程序分配给角色](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal#assign-application-to-role)。 –

+0

另外,你可以给'Contributer'权限,它也适用于我。这很奇怪,我不确定为什么服务主体在C#和PowerShell上工作。但是,我建议你可以检查并尝试给予许可。 –

回答

2

我上面运行你的代码示例,它能够列出没有任何问题的关键金库,因此它不是一个代码问题。

我分配了贡献者作用,以我的AD应用在其中关键库被配置和设置访问策略,以便获取键& LIST权限和秘密的AD应用程序订阅。

  • azure.common(1.1.8)
  • azure.mgmt.keyvault(0.40:使用下的Python 3.6.2运行时环境中运行我的Azure的Python包的

    的版本0.0)

  • msrestazure(0.4.13)

我建议您尝试使用经过验证的Python运行时版本和Azure Python包版本。

附录:

如果上面的Python运行时环境的版本以及Azure的Python包也不会为你工作,你或许应该考虑在Azure SDK for Python GitHub创建一个新的问题,因为它正在与相同Azure .NET SDK以及PowerShell的凭证。