使用DefaultAzureCredential访问Azure Key Vault密钥时认证失败求助
问题描述
我正尝试访问存储在Azure Key Vault密钥中的SAS令牌,使用的Python代码如下:
from azure.identity import DefaultAzureCredential from azure.keyvault.secrets import SecretClient # 初始化Key Vault客户端 credential = DefaultAzureCredential() key_vault_url = "https://abcdefghijklmnop.vault.azure.net/" secret_client = SecretClient(vault_url=key_vault_url, credential=credential) # 获取密钥 secret_name = "xxxxxxxxxx" secret = secret_client.get_secret(secret_name).value print(secret)
运行后出现以下错误,请问我的操作是否正确?
错误信息
EnvironmentCredential.get_token failed: EnvironmentCredential authentication unavailable. Environment variables are not fully configured. ManagedIdentityCredential.get_token failed: ManagedIdentityCredential authentication unavailable, no managed identity endpoint found. SharedTokenCacheCredential.get_token failed: SharedTokenCacheCredential authentication unavailable. No accounts were found in the cache. VisualStudioCodeCredential.get_token failed: Failed to get Azure user details from Visual Studio Code. AzureCliCredential.get_token failed: Azure CLI not found on path DefaultAzureCredential failed to retrieve a token from the included credentials. Attempted credentials: EnvironmentCredential: EnvironmentCredential authentication unavailable. Environment variables are not fully configured. ManagedIdentityCredential: ManagedIdentityCredential authentication unavailable, no managed identity endpoint found. SharedTokenCacheCredential: SharedTokenCacheCredential authentication unavailable. No accounts were found in the cache. VisualStudioCodeCredential: Failed to get Azure user details from Visual Studio Code. AzureCliCredential: Azure CLI not found on path --------------------------------------------------------------------------- ClientAuthenticationError Traceback (most recent call last) Cell In [13], line 11 9 # 获取密钥 10 secret_name = "xxxxxxxxxxxxxx" ---> 11 secret = secret_client.get_secret(secret_name).value 12 secret
问题分析与解决
你的代码逻辑本身没问题,错误出在身份认证环节。DefaultAzureCredential会按顺序尝试多种认证方式,但所有方式都失败了,逐个原因及解决办法如下:
失败原因拆解
- EnvironmentCredential失败:未配置服务主体相关环境变量,无法通过服务主体认证。
- ManagedIdentityCredential失败:当前运行环境(比如本地电脑)未启用Azure托管身份,该方式仅适用于Azure云服务(如VM、App Service等)。
- SharedTokenCacheCredential失败:本地缓存中无已登录的Azure账户信息。
- VisualStudioCodeCredential失败:VS Code未登录Azure账号,或未安装Azure Account插件。
- AzureCliCredential失败:本地未安装Azure CLI,或未通过CLI登录Azure账号。
快速解决办法
方案1:Azure CLI认证(本地开发首选)
- 安装Azure CLI,打开终端执行登录命令:
az login - 登录成功后重新运行Python代码,
DefaultAzureCredential会自动复用CLI的登录信息完成认证。
方案2:VS Code认证
- 在VS Code中安装Azure Account插件。
- 点击左侧Azure图标,登录你的Azure账号。
- 重新运行代码即可。
方案3:服务主体认证(生产环境适用)
- 在Azure AD中创建服务主体,并为其分配Key Vault的Key Vault Secrets User角色(确保拥有密钥读取权限)。
- 设置以下环境变量:
# Windows系统 set AZURE_CLIENT_ID=你的服务主体ID set AZURE_CLIENT_SECRET=你的服务主体密钥 set AZURE_TENANT_ID=你的Azure租户ID # Linux/macOS系统 export AZURE_CLIENT_ID=你的服务主体ID export AZURE_CLIENT_SECRET=你的服务主体密钥 export AZURE_TENANT_ID=你的Azure租户ID - 重新运行代码。
关键注意事项
无论采用哪种认证方式,都要确保你的账号/服务主体拥有Key Vault密钥读取权限,否则即使认证成功,仍会出现权限不足的错误。
内容的提问来源于stack exchange,提问作者ssuhas76
相关产品推荐
相关产品推荐

