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

无法从Azure App Service容器访问用户分配的托管标识

解决Azure Windows容器Web应用用户托管标识访问Key Vault失败问题

你的核心问题是:使用用户托管标识时,容器内应用无法获取MSI令牌(报错error getting managed identity credential),且az login --identity返回400错误Unable to load the proper Managed Identity,但系统托管标识可正常工作。以下是针对性排查和解决步骤:

1. 确认用户托管标识的关联状态

  • 进入Web应用的标识 > 用户分配页面,确认目标用户托管标识已被正确添加,且状态显示为「已分配」。
  • 若通过脚本/模板添加标识,核对标识的资源ID/Client ID是否完全正确,避免ID输入错误导致关联失效。

2. 配置容器环境变量与代码指定Client ID

Windows容器内的MSI服务不会自动识别用户托管标识,必须显式指定:

  • 在Web应用的配置 > 应用程序设置中添加环境变量AZURE_CLIENT_ID,值为用户托管标识的Client ID。
  • 代码中创建ManagedIdentityCredential时,显式传入client_id参数:
    from azure.identity import ManagedIdentityCredential
    from azure.keyvault.secrets import SecretClient
    
    credential = ManagedIdentityCredential(client_id="YOUR_USER_ASSIGNED_ID_CLIENT_ID")
    secret_client = SecretClient(vault_url="YOUR_KEYVAULT_URL", credential=credential)
    

3. 验证Key Vault访问策略

  • 进入Key Vault的访问策略页面,搜索用户托管标识的名称/Client ID,确认已授予「密钥」权限(至少包含Get、List)。
  • 注意:不要误将权限授予系统托管标识,两者是独立的身份实体。

4. 检查容器内MSI环境与SDK版本

  • 在容器内执行set命令,确认IDENTITY_ENDPOINT和IDENTITY_HEADER两个环境变量已被正确注入(这两个是MSI功能的基础)。
  • 升级Python依赖包:确保azure-identity版本≥1.5.0,旧版本对用户托管标识的支持存在缺陷。

5. 直接测试MSI令牌获取

在容器内用PowerShell执行以下命令,验证是否能获取到令牌:

Invoke-WebRequest -Uri "http://100.64.100.2:41401/msi/token/?resource=https://vault.azure.net&api-version=2017-09-01&client_id=YOUR_USER_ASSIGNED_ID_CLIENT_ID" -Headers @{"X-IDENTITY-HEADER" = $env:IDENTITY_HEADER}
  • 若返回200并包含access_token,说明MSI服务正常,问题出在应用代码或配置;若仍返回400,说明用户托管标识未正确关联到Web应用,需重新关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:57:13