配置授权角色

本页面适用于基础架构运维者

本页面介绍在断开连接模式下运行的 Anthos 的授权角色、角色绑定和资源访问权限。

授权角色

在断开连接模式下运行的 Anthos 有四个预设的授权角色:

角色名称 Kubernetes ClusterRole 名称(在管理员集群上) 权限
基础架构运维者 anthos-infrastructure-operator 拥有对所有资源的完整读写权限。
基础架构运维者(只读) anthos-infrastructure-operator-read-only 拥有对 Anthos Management Center、ClusterRole/Role、ClusterRole/Role 绑定、自定义资源定义中的大多数内容的只读权限,以及对 Secret 的受限读取权限。

用户拥有对 Grafana 的写入权限,可修改信息中心。

平台管理员 anthos-platform-admin
  • 拥有对用户集群、Anthos 功能管理、Anthos Identity Service 和 Anthos Config Management 的读写权限。
  • 拥有对机器的读取和删除访问权限。
  • 拥有对 Bootstrap Service 和自定义资源定义的只读权限。
平台管理员(只读) anthos-platform-admin-read-only 拥有对平台管理员可以查看的所有内容的只读权限。

用户拥有对 Grafana 的写入权限,可修改信息中心。

有权访问 ADMIN_KUBECONFIG 的任何人会作为 Kubernetes system:master 群组中的成员进行身份验证,这允许对 Kubernetes API 服务器执行任何操作。例如,他们可以通过运行以下命令列出所有 Secret:

kubectl get secrets --all-namespaces --kubeconfig=${ADMIN_KUBECONFIG}

其中,${ADMIN_KUBECONFIG} 是管理员集群的 kubeconfig 文件的路径。

使用 ADMIN_KUBECONFIG 进行的访问会作为通用用户名 admin 进行身份验证,这使得难以跟踪运行该命令的人员。因此,务必将 ADMIN_KUBECONFIG 保存在安全的位置,并且仅在必要时才使用它(例如,在设置初始平台管理员角色绑定时或从 OIDC 故障中恢复时)。

Management Center 和指标访问

在断开连接模式下运行的 Anthos 会自动将绑定到这四个角色的所有用户同步到 Management Center 和指标 (Grafana) 的许可名单。

如果尝试在 Management Center 中执行写入操作,系统会拒绝具有只读访问权限的角色。

角色绑定

在 Management Center Console 中设置 OIDC 时,您可以设置与平台管理员角色绑定的初始用户。使用初始平台管理员用户的已登录 kubeconfig,可通过两种方法将其他用户绑定到平台管理员角色:

(推荐)在 OIDC 提供商中设置 GroupMembership 并根据群组创建角色绑定

此方法会将您的某个群组绑定到一个预设角色,从而向该群组中的所有成员授予与预设角色相同的访问权限。

准备工作

在开始前,请检查以下事项:

  • 确定群组来自的 OIDC 提供商。
  • OIDC 配置文件标签页中的群组声明字段必须与 OIDC 提供商端包含群组成员资格信息的声明名称相同。在断开连接模式下运行的 Anthos 会为此字段提供默认值 groups,但如果您的 OIDC 提供商具有不同的值,请确保已在 OIDC 配置文件标签页中设置它。
  • 记下 OIDC 配置文件标签页中的群组前缀。所有群组名称之前都必须包含群组前缀。例如,如果您的 OIDC 提供商将 gid- 作为群组前缀,将群组设为“admin-group”,则必须使用 gid-admin-group。请注意,- 分隔符是群组前缀的一部分,系统不会为您添加任何分隔符。

使用 Management Center Console 管理绑定

您可以使用 Management Center Console 中的访问权限标签页根据群组管理角色绑定。 在集群创建期间应用身份配置文件

您无法添加或更新一个具有比当前登录的帐号权限更高的角色绑定。例如,如果您以平台管理员身份登录,则无法将群组绑定到基础架构运维者角色。

使用 kubectl 管理绑定

或者,运行以下命令以根据群组创建角色绑定。传递给 group= 的值必须与您的 OIDC 提供商提供的群组名称相同,并带有群组前缀:

