通过 RBAC 限制对 Kubernetes secret 的访问

Limit access to Kubernetes secret by RBAC

我已经设置了 Kubernetes 机密。

kubectl create secret generic mysecret --from-file=mysecret=/home/ubuntu/secret.txt

并且可以使用相同的 kubectl 命令将此机密转换为明文:

kubectl get secret mysecret -o yaml
# and base64 decode

如何限制对此机密的访问?我只想要某个 pods 并且只有我作为操作员才能访问这个秘密。

好的,所以你需要定义一个(集群)角色,然后将它绑定到你(== human user 是目标实体)and/or 到一个服务帐户(== app 是目标实体) 然后你 use in the pod 而不是 default 一个。

各自的 secretadmin 角色(或选择您喜欢的任何名称)看起来像这样(根据需要改变动词):

$ kubectl create clusterrole secretadmin \
          --verb=get --verb=list --verb=create --verb=update  \
          --resource=secret \
          --namespace=mysuperproject

定义角色后,您可以将其附加(或:绑定)到某个实体。让我们看一下服务帐户的情况(类似于人类用户,只是更简单)。因此,首先我们需要创建服务帐户,这里称为 thepowerfulapp,然后您将在 deployment/pod/whatever:

中使用它
$ kubectl -n mysuperproject create sa thepowerfulapp

现在是时候使用以下名为 canadminsecret

的绑定将所有内容绑定在一起
$ kubectl create clusterrolebinding canadminsecret \
          --role=secretadmin \
          --serviceaccount=mysuperproject:thepowerfulapp \
          --namespace=mysuperproject