我需要从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。请帮忙。
不知道,持票人标记可能有错误的观众或沿着这些线路的东西 - 尝试在https://github.com/Azure/azure-sdk-for-python/issues询问,如果你确定SPN对那个资源有好处。尝试找到一种打开跟踪的方法,也许它会提示您有关令牌中的内容。 – evilSnobu
您的代码适用于我,我可以在密钥库中列出秘密。如果可能的话,你能否给你的服务负责人'所有者'安宁,然后再试一次。 [将应用程序分配给角色](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal#assign-application-to-role)。 –
另外,你可以给'Contributer'权限,它也适用于我。这很奇怪,我不确定为什么服务主体在C#和PowerShell上工作。但是,我建议你可以检查并尝试给予许可。 –