简化 kubernetes RBAC 定义的创建
simplify creation of kubernetes RBAC definition
我想创建一个新的集群角色,它与 cluster-admin
基本相同,但用户无法:
1) 创建、修改或删除 PV
s
2) 创建、修改或删除namespace
s。
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
中并将 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 组和资源的列表。
该定义有四个规则可以实现您想要的:
- 只有 PV 和命名空间的读取权限
- 对核心 API 组中的所有其他资源(PV 和命名空间除外)的完全权限
- 除核心和 *.authorization.k8s.io 之外的所有 API 组的完全权限(*.authorization.k8s.io 根本没有权限)
- 所有非资源 URL 的完全权限
我想创建一个新的集群角色,它与 cluster-admin
基本相同,但用户无法:
1) 创建、修改或删除 PV
s
2) 创建、修改或删除namespace
s。
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
中并将 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 组和资源的列表。
该定义有四个规则可以实现您想要的:
- 只有 PV 和命名空间的读取权限
- 对核心 API 组中的所有其他资源(PV 和命名空间除外)的完全权限
- 除核心和 *.authorization.k8s.io 之外的所有 API 组的完全权限(*.authorization.k8s.io 根本没有权限)
- 所有非资源 URL 的完全权限