配置授权角色

授权角色

Anthos 不公开模式具备四个预设授权角色:

角色名称 Kubernetes ClusterRole 名称(在管理员集群上) 权限
Infrastructure Operator cluster-admin 拥有对所有资源的完整读写权限。
Infrastructure Operator (Read Only) 查看 拥有对管理中心大多数项目的只读权限,但角色、角色绑定和密钥除外。

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

Platform Admin anthos-platform-admin
  • 拥有对用户集群、Anthos 功能管理、Anthos 身份服务和 Anthos Config Management 的读写权限。
  • 拥有对机器的读取和删除访问权限。
  • 拥有对 Bootstrap Service 的只读权限。
Platform Admin

(只读)

anthos-platform-admin-read-only 拥有对 Platform Admin 可以查看的所有内容的只读权限。

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

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

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

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

重要提示:请确保用户和群组不带 system: 前缀。system: 前缀保留供 Kubernetes 系统使用。

Web 控制台和指标访问权限

Anthos 不公开模式会自动将绑定到这 4 个角色的所有用户同步到管理中心和指标 (Grafana) 访问权限。

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

角色绑定

在 Web 控制台中设置 OIDC 时,您可以设置与 Platform Admin 角色绑定的初始用户。使用初始 Platform Admin 用户的已登录 kubeconfig,可通过两种方法将其他用户绑定到 Platform Admin 角色:

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

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

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

您可以使用管理中心界面中的“访问权限管理”标签页来管理基于群组的角色绑定。在创建集群期间应用身份配置文件

您无法将权限添加或更新到具有比当前帐号权限更高的角色的角色绑定。例如,如果您以 Platform Admin 身份登录,则无法将群组绑定到 Infrastructure Operator 角色。

或者,运行以下命令以根据群组创建角色绑定。传递给 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 的任何用户都将拥有作为 Platform Admin 的所有权限

同样,您可以使用以下命令将群组绑定到 Platform Admin (Read Only) 角色:

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

为了防止权限升级,Platform Admin 无法将群组绑定到 Infrastructure Operator 或 Infrastructure Operator (Read Only) 角色。要初始化第一个 Infrastructure Operator 群组,您需要 ADMIN-KUBECONFIG

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

之后,您可以使用 KUBECONFIG 和已登录的 Infrastructure Operator 帐号将其他群组绑定到任何角色:

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

方法 II:根据用户创建角色绑定

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

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

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

下面是一个示例命令,用于为 charlie@example.com 创建角色绑定并为其授予 Platform Admin 权限:

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

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

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

您还可以要求 Platform Operator 删除 ClusterRoleBinding

最佳做法:Kubernetes 不会阻止拥有较低访问权限的用户删除拥有较高访问权限的用户的绑定,因此不会授予 Platform Admin 删除 ClusterRoleBinding 的权限。建议您使用 OIDC 提供商中的群组来管理用户,因为这让您可以从相应的群组中删除用户。

备注

  • 如需详细了解基于角色的访问权限控制 (RBAC),请参阅官方文档
  • 用户集群中未设置预设的授权角色。每个用户集群访问权限中的 Kubernetes API 服务器访问权限对具有 kubeconfig 的任何人开放。
  • 不允许 Platform Admin 删除角色绑定,以防止 Platform Admin 删除权限较高的特权用户的绑定。如需撤消用户的访问权限,您可以更新将用户绑定到空主题列表的角色绑定。 访问权限管理界面中的删除操作还会将角色绑定更新到空主题列表中,而不是出于相同的原因删除绑定。
  • ClusterRoleBinding 的名称必须是唯一的。当存在多个同名的集群角色绑定时,只有已应用/创建的最新绑定才会生效。

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

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

Infrastructure Operator

Infrastructure Operator 对应于 Kubernetes 内置的 cluster-admin 角色,该角色可对任何资源执行任何动词。

Infrastructure Operator (Read Only)

Infrastructure Operator (Read Only) 对应于 k8s 内置 view 角色,该角色可以读取 RoleClusterRoleRoleBindingClusterRoleBindingSecret 之外的所有资源。

由于用户集群 kubeconfig 等许多实用信息是以 Secrets 形式存储的,因此 Infrastructure Operator (Read Only) 不完全正常运行。

Platform Admin

Platform Admin 可以具有以下访问权限:

资源 动词
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
domainidpmappings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
domainidpmappings.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

Platform Admin 还拥有对 secrets 的读取访问权限,以允许他们获取以 cluster-admin 角色对用户群集进行身份验证的 kubeconfig。

Platform Admin 还可以在 kube-system 中读取和写入带有 logmon 标签的 secretsconfigmaps,以便配置 Logmon。

Platform Admin (Read Only)

Platform Admin (Read Only) 拥有与 Platform Admin 相同的访问权限,但以下情况除外:

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