本页面适用于基础架构运维者。
本页面介绍在断开连接模式下运行的 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-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
标签的 secrets
和 configmaps
,以配置 Logmon。
平台管理员(只读)
平台管理员(只读)角色与平台管理员具有相同的访问权限,但以下情况除外:
- 所有与写入相关的动词(create、update 和 delete)未被授予。
- 如需访问用户集群,平台管理员(只读)只能读取在用户集群中以
view
角色进行身份验证的 kubeconfig。