Python 使用DefaultAzureCredential在本地验证Azure密钥保管库

Python 使用DefaultAzureCredential在本地验证Azure密钥保管库,python,azure,azure-keyvault,azure-sdk-python,Python,Azure,Azure Keyvault,Azure Sdk Python,我正试图在本地运行此示例(Ubuntu 19.10),以从Azure密钥库检索一个秘密: from azure.keyvault.secrets import SecretClient from azure.identity import DefaultAzureCredential client = SecretClient(vault_url="https://<<vaultname>>.vault.azure.com",

我正试图在本地运行此示例(Ubuntu 19.10),以从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.keyvault.secrets导入加密客户端
从azure.identity导入DefaultAzureCredential
客户端=加密客户端(vault\u url=”https://.vault.azure.com",
凭证=DefaultAzureCredential())
secret=client.get_secret(“”)
但是,我收到以下错误:

azure.core.exceptions.ClientAuthenticationError:

此链中没有提供令牌的凭据

尝试的凭据:

环境凭据:环境配置不完整。寻找 预期环境变量

ImdsCredential:IMDS端点不可用

请访问

了解DefaultAzureCredential支持哪些选项

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

我是否错误地认为我应该能够在通过cli登录后进行身份验证

如果是这样,我需要手动设置为
EnvironmentCredential
提供的文档链接中描述的环境变量,我需要为
AZURE\u客户机ID
AZURE\u客户机SECRET
提供哪些值

我是否错误地认为我应该能够在通过cli登录后进行身份验证

你没有错,在我写这篇文章的时候,azure identity的当前预览版本1.4.0b2是可能的。安装了它之后,您的代码应该在登录到CLI后即可工作

。。。我需要为
AZURE\u CLIENT\u ID
AZURE\u CLIENT\u SECRET
提供哪些值

这些将是服务主体的客户(或“应用程序”)ID及其机密之一。介绍如何使用CLI创建服务主体并配置其对密钥库的访问

在此处简要地重复该文档,您可以使用以下命令创建服务主体:

az ad sp create-for-rbac --name http://my-application
从该命令的输出来看,“appId”是
AZURE\u CLIENT\u ID
的值,“password”是
AZURE\u CLIENT\u SECRET
的值

然后,要授予服务主体访问密钥库机密的权限,请执行以下操作:

az keyvault set-policy --name <<vaultname>> --spn $AZURE_CLIENT_ID --secret-permissions get set list delete backup recover restore purge
az keyvault集策略--名称--spn$AZURE\u客户端\u ID--机密权限获取集列表删除备份恢复清除