无法读取 Vault 机密 - 使用 Vault Sidecar Injector

Unable to read Vault secrets - using Vault Sidecar Injector

无法使用以下设置读取存储在路径 /secrets/apims/ABC_CONFIG 的 Vault 中的秘密

在 Vault 中创建的策略:

  vault policy write policy_name - <<EOF
    path "secret/apims/*" {
      capabilities = ["read"]
    }

在 Vault 中创建的角色

vault write auth/kubernetes/role/role_name\
    bound_service_account_names=service_account_name \
    bound_service_account_namespaces=default \
    policies=policy_name \
    ttl=24h

在外部保险库上使用 Kubernetes 保险库 sidecar 注入器。在 Kubernetes 上的部署看起来像

apiVersion: "apps/v1"
kind: "Deployment"
metadata:
  name: "nginx-5"
  namespace: "default"
  labels:
    app: "nginx-5"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: "nginx-5"
  template:
    metadata:
      annotations: 
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/agent-inject-secret-credentials.conf: secret/ABC_CONFIG
        vault.hashicorp.com/role: role_name
      labels:
        app: "nginx-5"
    spec:
      containers:
      - name: "nginx-5"
        image: "nginx:latest"
      serviceAccountName: service_account_name

虽然 Kubernetes 已通过 Vault 成功授权,但读取特定密钥失败并显示 403。

感谢您的帮助。

看起来 Vault 角色中定义的服务帐户和角色名称与部署中的不匹配。

  • 服务帐号=service_account_name
  • 角色 = role_name
vault write auth/kubernetes/role/role_name\
    bound_service_account_names=service_account_name \
    bound_service_account_namespaces=default \
    policies=policy_name \
    ttl=24h
  • 服务帐户 = sa-vault-auth
  • 角色 = apims
spec:
  replicas: 1
  selector:
    matchLabels:
      app: "nginx-5"
  template:
    metadata:
      annotations: 
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/agent-inject-secret-credentials.conf: secret/ABC_CONFIG
        vault.hashicorp.com/role: apims 
      labels:
        app: "nginx-5"
    spec:
      containers:
      - name: "nginx-5"
        image: "nginx:latest"
      serviceAccountName: sa-vault-auth 
...

这还假设 policies=policy_name 是您最初在 Vault 中创建的策略的名称。