kubectl create clusterrolebinding anthos-platform-admin-group-binding \
--kubeconfig=ADMIN_OIDC_KUBECONFIG --clusterrole=anthos-platform-admin \
--group=gid-anthos-platform-admin-group

您在 OIDC 提供商中添加到 anthos-platform-admin-group 的任何用户现在都具有所有平台管理员权限。

同样,您可以使用以下命令将群组绑定到平台管理员(只读)角色:

kubectl create clusterrolebinding anthos-platform-admin-read-only-group-binding \
  --kubeconfig=ADMIN_OIDC_KUBECONFIG --clusterrole=anthos-platform-admin-read-only \
  --group=gid-anthos-platform-admin-read-only-group

为了防止提升权限 ,平台管理员无法将群组绑定到基础架构运维者或基础架构运维者(只读)角色。如需初始化第一个基础架构运维者群组,您需要 ADMIN_KUBECONFIG

kubectl create clusterrolebinding anthos-platform-operator-group-binding \
  --kubeconfig=${ADMIN_KUBECONFIG} --clusterrole=anthos-infrastructure-operator --group=gid-anthos-platform-operator-group

之后,您可以使用 KUBECONFIG已登录的基础架构运维者帐号将其他群组绑定到任何角色:

# Bind a group to infrastructure operator (read-only):
kubectl create clusterrolebinding anthos-platform-operator-read-only-binding \
  --clusterrole=anthos-infrastructure-operator-read-only --group=gid-anthos-platform-operator-read-only-group --kubeconfig=${ADMIN_OIDC_KUBECONFIG}

根据用户创建角色绑定

您还可以根据用户角色来创建角色绑定。根据用户创建角色绑定的命令与根据群组创建的命令相同。将 --group 替换为 --user

您还必须将 OIDC 配置文件的用户前缀附加到每个用户名。例如,如果您的 OIDC 提供商设置为具有用户前缀 uid-,并且您希望将 joedoe@example.com 绑定到角色,请使用 uid-joedoe@example.com

您还可以使用 Management Center Console 中的访问权限标签页来管理用户的角色绑定。

以下是用于为 charlie@example.com 创建角色绑定并向其授予平台管理员权限的示例命令:

kubectl create clusterrolebinding charlie-platform-admin-binding \
  --clusterrole=anthos-platform-admin --user=uid-charlie@example.com --kubeconfig=ADMIN_OIDC_KUBECONFIG

如需删除一个角色绑定以移除用户的访问权限,您可以更新现有的绑定而不是删除它们(例如,撤消 charlie@example.com 的平台管理员权限):

kubectl patch clusterrolebinding charlie-platform-admin-binding \
  -p '{"subjects":[]}' --kubeconfig=${ADMIN_OIDC_KUBECONFIG}

您还可以要求基础架构运维者删除 ClusterRoleBinding

备注

  • 如需详细了解授权,请参阅使用 RBAC 授权
  • 用户集群中未设置预设的授权角色。每个用户集群访问权限中的 Kubernetes API 服务器访问权限对具有 kubeconfig 的任何人开放。
  • 不允许平台管理员删除角色绑定,以防止平台管理员删除权限较高的特权用户的绑定。如需撤消用户的访问权限,您可以更新角色绑定以将用户绑定到空主题列表。 Management Center Console 的身份和访问权限页面中的删除操作也会将角色绑定更新为空主题列表,而不是出于同一原因删除绑定。
  • ClusterRoleBinding 资源的名称必须是唯一的。如果存在多个同名的集群角色绑定,则只有应用或创建的最新绑定才会生效。

每个预设角色的 Kubernetes 资源访问权限

本部分详细介绍了每个预设角色的所有 Kubernetes 资源访问权限。

基础架构运维者

基础架构运维者角色对应于 Kubernetes anthos-infrastructure-operator 角色,该角色可对任何资源执行任何动词。

基础架构运维者(只读)

