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

Ubuntu本地用DefaultAzureCredential访问Azure Key Vault认证失败求助

解决Azure Key Vault Python SDK本地认证问题

一、Azure CLI登录后能否实现认证?

当然可以!DefaultAzureCredential的认证链本身就包含AzureCliCredential,理论上你完成az login后,SDK应该能自动拾取CLI的令牌。你遇到报错大概率是以下几个细节问题导致的:

  • SDK版本兼容性:旧版本的azure-identity在Linux环境下对CLI令牌的读取支持可能有缺陷,建议先把相关包更新到最新版:
    pip install --upgrade azure-identity azure-keyvault-secrets
    
  • CLI令牌文件权限:在Ubuntu环境中,Azure CLI的令牌默认存在~/.azure/accessTokens.json,如果你的Python进程没有读取这个文件的权限,就会失败。可以检查并调整权限:
    # 查看文件权限
    ls -l ~/.azure/accessTokens.json
    # 调整为当前用户可读取(保证安全的前提下)
    chmod 600 ~/.azure/accessTokens.json
    
  • 直接指定CLI认证:如果自动认证链还是不生效,你可以跳过DefaultAzureCredential,直接使用AzureCliCredential来强制走CLI认证路径,代码修改如下:
    from azure.keyvault.secrets import SecretClient
    from azure.identity import AzureCliCredential
    client = SecretClient(vault_url="https://<<vaultname>>.vault.azure.com", credential=AzureCliCredential())
    secret = client.get_secret("<<mysecret>>")
    

二、手动设置EnvironmentCredential的环境变量,AZURE_CLIENT_ID和AZURE_CLIENT_SECRET填什么?

这两个变量对应的是Azure AD服务主体的身份信息,需要先创建服务主体并配置Key Vault的访问权限,步骤如下:

  1. 创建Azure AD服务主体:
    用Azure CLI执行命令(替换<服务主体名称>为你自定义的名称):

    az ad sp create-for-rbac --name <服务主体名称> --skip-assignment
    

    执行后会返回一段JSON结果,里面的字段对应环境变量:

    {
      "appId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "password": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "tenant": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
    • AZURE_CLIENT_ID = 上述结果中的appId
    • AZURE_CLIENT_SECRET = 上述结果中的password
    • 还需要额外设置AZURE_TENANT_ID = 上述结果中的tenant
  2. 给服务主体分配Key Vault权限:
    让这个服务主体拥有读取Key Vault机密的权限,执行命令(替换<密钥库名称>和<服务主体appId>):

    az keyvault set-policy --name <密钥库名称> --spn <服务主体appId> --secret-permissions get list
    
  3. 设置环境变量:
    在Ubuntu终端中执行以下命令(替换为你的实际值):

    export AZURE_CLIENT_ID="xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    export AZURE_CLIENT_SECRET="xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    export AZURE_TENANT_ID="xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    

    之后再运行你的Python代码,DefaultAzureCredential就会自动读取这些环境变量完成认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:23:15