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

Azure Identity与Key Vault:如何使用AzureML托管身份完成身份验证?

正确配置方案

方案1:优先用DefaultAzureCredential(最简单)

  • 你看到的EnvironmentCredential报错只是DefaultAzureCredential链式验证中的一个分支失败提示,不代表整个验证失败,它会自动尝试后续的托管身份验证分支,不需要单独配置环境变量
  • 首先检查Key Vault的访问模式:如果你用的是Azure RBAC模式,你之前分配的Key Vault Secrets User角色就足够,不需要管理员/参与者角色,反而权限过高有风险;如果用的是访问策略模式,需要单独在Key Vault的「访问策略」里给AML的系统托管身份分配机密获取权限,光分配RBAC角色没用
  • 优化后的代码可以主动排除不需要的验证分支,减少冗余报错:
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

vault_url = "你的Key Vault URI,格式为https://<kv名称>.vault.azure.net/"
credential = DefaultAzureCredential(
    exclude_environment_credential=True,
    exclude_cli_credential=True,
    exclude_managed_identity_credential=False
)
secret_client = SecretClient(vault_url=vault_url, credential=credential)
secret = secret_client.get_secret("secret-i-want")
print(secret.value)

方案2:显式用ManagedIdentityCredential

  • 系统分配托管身份不需要传入任何ID参数,你之前代码卡住是因为传了错误格式的identity_config参数,正确用法如下:
from azure.identity import ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient

# 系统分配托管身份直接初始化即可,不需要传object_id/client_id
credential = ManagedIdentityCredential()
secret_client = SecretClient(vault_url="你的Key Vault URI", credential=credential)
secret = secret_client.get_secret("secret-i-want")
  • 只有使用用户分配托管身份时才需要传参,参数名为client_id,示例:ManagedIdentityCredential(client_id="你的用户分配托管身份客户端ID")

常见排查点

  • 确认代码运行在AzureML的计算实例/计算集群上,本地运行无法获取AML的托管身份
  • 确认Key Vault的网络配置允许AzureML计算所在的虚拟网络访问,或者开启了「允许受信任的Azure服务绕过防火墙」选项
  • 角色/访问策略分配后最多需要等待5分钟生效,配置完成不要立刻测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:15:08