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

AKS中Spring Boot通过系统分配托管身份访问Azure Key Vault失败如何解决

故障解决步骤

  1. 显式指定系统分配托管身份ID
    错误日志显示IMDS返回400错误,通常是因为AKS节点同时存在多个托管身份时,即使是系统分配身份也需要显式传入客户端ID才能调用IMDS接口,修改代码如下,填入AKS节点系统分配托管身份的客户端ID即可:
SecretClient client = new SecretClientBuilder().vaultUrl(vaultUrl)
                .credential(new ManagedIdentityCredentialBuilder()
                .clientId("<系统分配托管身份客户端ID>")
                .build())
                .buildClient();
KeyVaultSecret secretKey = client.getSecret(secretName);
  1. 排查网络访问限制
    IMDS服务的固定地址是169.254.169.254,检查集群是否配置了网络策略、iptables规则拦截了Pod到该地址80端口的流量:
  • 如果你使用IPVS模式的kube-proxy,执行以下命令添加规则跳过IMDS流量的代理:
iptables -t nat -A OUTPUT -d 169.254.169.254/32 -j ACCEPT

可以通过DaemonSet将该规则批量下发到所有节点。
3. 检查Key Vault访问权限
确认AKS节点的系统分配托管身份已经被授予Key Vault的机密读取权限,或者在Key Vault的访问策略中添加了对应身份的相关权限。
4. 替代方案
如果以上方法仍未解决,建议改用Azure AD Workload Identity实现Pod身份认证,这是AKS当前官方推荐的方案,无需依赖节点托管身份,安全性和隔离性更好。


AKS节点托管身份检查方法

1. 通过Azure CLI检查集群配置

执行以下命令查看集群和节点池的托管身份配置:

# 查看集群整体托管身份配置
az aks show -n <集群名称> -g <资源组名称> --query identity

# 查看指定节点池的托管身份配置
az aks nodepool show -n <节点池名称> --cluster-name <集群名称> -g <资源组名称> --query identity

如果返回结果的type字段包含SystemAssigned,说明对应节点池已启用系统分配托管身份,返回结果中可直接获取对应的clientId值。

2. 直接登录节点验证IMDS接口

通过kubectl debug或SSH登录到目标AKS节点,执行以下命令直接调用IMDS接口验证托管身份状态:

# 测试系统分配托管身份获取令牌
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net' -H Metadata:true -s

如果返回包含access_token的JSON数据,说明节点系统分配托管身份工作正常;如果返回400错误,说明节点未启用系统分配托管身份,或需要传入client_id参数调用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:06