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

使用托管标识从Azure HDInsight访问Azure Key Vault失败排查

HDI Spark集群使用托管标识访问Azure Key Vault报错排查方案

核心问题定位方向

该报错本质是Spark运行节点无法从Azure元数据服务获取到对应托管标识的token,和Key Vault本身的权限配置无关,按以下顺序逐层排查:


1. 校验托管标识的挂载配置

这是最高发的配置错误:

  • 进入HDI集群资源页,打开左侧「标识」菜单,切换到「用户分配」标签页,确认目标用户分配托管标识(UAI)已添加到列表中。仅在IAM页面给集群授予UAI相关权限不代表标识已挂载到计算节点,必须在该标识页显式添加,添加后集群会完成节点重启与配置同步。
  • 确认添加的标识和你代码里填的client_id对应,不要混用UAI的对象ID、资源ID,必须使用标识的「应用程序(客户端)ID」。

2. 跳过代码直接验证节点托管标识可用性

先在HDI头节点、任意工作节点执行curl命令测试元数据服务,排除代码/SDK问题:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net&client_id=替换为你的UAI客户端ID' -H Metadata:true
  • 如果命令返回包含access_token的正常响应,说明节点层面标识挂载正常,问题出在SDK配置;
  • 如果命令返回400错误提示标识不存在,说明集群层面标识未正确挂载/同步,回到第一步重新配置UAI,必要时全量重启集群节点组完成配置下发。

3. 修复SDK适配问题

  • 你当前使用的Python 3.7环境下,如果azure-identity版本低于1.10.0,存在HDI环境下托管标识端点探测失败的已知bug,执行pip install --upgrade azure-identity==1.12.0升级到稳定兼容版本,不要使用1.13.x系列预览版。
  • 排查阶段不要使用DefaultAzureCredential,该类会按顺序尝试多种认证源,容易抛出误导性错误,直接用ManagedIdentityCredential传入client_id做单步验证。
  • 最小可用验证代码:
from azure.identity import ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient

kv_url = "https://替换为你的Key Vault名称.vault.azure.net/"
cred = ManagedIdentityCredential(client_id="替换为你的UAI客户端ID")
secret_client = SecretClient(vault_url=kv_url, credential=cred)
# 测试读取密钥
test_secret = secret_client.get_secret("替换为你的测试密钥名称")
print(test_secret.value)

4. 排查网络与集群版本兼容性

  • 如果集群部署在自定义VNet中,检查关联的网络安全组、防火墙规则没有拦截链路本地地址169.254.169.254,该地址是Azure元数据服务的节点本地访问地址,拦截后所有托管标识请求都会失败。
  • 如果使用HDI 4.0及以下版本,存在用户分配托管标识支持缺陷,优先升级到HDI 5.0/5.1稳定版本,也可以先开启系统分配托管标识做对照测试:如果系统分配标识能正常认证,说明UAI的挂载流程存在配置遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:57:20