You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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认证(本地开发首选)

  1. 安装Azure CLI,打开终端执行登录命令:
    az login
    
  2. 登录成功后重新运行Python代码,DefaultAzureCredential会自动复用CLI的登录信息完成认证。

方案2:VS Code认证

  1. 在VS Code中安装Azure Account插件。
  2. 点击左侧Azure图标,登录你的Azure账号。
  3. 重新运行代码即可。

方案3:服务主体认证(生产环境适用)

  1. 在Azure AD中创建服务主体,并为其分配Key Vault的Key Vault Secrets User角色(确保拥有密钥读取权限)。
  2. 设置以下环境变量:
    # 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
    
  3. 重新运行代码。

关键注意事项

无论采用哪种认证方式,都要确保你的账号/服务主体拥有Key Vault密钥读取权限,否则即使认证成功,仍会出现权限不足的错误。

内容的提问来源于stack exchange,提问作者ssuhas76

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:33:22