仅Vault Enterprise环境出现Vault Sidecar Injector权限被拒绝问题
排查修复方案
- 首先确认K8s集群的实际OIDC Issuer,不要写死默认值。执行命令
kubectl get --raw /.well-known/openid-configuration | jq -r .issuer获取真实Issuer,重新配置K8s认证:
vault write auth/kubernetes/config \ token_reviewer_jwt="$TOKEN_REVIEW_JWT" \ kubernetes_host="$KUBE_HOST" \ kubernetes_ca_cert="$KUBE_CA_CERT" \ issuer="<替换为上面命令输出的真实Issuer>" \ disable_iss_validation="true" \ disable_local_ca_jwt="true"
- 检查HCP Vault集群的IP白名单配置,确认你的K8s集群的出口公网IP已经加入白名单,HCP Vault默认会拦截未加入白名单的IP请求,返回403错误。
- 补充Sidecar的认证路径注解,确认和你启用K8s认证的路径匹配,完整注解配置如下:
vault.hashicorp.com/namespace: "admin" vault.hashicorp.com/auth-path: "auth/kubernetes" vault.hashicorp.com/role: "default-demo-managed" # 替换为你实际创建的K8s角色名
- 确认你的Workload使用的服务账号配置正确:检查default命名空间下是否存在名为
demo-managed的服务账号,且该服务账号已经绑定到你部署的应用实例上。 - 不要使用内置的hcp-root策略测试,换成你自己创建的admin策略绑定K8s角色:
vault write auth/kubernetes/role/${NAMESPACE}-${RELEASE_NAME} bound_service_account_names=${RELEASE_NAME} bound_service_account_namespaces=${NAMESPACE} policies=admin ttl=1h
- 手动验证K8s认证是否可用:取任意该服务账号的Token,执行如下命令测试登录,看是否能正常返回Vault Token:
kubectl create token demo-managed --namespace default > sa.token curl --request POST --data '{"jwt": "'$(cat sa.token)'", "role": "default-demo-managed"}' https://vault-cluster.vault.c1c633fa-91ef-4e86-b025-4f31b3f14730.aws.hashicorp.cloud:8200/v1/admin/auth/kubernetes/login
如果上述请求返回403,说明K8s认证配置本身存在问题,和Sidecar注入无关,优先修复认证配置即可。
内容的提问来源于stack exchange,提问作者Adiii
相关产品推荐
相关产品推荐

