限制RBAC访问Kubernetes的秘密

ene*_*enq 4 rbac kubernetes

我已经设置了Kubernetes的秘密.

kubectl create secret generic mysecret --from-file=mysecret=/home/ubuntu/secret.txt
Run Code Online (Sandbox Code Playgroud)

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

kubectl get secret mysecret -o yaml
# and base64 decode
Run Code Online (Sandbox Code Playgroud)

如何限制访问此秘密?我只想要一些豆荚,只有我作为操作员才能访问这个秘密.

Mic*_*las 6

好的,所以你需要定义一个(集群)角色,然后将它绑定到你(==人类用户是目标实体)和/或服务帐户(== app是目标实体),然后你在pod而不是那个default.

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

$ kubectl create clusterrole secretadmin \
          --verb=get --verb=list --verb=create --verb=update  \
          --resource=secret \
          --namespace=mysuperproject
Run Code Online (Sandbox Code Playgroud)

一旦定义了角色,就可以将它附加(或绑定)到某个实体.让我们来看看服务帐户的情况(类似于人类用户,更简单).首先,我们需要创建一个服务帐户,这里thepowerfulapp您将在部署/ pod /中使用该帐户:

$ kubectl -n mysuperproject create sa thepowerfulapp
Run Code Online (Sandbox Code Playgroud)

现在是时候将所有内容与下面的绑定绑定在一起了 canadminsecret

$ kubectl create clusterrolebinding canadminsecret \
          --role=secretadmin \
          --serviceaccount=mysuperproject:thepowerfulapp \
          --namespace=mysuperproject
Run Code Online (Sandbox Code Playgroud)

  • `--namespace` 标志是不必要的,因为您正在创建 clusterrole/clusterrolebindings,这些资源不绑定到名称空间,它们创建集群范围的访问控制。 (4认同)
  • 难道任何能够在“mysuperproject”命名空间中创建 Pod 的用户都能够将 Secret 挂载到容器中并看到它吗? (3认同)
  • 是的@giorgiosironi,这是 Kubernetes 中 RBAC 的一个已知限制,如果它能更细粒度,能够处理单个资源而不是命名空间/种类级别,那就太好了。另请参阅 Vallery Lancey 和 Seth McCombs 发表的精彩 KubeCon 演讲,他们讨论了上述问题:https://www.youtube.com/watch?v=TZ73EBP2a9Q (2认同)