我想创建一个新的群集角色,该角色与cluster-admin
基本相同,但是用户无法执行以下操作:
1)创建,修改或删除PV
2)创建,修改或删除namespace
。
3)禁止查看,创建,修改,删除新的rbac权限。
我该怎么做?
我正试图从cluster-admin
角色中汲取灵感,但一切都与*
相同。
答案 0 :(得分:1)
不幸的是,没有“负”权限,因此您可以从所有权限(使用*
)开始,然后取消特定的权限。如果您不希望集合中的所有所有项目(可以用*
指定),则必须枚举所需的所有项目。
您可以通过以下方式找到资源及其API groups的完整列表:
kubectl api-resources
对于您来说,PV和名称空间在核心API组中,而RBAC资源在rbac.authorization.k8s.io
API组中。因此,仅需要在这两个API组中枚举要为其授予权限的所有资源。关于所有其他API组,您只需将它们列出在一个RBAC rule
中,然后将resources
和verbs
设置为*
。
您的ClusterRole定义可能类似于以下内容(但是,集群中API组和资源的确切集合可能有所不同)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: my-cluster-admin
rules:
# Read permissions for PVs and namespaces in the core API group
- apiGroups: [""]
resources: [persistentvolumes, namespaces]
verbs: [get, list]
# Full permissions for all other resources in the core API group
- apiGroups: [""]
resources: [bindings, componentstatuses, configmaps, endpoints, events, limitranges, nodes, persistentvolumeclaims, pods, podtemplates, replicationcontrollers, resourcequotas, secrets, serviceaccounts, services]
verbs: ['*']
# Full permissions for all API groups except "core" and "*.authorization.k8s.io"
- apiGroups: [admissionregistration.k8s.io, apiextensions.k8s.io, apiregistration.k8s.io, apps, authentication.k8s.io, autoscaling, batch, certificates.k8s.io, coordination.k8s.io, crd.k8s.amazonaws.com, events.k8s.io, extensions, monitoring.coreos.com, networking.k8s.io, policy, scheduling.k8s.io, storage.k8s.io]
resources: ['*']
verbs: ['*']
# Full permissions for all non-resource URLs
- nonResourceURLs: ['*']
verbs: ['*']
您可以通过对kubectl api-resources
的输出进行一些文本操作来生成API组和资源列表。
定义中有四个规则可以实现您想要的:
答案 1 :(得分:0)
您需要为每个资源创建规则,如下所示
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]