使用DefaultAzureCredential在本地对Azure Key Vault进行身份验证 [英] Authenticating to Azure Key Vault locally using DefaultAzureCredential

查看:68
本文介绍了使用DefaultAzureCredential在本地对Azure Key Vault进行身份验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试运行示例(Ubuntu 19.10),以从Azure密钥库中获取秘密:

I am attempting to run this 'Retrieve a secret from the vault' example locally (Ubuntu 19.10) to retrieve a secret from an Azure Key Vault:

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:

azure.core.exceptions.ClientAuthenticationError:

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

No credential in this chain provided a token.

尝试使用的凭证:

EnvironmentCredential:不完整的环境配置.参见 https://aka.ms/python-sdk-identity#environment-variables为预期环境变量

EnvironmentCredential: Incomplete environment configuration. See https://aka.ms/python-sdk-identity#environment-variables for expected environment variables

ImdsCredential:IMDS端点不可用

ImdsCredential: IMDS endpoint unavailable

请访问以下文档

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

了解DefaultAzureCredential支持哪些选项

to learn what options DefaultAzureCredential supports

The documentation on Service-to-Service authentication to Key Vault seems to suggest that I should be able to authenticate by the Azure CLI, and I've followed the steps to login via az login, select the appropriate subscription (which I've done just in case, despite only having one), and verify access via az account get-access-token --resource https://vault.azure.net which does return a token, however still receive the error above.

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

Am I wrong in assuming I should be able to authenticate after logging in via the cli?

如果是这样,并且我需要手动设置为 EnvironmentCredential 提供的文档链接中描述的环境变量,我需要为 AZURE_CLIENT_ID 和<代码> AZURE_CLIENT_SECRET ?

And if so, and I need to manually set the environment variables described in the documentation link provided for EnvironmentCredential, what values do I need to supply for AZURE_CLIENT_ID and AZURE_CLIENT_SECRET?

推荐答案

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

Am I wrong in assuming I should be able to authenticate after logging in via the cli?

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

You're not wrong, it's possible with the current preview version of azure-identity, 1.4.0b2 as I write this. With that installed, your code should work once you've logged in to the CLI.

...我需要为 AZURE_CLIENT_ID AZURE_CLIENT_SECRET 提供什么值?

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

These would be the client (or "application") ID of a service principal, and one of its secrets. The azure-keyvault-secrets documentation describes how to create a service principal and configure its access to a Key Vault, using the CLI.

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

Briefly restating that documentation here, you can create a service principal with this command:

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

从该命令的输出中,"appId"是 AZURE_CLIENT_ID 的值,"password"是 AZURE_CLIENT_SECRET 的值.

From the output of that command, "appId" is the value of AZURE_CLIENT_ID and "password" is the value of AZURE_CLIENT_SECRET.

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

Then, to grant the service principal access to the Key Vault's secrets:

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

这篇关于使用DefaultAzureCredential在本地对Azure Key Vault进行身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