使用 DefaultAzureCredential 在本地对 Azure Key Vault 进行身份验证
Authenticating to Azure Key Vault locally using DefaultAzureCredential
我正在尝试 运行 这个 'Retrieve a secret from the vault' 本地示例 (Ubuntu 19.10) 从 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:
No credential in this chain provided a token.
Attempted credentials:
EnvironmentCredential: Incomplete environment configuration. See https://aka.ms/python-sdk-identity#environment-variables for
expected environment variables
ImdsCredential: IMDS endpoint unavailable
Please visit the documentation at
https://aka.ms/python-sdk-identity#defaultazurecredential
to learn what options DefaultAzureCredential supports
documentation on Service-to-Service authentication to Key Vault 似乎建议我应该能够通过 Azure CLI 进行身份验证,并且我已经按照步骤通过 az login
、select 适当的订阅登录(我这样做是为了以防万一,尽管只有一个),并通过 az account get-access-token --resource https://vault.azure.net
验证访问权限,它确实 return 一个令牌,但仍然收到上述错误。
我假设我应该能够在通过 cli 登录后进行身份验证是错误的吗?
如果是这样,我需要手动设置文档 link 为 EnvironmentCredential
提供的环境变量,我需要为 AZURE_CLIENT_ID
和 AZURE_CLIENT_SECRET
?
Am I wrong in assuming I should be able to authenticate after logging in via the cli?
你没看错,在我写这篇文章时,azure-identity
的当前预览版本 1.4.0b2 是可能的。安装后,一旦您登录到 CLI,您的代码就应该可以工作了。
... what values do I need to supply for AZURE_CLIENT_ID
and AZURE_CLIENT_SECRET
?
这些将是服务主体的客户端(或 "application")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
我正在尝试 运行 这个 'Retrieve a secret from the vault' 本地示例 (Ubuntu 19.10) 从 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:
No credential in this chain provided a token.
Attempted credentials:
EnvironmentCredential: Incomplete environment configuration. See https://aka.ms/python-sdk-identity#environment-variables for expected environment variables
ImdsCredential: IMDS endpoint unavailable
Please visit the documentation at
https://aka.ms/python-sdk-identity#defaultazurecredential
to learn what options DefaultAzureCredential supports
documentation on Service-to-Service authentication to Key Vault 似乎建议我应该能够通过 Azure CLI 进行身份验证,并且我已经按照步骤通过 az login
、select 适当的订阅登录(我这样做是为了以防万一,尽管只有一个),并通过 az account get-access-token --resource https://vault.azure.net
验证访问权限,它确实 return 一个令牌,但仍然收到上述错误。
我假设我应该能够在通过 cli 登录后进行身份验证是错误的吗?
如果是这样,我需要手动设置文档 link 为 EnvironmentCredential
提供的环境变量,我需要为 AZURE_CLIENT_ID
和 AZURE_CLIENT_SECRET
?
Am I wrong in assuming I should be able to authenticate after logging in via the cli?
你没看错,在我写这篇文章时,azure-identity
的当前预览版本 1.4.0b2 是可能的。安装后,一旦您登录到 CLI,您的代码就应该可以工作了。
... what values do I need to supply for
AZURE_CLIENT_ID
andAZURE_CLIENT_SECRET
?
这些将是服务主体的客户端(或 "application")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