使用返回“权限被拒绝”的 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 &lt;token&gt; 并阅读秘密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 中提取消息不起作用 - 权限被拒绝

将图像从 Firefox 应用程序共享到我的应用程序时出现权限被拒绝异常

对象“驱动程序”的插入权限被拒绝

IE9 ajax保存权限被拒绝

使用服务帐户凭据模式的 Firebase 分发 android 应用程序的权限被拒绝