配置 Google RBAC 群组


本页面介绍如何设置 Google 群组,以便在 Google Kubernetes Engine (GKE) 集群中使用 Kubernetes 基于角色的访问权限控制 (RBAC)。

概览

借助 Google RBAC 群组,您可以为 Google Workspace 中的 Google 群组成员分配 RBAC 权限。您的 Google Workspace 管理员会完全在 GKE 或 Google Cloud 控制台之外维护用户和群组。因此,您的集群管理员不需要详细了解用户。

通过 Google RBAC 群组,您还可以集成现有的用户账号管理做法,例如,您可以撤消已离开组织的人员的访问权限。

如需使用 Google RBAC 群组,请完成以下任务:

  1. 满足要求
  2. 设置 Google 群组
  3. 在集群上启用 Google RBAC 群组
  4. 定义 Google 群组并为其分配 RBAC 权限

要求

如需使用 Google RBAC 群组,您必须有权访问 Google Workspace 或任何版本的 Cloud Identity

创建群组并将用户添加为成员时,请确保您了解 Google 群组限制

限制

  • 使用 Google RBAC 群组时,GKE 在安全群组下支持最多拥有 2000 个群组的成员资格(包括嵌套成员资格)的用户。

设置 Google 群组

以下步骤展示了如何在支持 RBAC 的 Google 群组中设置群组:

  1. 在您的网域中创建一个名为 gke-security-groups 的群组。gke-security-groups 名称为必填项。确保该群组为群组成员选择了查看成员权限。如需了解详情,请参阅设置管理成员和内容的权限

  2. 创建多个群组(如果它们尚不存在),以表示对集群具有不同权限的用户组,例如开发者和集群管理员。每个群组都必须具有群组成员查看成员权限。

  3. 将您的群组作为嵌套群组添加到 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

Standard

如需创建新的标准集群并启用 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 群组功能,请执行以下步骤:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 点击要使用的集群模式的配置

  4. 对于 Autopilot 集群,展开高级选项部分,找到安全选项。

  5. 对于标准集群,请在集群部分中点击安全

  6. 选中启用 Google RBAC 群组复选框。

  7. 安全组中,填入 gke-security-groups@DOMAIN

  8. 点击创建

更新现有集群

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 群组,请执行以下步骤:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击您要更新的集群的名称。

  3. 详细信息标签页上,找到安全部分。

  4. Google RBAC 群组字段中,点击 修改 Google RBAC 群组

  5. 选中启用 Google RBAC 群组复选框。

  6. 安全组中,填入 gke-security-groups@DOMAIN

  7. 点击保存更改

定义和分配权限

创建和配置 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 群组信息。

启用日志并运行测试命令

  1. 为您的 Google Cloud 项目启用数据访问日志记录。如需启用日志记录,请执行以下操作:

    1. 转到 Google Cloud 控制台中的审核日志页面。

      转到“审核日志”

    2. 在表格中,选择 Kubernetes Engine API

    3. 日志类型菜单中,选择:

      • 管理员读取
      • 数据读取
      • 数据写入
    4. 点击保存

    如需详细了解如何启用审核日志记录,请参阅使用 Cloud 控制台配置数据访问日志

  2. 在集群中使用 kubectl 运行命令,如下所示:

    kubectl create ns helloworld
    
  3. 日志浏览器页面中输入自定义查询。要运行查询,请执行以下操作:

    1. 转到 Google Cloud 控制台中的日志浏览器页面。

      转到日志浏览器

    2. 点击页面顶部的查询预览框中的箭头。

    3. 在显示的下拉框中,指定以下查询:

      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 账号的注册电子邮件地址。
    4. 选择运行查询。至少应显示一个结果。如果没有结果,请尝试增加时间范围。

    5. 选择要检查的集群。

    6. 点击展开嵌套字段

    7. 字段 protoPayload.request.spec.group 包含符合以下条件的群组:

      • 这些群组是 gke-security-group 的成员。
      • 您是该群组的成员。

      此列表应与您所属的群组集匹配。如果没有群组,则可能是因为群组的设置方式存在问题。

  4. (可选)将数据访问日志记录恢复为以前的设置,以免产生更多费用。

后续步骤