本页面介绍如何设置 Google 群组,以便在 Google Kubernetes Engine (GKE) 集群中使用 Kubernetes 基于角色的访问权限控制 (RBAC)。
概览
借助 Google RBAC 群组,您可以为 Google Workspace 中的 Google 群组成员分配 RBAC 权限。您的 Google Workspace 管理员会完全在 GKE 或 Google Cloud 控制台之外维护用户和群组。因此,您的集群管理员不需要详细了解用户。
通过 Google RBAC 群组,您还可以集成现有的用户账号管理做法,例如,您可以撤消已离开组织的人员的访问权限。
如需使用 Google RBAC 群组,请完成以下任务:
使用要求
如需使用 Google RBAC 群组,您必须有权访问 Google Workspace 或任何版本的 Cloud Identity。
创建群组并将用户添加为成员时,请确保您了解 Google 群组限制。
限制
- 使用 Google RBAC 群组时,GKE 在安全群组下支持最多拥有 2000 个群组的成员资格(包括嵌套成员资格)的用户。
设置 Google 群组
以下步骤展示了如何在支持 RBAC 的 Google 群组中设置群组:
在您的网域中创建一个名为
gke-security-groups
的群组。gke-security-groups
名称为必填项。确保该群组为群组成员选择了查看成员权限。如需了解详情,请参阅设置管理成员和内容的权限。创建多个群组(如果它们尚不存在),以表示对集群具有不同权限的用户组,例如开发者和集群管理员。每个群组都必须具有群组成员的查看成员权限。
将您的群组作为嵌套群组添加到
gke-security-groups
群组。请勿将单个用户添加为gke-security-groups
的成员。
如需详细了解如何管理 Google 群组,请参阅 Google 群组帮助中心。
为了检查特定用户是否可以对集群资源执行操作,GKE 会检查该用户是否是具有访问权限的群组的成员,以及该群组是否嵌套在 gke-security-groups
群组中。
Google 群组成员资格的相关信息会缓存一小段时间。群组成员资格的更改可能需要几分钟才能传播到您的所有集群。除了群组更改带来的延迟之外,集群上的用户凭据的标准缓存时间约为 1 小时。
在集群上启用 Google RBAC 群组
您可以使用 Google Cloud CLI 或 Google Cloud 控制台在新的和现有的 GKE 标准和 Autopilot 集群上启用 Google RBAC 群组。
创建新集群
gcloud
标准版
如需创建新的标准集群并启用 Google RBAC 群组,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \
--region=COMPUTE_REGION \
--security-group="gke-security-groups@DOMAIN"
替换以下内容:
CLUSTER_NAME
:新集群的名称。COMPUTE_REGION
:新集群的 Compute Engine 地区。对于区域级集群,请使用--zone=COMPUTE_ZONE
。DOMAIN
:您创建的gke-security-groups
群组的域名。
Autopilot
要创建新的 Autopilot 集群并启用 Google RBAC 群组,请运行以下命令:
gcloud container clusters create-auto CLUSTER_NAME \
--region=COMPUTE_REGION \
--security-group="gke-security-groups@DOMAIN"
控制台
如需创建新的集群并启用 Google RBAC 群组功能,请执行以下步骤:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
点击要使用的集群模式的配置。
对于 Autopilot 集群,展开高级选项部分,找到安全选项。
对于标准集群,请在集群部分中点击安全。
选中启用 Google RBAC 群组复选框。
在安全组中,填入
gke-security-groups@DOMAIN
。点击创建。
更新现有集群
gcloud
如需更新现有集群以启用 Google RBAC 群组,请运行以下命令:
gcloud container clusters update CLUSTER_NAME \
--region=COMPUTE_REGION \
--security-group="gke-security-groups@DOMAIN"
替换以下内容:
CLUSTER_NAME
:集群的名称。COMPUTE_REGION
:集群的 Compute Engine 地区。对于区域级集群,请使用--zone=COMPUTE_ZONE
。DOMAIN
:您创建的gke-security-groups
群组的域名。
控制台
如需更新现有集群以启用 Google RBAC 群组,请执行以下步骤:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击您要更新的集群的名称。
在详细信息标签页上,找到安全部分。
在 Google RBAC 群组字段中,点击 edit 修改 Google RBAC 群组。
选中启用 Google RBAC 群组复选框。
在安全组中,填入
gke-security-groups@DOMAIN
。点击保存更改。
定义和分配权限
创建和配置 Google RBAC 群组后,请使用角色和角色绑定来定义 RBAC 权限,并将这些权限分配给属于 gke-security-groups
群组的 Google 群组。如需了解相关说明,请参阅定义和分配权限。
验证 Google RBAC 群组配置
以下部分介绍了如何使用 gcloud CLI 或 Google Cloud 控制台验证 Google RBAC 群组配置是否成功。
使用 gcloud CLI 进行验证
运行 kubectl can-i
命令,检查您是否可以对特定 Kubernetes 资源执行特定操作。在 CI/CD 工作流中,您可以使用此方法自动测试 RBAC 访问权限。例如,以下命令测试是否可以 get
dev
命名空间中的 pods
资源访问权限:
kubectl auth can-i get pods \
--namespace=dev \
--as=USER \
--as-group=GROUP
请替换以下内容:
USER
:要模拟的用户的名称,例如gke-user@example.com
。指定的用户必须是您要测试其访问权限的群组的成员。GROUP
:要模拟的实例群组的名称,例如gke-dev-users@example.com
。
如果 USER
有权访问权限,则输出为 yes
。否则,输出为 no
。
使用 Google Cloud 控制台进行验证
您还可以通过对集群运行 kubectl 命令并检查日志来验证 RBAC 访问权限。
准备工作
在开始之前,请确保满足以下条件:
- 您至少有一个小时未与要测试的集群进行交互(例如,您未运行任何
kubectl
命令)。身份验证信息会缓存一小时。通过使缓存的凭据过期,您可以确保在发生请求时记录请求。 - 您是至少一个属于
gke-security-groups
群组的群组的成员,这确保会记录某些 Google 群组信息。
启用日志并运行测试命令
为您的 Google Cloud 项目启用数据访问日志记录。如需启用日志记录,请执行以下操作:
转到 Google Cloud 控制台中的审核日志页面。
在表格中,选择 Kubernetes Engine API。
在日志类型菜单中,选择:
- 管理员读取
- 数据读取
- 数据写入
点击保存。
如需详细了解如何启用审核日志记录,请参阅使用 Cloud 控制台配置数据访问日志。
在集群中使用
kubectl
运行命令,如下所示:kubectl create ns helloworld
在日志浏览器页面中输入自定义查询。要运行查询,请执行以下操作:
转到 Google Cloud 控制台中的日志浏览器页面。
点击页面顶部的查询预览框中的箭头。
在显示的下拉框中,指定以下查询:
resource.type="k8s_cluster" resource.labels.location="CLUSTER_LOCATION" resource.labels.cluster_name="CLUSTER_NAME" protoPayload.resourceName="authorization.k8s.io/v1beta1/subjectaccessreviews" protoPayload.response.spec.user="EMAIL_ADDRESS"
替换以下内容:
CLUSTER_LOCATION
:您的集群所在的区域或可用区。CLUSTER_NAME
:您的集群的名称。EMAIL_ADDRESS
:您的 Google 账号的注册电子邮件地址。
选择运行查询。至少应显示一个结果。如果没有结果,请尝试增加时间范围。
选择要检查的集群。
点击展开嵌套字段。
字段
protoPayload.request.spec.group
包含符合以下条件的群组:- 这些群组是
gke-security-group
的成员。 - 您是该群组的成员。
此列表应与您所属的群组集匹配。如果没有群组,则可能是因为群组的设置方式存在问题。
- 这些群组是
(可选)将数据访问日志记录恢复为以前的设置,以免产生更多费用。