使用返回“权限被拒绝”的 csi 驱动程序从 Vault 中检索机密
Posted
技术标签:
【中文标题】使用返回“权限被拒绝”的 csi 驱动程序从 Vault 中检索机密【英文标题】:Retrieve secrets from Vault using csi driver returning “permission denied” 【发布时间】:2021-08-23 16:08:44 【问题描述】:我可以使用 curl 获取令牌:
curl \
--request POST \
--data '"jwt": "'$TOKEN_REVIEW_SJWT'", "role": "teste-role"'\
http://<ip>:8200/v1/auth/kubernetes/login
我可以vault login <token>
并阅读秘密vault read secret/data/k8s-secret
。但是当我部署一个 pod 来测试它时,返回“permission denied”。
Warning FailedMount 103s (x23 over 32m) kubelet, <ip> MountVolume.SetUp failed for volume "secrets-store-inline" : rpc error: code = Unknown desc = failed to mount secrets store objects for pod csi/nginx-secrets-store-inline, err: rpc error: code = Unknown desc = error making mount request: couldn't read secret "k8s-secret": Error making API request.
URL: GET http://<vault-ip>:8200/v1/%!!(MISSING)E(MISSING)2%!C(MISSING)secret/data/k8s-secret%!!(MISSING)E(MISSING)2%!D(MISSING)
Code: 403. Errors:
* 1 error occurred:
* permission denied
Pod 状态:
kubectl get pods -n csi
NAME READY STATUS RESTARTS AGE
csi-secrets-store-csi-driver-4n789 3/3 Running 0 24h
csi-secrets-store-csi-driver-8zfbp 3/3 Running 0 10d
csi-secrets-store-csi-driver-b6hqv 3/3 Running 0 10d
vault-csi-provider-f488v 1/1 Running 0 11d
vault-csi-provider-l2982 1/1 Running 0 24h
vault-csi-provider-zztxb 1/1 Running 0 10d
要安装 Vault 提供程序和 csi 驱动程序:
helm install vault hashicorp/vault -n csi\
--set "server.enabled=false" \
--set "injector.enabled=false" \
--set "csi.enabled=true"
helm install csi secrets-store-csi-driver/secrets-store-csi-driver -n csi
Pod yaml 消费秘籍:
kind: Pod
apiVersion: v1
metadata:
name: nginx-secrets-store-inline
namespace: app
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: secrets-store-inline
mountPath: “/mnt/secrets-store”
readOnly: true
serviceAccountName: app-sa
volumes:
- name: secrets-store-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: vault-secret
【问题讨论】:
看起来秘密 csi 驱动程序没有足够的权限将您的秘密“k8s-secret”挂载到 pod。您确定驱动程序所需的 RBAC 已安装? 感谢@gohm'c 的回复。我使用 helm 安装了驱动程序。我创建了这个集群角色 github.com/kubernetes-sigs/secrets-store-csi-driver/blob/master/…,它与服务帐户 secrets-store-csi-driver 相关联。 您的外部秘密提供商是 AWS(通过查看您的标签来假设),您能否发布驱动程序 pod 的状态、您在安装期间设置的 helm 参数以及部署应用程序的 yaml消耗秘密? 我用@gohm'c 的答案编辑了这个问题。集群位于 EKS 中,保管库集群托管在 EC2 上。 【参考方案1】:当我从 SecretProviderClass 中删除双引号时,我能够创建 pod。
objects: |
- objectName: password
secretPath: secret/data/k8s-secret/
secretKey: password
【讨论】:
以上是关于使用返回“权限被拒绝”的 csi 驱动程序从 Vault 中检索机密的主要内容,如果未能解决你的问题,请参考以下文章
php cURL 到 localhost 返回在开放端口上被拒绝的权限
从 Google PubSub 中提取消息不起作用 - 权限被拒绝