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
相关产品推荐
相关产品推荐

