首页 > 解决方案 > kubernetes 列表权限是否允许获取集合中的单个对象

问题描述

下面的角色是否允许获取bar命名空间中所有秘密的内容,还是只允许获取名为 的秘密foo?我不明白文档的意思

列表(用于集合,包括完整的对象内容)

在这种情况下,“完整对象内容”是什么意思?

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: fooer
  namespace: bar
rules:
  - apiGroups: [""]
    resources: [secrets]
    verbs: [list]
  - apiGroups: [""]
    resources: [secrets]
    verbs: [get, watch]
    resourceNames: ["foo"]

谢谢

标签: kubernetesrbac

解决方案


角色特定于namespace. 所以yaml实际上应该看起来像

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: role
  namespace: default
rules:
  - apiGroups: [""]
    resources: [secrets]
    verbs: [list]

---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: role-binding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: role
subjects:
- kind: ServiceAccount
  name: default
  namespace: default

对于集合(例如秘密)list意味着对列表下所有资源的许可。因此,您可以使用以下命令获取具有上述角色的所有机密

kubectl get secrets --as=system:serviceaccount:default:default -n default -o yaml

但你不能单独使用每个秘密

kubectl get secrets/default-token-bwk2x --as=system:serviceaccount:default:default -n default -o yaml
Error from server (Forbidden): secrets "default-token-bwk2x" is forbidden: User "system:serviceaccount:default:default" cannot get resource "secrets" in API group "" in the namespace "default"

包括完整的对象内容意味着所有对象的内容都在该列表下,如您使用上面的第一个命令所见。

kubernetes 列表权限是否允许获取集合中的单个对象

不,不是的。您只能获取列表中所有项目的完整聚合内容,但不能单独获取每个项目的内容。


推荐阅读