基础架构运维者(只读)角色对应于 Kubernetes anthos-infrastructure-operator-read-only 角色,该角色可以读取此处列出的 ApiGroups 中的所有资源,并且对 Secret 拥有有限的读取权限。对 Secret 的读取权限仅限于在日志记录和监控的 kube-system 中具有 logmon 标签的管理员集群访问令牌、用户集群 kubeconfig 和 Secret。

ApiGroups 资源 动词
"" configmaps get, list, watch
"" endpoints get, list, watch
"" persistentvolumeclaims get, list, watch
"" persistentvolumeclaims/status get, list, watch
"" pod get, list, watch
"" replicationcontrollers get, list, watch
"" replicationcontrollers/scale get, list, watch
"" serviceaccounts get, list, watch
"" services get, list, watch
"" services/status get, list, watch
"" bindings get, list, watch
"" events get, list, watch
"" limitranges get, list, watch
"" namespaces/status get, list, watch
"" pods/log get, list, watch
"" pods/status get, list, watch
"" replicationcontrollers/status get, list, watch
"" resourcequotas get, list, watch
"" resourcequotas/status get, list, watch
"" namespaces get, list, watch
apiextensions.k8s.io customresourcedefinitions get, list, watch
apps * get, list, watch
autoscaling * get, list, watch
batch * get, list, watch
cert-manager.io * get, list, watch
extensions * get, list, watch
metrics.k8s.io * get, list, watch
networking.k8s.io * get, list, watch
policy * get, list, watch
rbac.authorization.k8s.io * get, list, watch
addons.gke.io * get, list, watch
authentication.gke.io * get, list, watch
baremetal.cluster.gke.io * get, list, watch
cluster.x-k8s.io * get, list, watch
managementcenter.anthos.cloud.google.com * get, list, watch

平台管理员

平台管理员角色具有以下访问权限:

资源 动词
namespaces get, list, watch, create, update
pod get, list, watch
services get, list, watch
events get, list, watch
configmaps get, list, watch
deployments get, list, watch
daemonsets get, list, watch
replicasets get, list, watch
statefulsets get, list, watch
jobs get, list, watch
cronjobs get, list, watch
memberships.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
onpremuserclusters.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
clusters.baremetal.cluster.gke.io get、list、watch、create
nodepools.baremetal.cluster.gke.io get、list、watch、create
clusters.cluster.x-k8s.io get, list, watch
machines.baremetal.cluster.gke.io get, list, watch
inventorymachines.baremetal.cluster.gke.io get, list, watch
addresspools.managementcenter.anthos.cloud.google.com get, list, watch
bootstrapservicebindings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
bootstrapservices.managementcenter.anthos.cloud.google.com get, list, watch
bootstrapservicebindingitems.managementcenter.anthos.cloud.google.com get, list, watch
adminoperators.managementcenter.anthos.cloud.google.com get, list, watch
clientconfigs.authentication.gke.io get, list, watch, create, update, delete
configmanagementbindings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
configmanagementfeaturespecs.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
configmanagementbindingitems.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
servicemeshbindings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
servicemeshfeaturespecs.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
servicemeshbindingitems.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
identityservicebindings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
identityservicefeaturespecs.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
identityservicebindingitems.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
updatablecomponents.managementcenter.anthos.cloud.google.com get, list, watch
domainconfigs.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
logmons.addons.gke.io get, list, watch, create, update, delete
clusterrolebindings.rbac.authorization.k8s.io get, list, watch, create, update
customresourcedefinitions.apiextensions.k8s.io get, list, watch

平台管理员拥有 secrets 的读取权限,使其能够获得以 cluster-admin 角色向用户集群进行身份验证的 kubeconfig。

平台管理员可以在 kube-system 中读取和写入带有 logmon 标签的 secretsconfigmaps,以配置 Logmon。

平台管理员(只读)

平台管理员(只读)角色与平台管理员具有相同的访问权限,但以下情况除外:

  • 所有与写入相关的动词(create、update 和 delete)未被授予。
  • 如需访问用户集群,平台管理员(只读)只能读取在用户集群中以 view 角色进行身份验证的 kubeconfig。

后续步骤