简化 kubernetes RBAC 定义的创建

simplify creation of kubernetes RBAC definition

我想创建一个新的集群角色,它与 cluster-admin 基本相同,但用户无法:

1) 创建、修改或删除 PVs 2) 创建、修改或删除namespaces。 3) 防止查看、创建、修改、删除新的rbac权限。

我该怎么做?

我试图从 cluster-admin 角色中汲取灵感,但一切都被指定为 *

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

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

很遗憾,没有 "negative" 权限,因此您可以从所有权限(使用 *)开始,然后取消特定权限。如果您不想要集合中的 all 个项目(您可以用 * 指定),则必须枚举所有您想要的项目。

您可以通过以下方式找到资源及其 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 的完全权限