AKS部署的Docker镜像访问Azure Key Vault返回403错误原因咨询
故障根因说明
以下是该问题的所有可能触发原因:
- 你在Dockerfile构建阶段执行的
az login --service-principal生成的凭证默认会写入构建环境当前用户的~/.azure目录:如果你使用了多阶段构建,运行阶段没有将该目录从构建层复制到运行层,容器运行时就没有可用的SP凭证;如果构建时使用root用户执行登录,运行阶段切换为普通用户,普通用户也无法读取root目录下的凭证文件,同样会导致认证失败。而你本地运行时如果启动命令附带了本地环境的Azure凭证相关环境变量、或者手动挂载了本地的.azure目录,就会出现本地正常、AKS运行无凭证的情况。 - Azure Key Vault的防火墙规则仅放行了你本地机器的公网出口IP,没有添加AKS集群的公网出口IP、或者AKS集群所在的虚拟网络段到Key Vault的允许访问列表,Key Vault的网络访问拦截直接返回403。
- AKS集群开启了工作负载身份/托管身份相关的默认配置,会给运行的Pod自动注入Azure身份相关的环境变量,Azure SDK的默认认证链优先级更高,会优先使用Pod绑定的托管身份去请求Key Vault,而该托管身份没有配置Key Vault的访问权限,你构建阶段写入的SP凭证反而不会被使用,最终触发无权限报错。
- 你使用的Service Principal配置了条件访问策略、或者Key Vault的访问策略/角色分配添加了IP限制、地域限制,仅允许你本地所在的网络环境使用该SP访问Key Vault,AKS集群所在的网络环境不在允许范围内,触发403。
- AKS集群节点的时间同步异常,和Azure官方服务的时间差超过5分钟,会导致Service Principal申请的访问令牌被判定为失效,认证失败后访问Key Vault返回403,本地机器时间同步正常所以不会触发该问题。
内容的提问来源于stack exchange,提问作者Tony Chan
相关产品推荐
相关产品推荐

