简化kubernetes RBAC定义的创建

时间:2019-10-29 05:43:15

标签: kubernetes yaml roles rbac

我想创建一个新的群集角色,该角色与cluster-admin基本相同,但是用户无法执行以下操作:

1)创建,修改或删除PV 2)创建,修改或删除namespace。 3)禁止查看,创建,修改,删除新的rbac权限。

我该怎么做?

我正试图从cluster-admin角色中汲取灵感,但一切都与*相同。

2 个答案:

答案 0 :(得分:1)

不幸的是,没有“负”权限,因此您可以从所有权限(使用*)开始,然后取消特定的权限。如果您不希望集合中的所有所有项目(可以用*指定),则必须枚举所需的所有项目。

您可以通过以下方式找到资源及其API groups的完整列表:

kubectl api-resources

对于您来说,PV和名称空间在核心API组中,而RBAC资源在rbac.authorization.k8s.io API组中。因此,仅需要在这两个API组中枚举要为其授予权限的所有资源。关于所有其他API组,您只需将它们列出在一个RBAC rule中,然后将resourcesverbs设置为*


您的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. 仅PV和名称空间的读取权限
  2. 核心API组中所有其他资源(PV和命名空间除外)的完全权限
  3. 除核心和* .authorization.k8s.io之外,所有API组的完整权限(根本没有对* .authorization.k8s.io的权限)
  4. 所有非资源URL的完全权限

答案 1 :(得分:0)

您需要为每个资源创建规则,如下所示

rules:
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["get", "list", "watch"]