使用DefaultAzureCredential在本地对Azure Key Vault进行身份验证

时间:2020-04-09 15:57:11

标签: python azure azure-keyvault azure-sdk-python

我正在尝试在本地(Ubuntu 19.10)上运行此'Retrieve a secret from the vault'示例,以从Azure密钥保管库检索机密:

from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

client = SecretClient(vault_url="https://<<vaultname>>.vault.azure.com",
                      credential=DefaultAzureCredential())

secret = client.get_secret("<<mysecret>>")

但是我收到以下错误:

azure.core.exceptions.ClientAuthenticationError:

此链中没有凭证提供令牌。

尝试的凭据:

EnvironmentCredential:不完整的环境配置。有关详情,请参见https://aka.ms/python-sdk-identity#environment-variables 预期环境变量

ImdsCredential:IMDS端点不可用

请访问以下文档

https://aka.ms/python-sdk-identity#defaultazurecredential

了解DefaultAzureCredential支持哪些选项

documentation on Service-to-Service authentication to Key Vault似乎表明我应该能够通过Azure CLI进行身份验证,并且我已经按照步骤通过az login登录,选择了适当的订阅(我已经完成了以防万一,尽管只有一个),并通过az account get-access-token --resource https://vault.azure.net验证访问,但确实返回令牌,但是仍然收到上述错误。

我认为通过cli登录后应该能够进行身份验证是错误的吗?

如果是这样,并且我需要手动设置EnvironmentCredential提供的文档链接中描述的环境变量,我需要为AZURE_CLIENT_IDAZURE_CLIENT_SECRET提供哪些值?< / p>

1 个答案:

答案 0 :(得分:2)

我认为通过cli登录后应该能够进行身份验证是错误的吗?

您没看错,在我撰写本文时,当前的azure-identity预览版本1.4.0b2是可能的。安装该代码后,登录到CLI后,您的代码即可正常工作。

...我需要为AZURE_CLIENT_IDAZURE_CLIENT_SECRET提供什么值?

这些将是服务主体的客户端(或“应用程序”)ID,以及其机密之一。 azure-keyvault-secrets documentation描述了如何使用CLI创建服务主体并配置其对Key Vault的访问权限。

在这里简短地重申该文档,您可以使用以下命令创建服务主体:

az ad sp create-for-rbac --name http://my-application

从该命令的输出中,“ appId”是AZURE_CLIENT_ID的值,而“ password”是AZURE_CLIENT_SECRET的值。

然后,授予服务主体对Key Vault机密的访问权限:

az keyvault set-policy --name <<vaultname>> --spn $AZURE_CLIENT_ID --secret-permissions get set list delete backup recover restore purge