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

自定义命名空间下从Enterprise Vault取密钥报403权限拒绝求助

解决Enterprise Vault自定义命名空间下密钥获取403 Permission Denied问题

问题概况

在K8s集群k8ns命名空间部署Enterprise Vault后,创建Vault自定义命名空间vaultns,配置Kubernetes认证并绑定ACL策略,应用尝试读取kv/data/a/product/system/database路径的密钥时,返回403 Forbidden错误,报错信息:{"errors":["permission denied"]}。

核心问题与修复步骤

1. KV引擎挂载路径与密钥存储路径不匹配

启用KV v2引擎时指定了path=kv,但存储密钥时错误使用了secret/路径,导致密钥实际存储位置与应用请求路径不匹配。

错误命令:

kubectl exec hashicorp-vault-0 -- vault kv put -namespace=vaultns secret/a/product/system/database username=system password=R@spb3rry123

修复命令:

kubectl exec hashicorp-vault-0 -n k8ns -- vault kv put -namespace=vaultns kv/a/product/system/database username=system password=R@spb3rry123

2. ACL策略路径未适配KV v2引擎API格式

KV v2引擎的API请求路径为/v1/<mount-path>/data/<secret-path>,对应的Vault策略路径需要包含data层级,当前策略无法匹配请求路径。

错误策略:

path "kv/*"
{
  capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}

修复后策略:

# 匹配KV v2的密钥读写路径
path "kv/data/*"
{
  capabilities = ["create", "read", "update", "delete"]
}

# 匹配KV v2的密钥列表查询路径(若需要列表权限)
path "kv/metadata/*"
{
  capabilities = ["list"]
}

更新策略后,需确保角色关联的策略已同步:

kubectl exec hashicorp-vault-0 -n k8ns -- vault policy write -namespace=vaultns k8s_test - <<EOF
path "kv/data/*"
{
  capabilities = ["create", "read", "update", "delete"]
}
path "kv/metadata/*"
{
  capabilities = ["list"]
}
EOF

3. Kubernetes认证配置与角色绑定优化

  • 角色创建命令补全命名空间:避免在默认命名空间执行,确保指向正确的Vault Pod:
kubectl exec hashicorp-vault-0 -n k8ns -- vault write -namespace=vaultns auth/kubernetes/role/product bound_service_account_names=hashicorp-vault bound_service_account_namespaces=k8ns policies=k8s_test ttl=1h
  • 修正Kubernetes认证配置的集群地址:使用K8s集群默认的API服务地址,而非命名空间级地址,避免认证失败:
kubectl exec hashicorp-vault-0 -n k8ns -- vault write -namespace=vaultns auth/kubernetes/config token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" kubernetes_host=https://kubernetes.default.svc kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt issuer="https://kubernetes.default.svc.cluster.local"

4. 手动验证权限(关键排查步骤)

使用应用关联的服务账户令牌手动登录Vault,验证权限是否正常:

# 获取应用服务账户令牌(假设使用hashicorp-vault服务账户)
TOKEN=$(kubectl get secret $(kubectl get sa hashicorp-vault -n k8ns -o jsonpath='{.secrets[0].name}') -n k8ns -o jsonpath='{.data.token}' | base64 -d)

# 使用Kubernetes认证登录Vault
kubectl exec hashicorp-vault-0 -n k8ns -- vault login -namespace=vaultns -method=kubernetes role=product jwt=$TOKEN

# 尝试读取密钥
kubectl exec hashicorp-vault-0 -n k8ns -- vault kv get -namespace=vaultns kv/a/product/system/database

如果手动读取成功,说明权限配置正确,问题可能出在应用侧的请求逻辑(如令牌获取、命名空间传递异常)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:06:00