配置 Google RBAC 群组

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

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

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

本页面适用于希望在 GKE 集群中将 Google 群组与 Kubernetes RBAC 搭配使用的安全专家和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。

在阅读本页面之前,请确保您熟悉 Google 群组的限制,以便创建群组并将用户添加为成员。

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

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

要求

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

限制

  • 使用 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 \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

替换以下内容:

  • CLUSTER_NAME:新集群的名称。
  • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
  • DOMAIN:您创建的 gke-security-groups 群组的域名。

Autopilot

要创建新的 Autopilot 集群并启用 Google RBAC 群组,请运行以下命令:

gcloud container clusters create-auto CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

控制台

如需创建新的集群并启用 Google RBAC 群组功能,请执行以下步骤:

  1. 进入 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建。

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

  4. 在导航窗格中,点击高级设置,然后执行以下操作之一:

    • Autopilot:展开安全部分,选中启用 Google RBAC 群组复选框,然后使用 gke-security-groups@DOMAIN 填充安全组。
    • 标准:在 Google RBAC 群组行中,点击 修改配置,选中启用 Google RBAC 群组复选框,在安全组中填写 gke-security-groups@DOMAIN,然后点击保存。
  5. 点击创建。

更新现有集群

gcloud

如需更新现有集群以启用 Google RBAC 群组,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
  • 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 控制台中的 Logs Explorer 页面。

      转到日志浏览器

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

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

      resource.type="k8s_cluster"
      resource.labels.location="CLUSTER_LOCATION"
      resource.labels.cluster_name="CLUSTER_NAME"
      protoPayload.resourceName="authorization.k8s.io/v1/selfsubjectaccessreviews"
      protoPayload.authenticationInfo.principalEmail="EMAIL_ADDRESS"
      

      替换以下内容:

      • CLUSTER_LOCATION:您的集群所在的区域或可用区。
      • CLUSTER_NAME:您的集群的名称。
      • EMAIL_ADDRESS:您的 Google 账号的注册电子邮件地址。
    4. 选择运行查询。至少应显示一个结果。如果没有结果,请尝试增加时间范围。

    5. 选择要检查的集群。

    6. 点击展开嵌套字段。

    7. labels.authorization.k8s.io/decision 字段包含您的请求是被允许还是被拒绝的结果。

    8. labels."authorization.k8s.io/reason" 字段包含 Google 群组的名称。此群组是 gke-security-group 的成员,并且映射到用于确定访问权限的 Kubernetes 群组。

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

删除群组的影响

为 RBAC 配置 Google 群组后,您的 RBAC 访问权限授予取决于您创建的 Google 群组是否存在。请考虑删除其中一个群组会产生以下影响:

  • gke-security-group:GKE 使用 gke-security-group 群组的唯一 ID 来查找您在 RBAC 政策中引用的主题。如果您删除此群组,则所有 Google RBAC 群组的访问权限授予都会失败。

    如果您重新创建 gke-security-group 群组,则必须按照更新现有集群部分中的步骤,在集群上重新启用 Google RBAC 群组。重新启用 Google RBAC 群组会将集群更新为使用新 gke-security-group 群组的群组 ID。

  • 成员组:如果您删除为 Google RBAC 群组配置的某个成员组,则该群组的所有 RBAC 绑定都会失败。因此,相应群组的所有成员都会失去相应访问权限。

    如需修正因意外而删除的成员群组,请创建一个与已删除群组名称完全相同的新群组。按照设置 Google 群组部分中的步骤,将新群组设为 gke-security-group 群组的成员。

后续步骤