我想创建一个新的群集角色,该角色基本上与cluster-admin
相同,但用户无法执行以下操作:
1)创建,修改或删除PV
2)创建,修改或删除namespace
。3)禁止查看,创建,修改,删除新的rbac权限。
我该怎么做?
我正试图从cluster-admin
角色中汲取灵感,但所有内容均指定为*
。
您需要为每个资源创建规则,如下所示
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]
很遗憾,没有“负”权限,因此您可以从所有权限(带有*
)开始,然后取消特定的权限。如果您不希望集合中的[[all个项目(可以用*
指定),则必须枚举所有想要的项目。
kubectl api-resources
在您的情况下,PV和名称空间在核心API组中,而RBAC资源在rbac.authorization.k8s.io
API组中。因此,仅需要在这两个API组中枚举要为其授予权限的所有资源。关于所有其他API组,您只需将它们列出在单个RBACrule
中,然后将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" - 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组和资源的列表。