默认 Config Sync 权限

本页面列出 Config Sync 及其组件需要具有的默认权限,以便在集群级层具有正确的访问权限。

默认权限

下表列出了 Config Sync 默认启用的权限。使用 Config Sync 时,不应停用这些权限。

组件 命名空间 服务账号 权限 说明
reconciler-manager config-management-system reconciler-manager cluster-admin 如需预配根协调器并为根协调器创建 ClusterRoleBinding,reconciler-manager 必须具有 cluster-admin 权限。
root reconcilers config-management-system 根协调器的名称 cluster-admin 如需应用集群级的自定义资源,根协调器必须具有 cluster-admin 权限。
namespace reconcilers config-management-system 命名空间协调器的名称 configsync.gke.io:ns-reconciler 如需获取和更新 RepoSync 和 ResourceGroup 对象及其状态,命名空间协调器需要具有 configsync.gke.io:ns-reconciler 权限。
resource-group-controller-manager config-management-system resource-group-sa 如需检查对象状态并启用主节点选举,resource-group-controller-manager 需要具有 resource-group-manager-roleresource-group-leader-election-role 角色。
admission-webhook config-management-system admission-webhook cluster-admin 如需拒绝对集群上任何对象的请求,准入网络钩子必须具有 cluster-admin 权限。
importer config-management-system importer cluster-admin 如需设置 RBAC 权限,importer 必须具有集群管理员权限。

Config Sync 特定权限

以下部分详细介绍了上表中列出的 configsync.gke.io:ns-reconcilerresource-group-manager-role resource-group-leader-election-role 权限。

Config Sync 通过在命名空间协调器和资源组控制器清单中添加以下 ClusterRole,来自动应用这些权限。

命名空间协调器的 RBAC

以下 ClusterRole 显示了命名空间协调器的基于角色的访问权限控制权限:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: configsync.gke.io:ns-reconciler
  labels:
    configmanagement.gke.io/system: "true"
    configmanagement.gke.io/arch: "csmr"
rules:
- apiGroups: ["configsync.gke.io"]
  resources: ["reposyncs"]
  verbs: ["get"]
- apiGroups: ["configsync.gke.io"]
  resources: ["reposyncs/status"]
  verbs: ["get","list","update"]
- apiGroups: ["kpt.dev"]
  resources: ["resourcegroups"]
  verbs: ["*"]
- apiGroups: ["kpt.dev"]
  resources: ["resourcegroups/status"]
  verbs: ["*"]
- apiGroups:
  - policy
  resources:
  - podsecuritypolicies
  resourceNames:
  - acm-psp
  verbs:
  - use

资源组控制器的 RBAC

以下 ClusterRole 显示了资源组控制器的基于角色的访问权限控制权限:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: null
  labels:
    configmanagement.gke.io/arch: "csmr"
    configmanagement.gke.io/system: "true"
  name: resource-group-manager-role
rules:
# This permission is needed to get the status for managed resources
- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - get
  - list
  - watch
# This permission is needed to watch/unwatch types as they are registered or removed.
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - get
  - list
  - watch
# This permission is needed so that the ResourceGroup controller can reconcile a ResourceGroup CR
- apiGroups:
  - kpt.dev
  resources:
  - resourcegroups
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
# This permission is needed so that the ResourceGroup controller can update the status of a ResourceGroup CR
- apiGroups:
  - kpt.dev
  resources:
  - resourcegroups/status
  verbs:
  - get
  - patch
  - update
# This permission is needed so that the ResourceGroup controller can work on a cluster with PSP enabled
- apiGroups:
  - policy
  resourceNames:
  - acm-psp
  resources:
  - podsecuritypolicies
  verbs:
  - use
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    configmanagement.gke.io/arch: "csmr"
    configmanagement.gke.io/system: "true"
  name: resource-group-leader-election-role
  namespace: resource-group-system
rules:  // The following permissions are needed so that the leader election can work
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - patch
  - delete
- apiGroups:
  - ""
  resources:
  - configmaps/status
  verbs:
  - get
  - update
  - patch
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - '*'