关于 Autopilot 模式下的特权工作负载准入

您可以使用许可名单和政策来控制哪些特权工作负载可以在 Google Kubernetes Engine (GKE) Autopilot 模式下运行。本文档介绍了 Autopilot 对工作负载强制执行的默认限制、您可以在 Autopilot 模式下运行的特权工作负载类型,以及控制特权工作负载准入的方法。

本文档适用于以下人员:

  • 希望在 Autopilot 模式下运行来自各种来源的特权 GKE 工作负载的平台管理员和运维人员。
  • 身份和账号管理员,他们希望通过屏蔽除特定工作负载之外的所有特权工作负载来提高组织的安全状况。

Autopilot 模式下的特权工作负载简介

为了提高安全状况,Autopilot 模式集群和节点默认会强制执行特定的安全限制。例如,Autopilot 会拒绝容器中将 spec.securityContext.privileged 字段设置为 true 的大多数 Pod。Autopilot 中的特权工作负载是指不符合这些默认限制条件的工作负载。默认情况下, Google Cloud组织中的 Autopilot 节点会拒绝特权工作负载。

只有当集群具有与特定特权工作负载相匹配的许可名单时,这些工作负载才能在 Autopilot 模式下运行。集群管理员创建或修改集群时,可以指定集群可运行的许可名单的路径。默认情况下,每个 Google Cloud 组织都支持来自 Autopilot 合作伙伴和经过验证的开源项目的许可名单。

组织管理员可以使用组织政策服务,通过以下方式修改此默认行为:

  • 允许来自 GKE Autopilot 合作伙伴的所有工作负载和经过验证的开源工作负载。这是所有Google Cloud 组织的默认行为。
  • 允许特定合作伙伴工作负载或经过验证的开源工作负载。
  • 仅允许特定的客户自有特权工作负载。
  • 拒绝所有特权工作负载。

这种先拒绝所有内容,然后再允许部分内容的方法是一种安全最佳实践,可让您精确控制哪些内容在 GKE 集群中以提升的权限运行。

在以下情况下,您可能需要在 Autopilot 模式下控制特权工作负载:

特权 Autopilot 工作负载的来源

下表列出了可在 Autopilot 中运行的特权工作负载类型:

特权工作负载类型
Autopilot 合作伙伴工作负载

部分 Google Cloud 合作伙伴会提供可用于 Autopilot 模式的特权工作负载。GKE 会验证这些合作伙伴工作负载。任何客户都可以使用这些工作负载。默认情况下,任何客户都可以在任何 Autopilot 或 Standard 集群中安装相应的许可名单。

如需详细了解可用的合作伙伴工作负载,请参阅 Autopilot 合作伙伴

开源工作负载

特定特权开源工作负载具有许可名单,可让您在 Autopilot 模式下运行这些工作负载。GKE 会验证这些工作负载。默认情况下,任何客户都可以在任何 Autopilot 或 Standard 集群中安装相应的许可名单。

如需详细了解可用的开源工作负载,请参阅在 GKE Autopilot 上运行特权开源工作负载

客户拥有的工作负载

如果您是符合条件的客户,并且有想要在 Autopilot 节点中运行的特权工作负载,则可以为这些工作负载创建许可名单。默认情况下,所有 Google Cloud 组织都已停用此功能。您可以使用组织政策服务为特定工作负载添加许可名单路径,然后更新集群以安装这些许可名单。

如需了解详情,请参阅客户自有特权工作负载部分。

特权工作负载准入控制的运作方式

如需允许特定特权工作负载在 Autopilot 节点中运行,您需要安装与每个工作负载对应的许可名单。这些许可名单是 WorkloadAllowlist Kubernetes 自定义资源。GKE 会根据集群中的任何 WorkloadAllowlist 验证工作负载详细信息,并且仅在详细信息匹配时才允许准入。默认情况下,组织中的每个 Autopilot 集群或 Standard 集群都允许您为 Autopilot 合作伙伴工作负载和开源工作负载安装 WorkloadAllowlists。 Google Cloud

概括来讲,在 Autopilot 节点中运行特权工作负载涉及以下步骤:

  1. 组织管理员验证 container.managed.autopilotPrivilegedAdmission 受管理的组织政策限制条件是否允许从特定来源安装许可名单。如需了解详情,请参阅有关许可名单的组织政策受管限制条件部分。
  2. 对于客户拥有的特权工作负载,平台管理员会创建与特权工作负载匹配的许可名单。如需了解详情,请参阅客户自有特权工作负载部分。
  3. 集群管理员配置 Autopilot 或 Standard 集群,以允许从特定来源安装许可名单。如需了解详情,请参阅集群配置部分。
  4. 集群管理员创建一个引用许可名单路径的 AllowlistSynchronizer。AllowlistSynchronizer 会安装许可名单并保持许可名单最新状态。如需了解详情,请参阅许可名单安装部分。

完成这些步骤后,应用操作员可以在集群中部署特权工作负载。

针对许可名单的组织政策受管限制条件

默认情况下,每个 Google Cloud 组织都会强制执行基于container.managed.autopilotPrivilegedAdmission 受管理限制条件的组织政策。此限制条件定义了一组文件或目录路径,GKE 集群可以从中安装许可名单。集群配置必须使用此限制条件参数中的许可名单路径。

默认情况下,autopilotPrivilegedAdmission 限制条件允许使用经批准的 GKE 合作伙伴和开源项目拥有的所有许可名单。此设置与 GKE 集群的默认配置相符,后者可以安装任何已获批准的许可名单。

作为组织政策管理员,您可以修改可应用于组织、文件夹或项目中的 GKE 集群的许可名单路径集。例如,如需允许使用组织拥有的自定义许可名单,您可以将该许可名单路径添加到受管理的限制条件中。

受管理的限制参数

autopilotPrivilegedAdmission 受管限制具有以下规范:

spec:
  rules:
  - enforce: true
    parameters:
      allowAnyGKEPath: ALLOW_GKE_PATHS
      allowPaths:
      - PATH1
      - PATH2
      - PATH3

规范中的以下字段用于控制集群可使用的许可名单集:

  • allowAnyGKEPath:一个布尔值,用于控制集群是否可以使用 GKE 批准的默认许可名单路径集。此参数支持以下值:

    • True:集群管理员可以配置集群,而无需修改许可名单配置,只需使用以 gke:// 开头的一个或多个许可名单路径,或者使用空字符串来停用集群的所有许可名单。此参数的默认值为 True

    • False:集群管理员必须使用空字符串为许可名单来源配置集群,或者使用 allowPaths 参数中的任何许可名单路径来配置集群。

  • allowPaths:已获批准的许可名单来源列表,集群管理员在配置集群时可以从中指定值。您可以指定特定许可名单文件的路径或整个目录的路径。

下表介绍了以不同方式配置这些参数的结果:

allowAnyGKEPath allowPaths 结果
True 为空或未指定。

集群管理员可以在集群创建或修改期间执行以下任意操作:

  • 使用默认许可名单配置:省略任何许可名单配置选项,以便集群可以从具有 gke:// 前缀的任何路径安装许可名单。
  • 停用许可名单安装:为集群许可名单配置指定一个空值。
  • 指定 GKE 许可名单路径:指定一个或多个具有 gke:// 前缀的许可名单路径。集群只能从这些路径安装许可名单。
False 为空或未指定。

集群管理员必须为集群许可名单配置指定一个空值。如果集群管理员跳过许可名单路径配置,则集群创建或修改会失败。

True 指定了值。

集群管理员可以在集群创建或修改期间执行以下任意操作:

  • 使用默认许可名单配置:省略任何许可名单配置选项,以便集群可以从具有 gke:// 前缀的任何路径安装许可名单。
  • 停用许可名单安装:为集群许可名单配置指定一个空值。
  • 指定许可名单路径:指定一个或多个具有 gke:// 前缀或在 allowPaths 参数中指定的许可名单路径。
False 指定了值。

集群管理员必须在创建或修改集群期间执行以下操作之一:

  • 停用许可名单安装:为集群许可名单配置指定一个空值。
  • 指定许可名单路径:通过 allowPaths 参数指定一个或多个许可名单路径。

如需详细了解如何在组织政策中控制特权工作负载准入,请参阅限制组织中的特权 GKE 工作负载

客户拥有的特权工作负载

作为 GKE 客户,您可能拥有自己的专业工作负载,这些工作负载需要在集群中获得比默认 Autopilot 安全限制所允许的更高的权限。在 GKE 1.35 版及更高版本中,您可以通过创建许可名单,将这些工作负载从默认的 Autopilot 限制中排除。

许可名单是一个 YAML 文件,用于定义 WorkloadAllowlist Kubernetes 自定义资源。WorkloadAllowlist 的规范与 Kubernetes Pod 规范中的各种字段相匹配。定义 WorkloadAllowlist 时,您需要将 WorkloadAllowlist 中的值与特权工作负载规范中的相应字段进行匹配。您需要将 YAML 文件存储在 Cloud Storage 存储桶中。

如需在集群中安装这些客户自有许可名单,必须执行以下步骤:

  1. 组织管理员将 Cloud Storage 路径添加到组织政策。如需了解详情,请参阅关于组织政策受管理的限制条件部分。
  2. 您需要将 Cloud Storage 路径添加到集群配置中。如需了解详情,请参阅集群配置部分。

如需详细了解如何创建自己的 WorkloadAllowlist,请参阅为特权 Autopilot 工作负载创建许可名单

集群配置

如需在 Autopilot 模式下运行特权工作负载,集群管理员需要向集群配置添加一个或多个已获批准的许可名单路径。将路径添加到集群后,应用运维人员可以在集群中安装相应的许可名单和特权工作负载。

默认情况下,您可以安装来自 Autopilot 合作伙伴和获批的开源项目的许可名单。由于组织政策,许可名单的这组默认获批来源可能会发生变化,如上一部分所述。如果组织政策控制着已获批准的许可名单路径,您必须与组织管理员协调,以确定这些路径。然后,您可以在集群配置中指定一个或多个获批的路径。

如需详细了解如何配置集群,请参阅在 Autopilot 中运行特权工作负载

将安装列入许可名单

如需在集群中安装来自已获批准的来源的许可名单,您可以使用名为 AllowlistSynchronizer 的 Kubernetes 自定义资源。您定义和创建 AllowlistSynchronizer 的方式与创建其他 Kubernetes 资源(例如 Pod 和 Deployment)类似。每个 AllowlistSynchronizer 都包含一个路径列表,其中列出了您要在集群中安装的许可名单。

创建 AllowlistSynchronizer 后,GKE 会从这些路径安装许可名单,并使许可名单保持最新状态。GKE 会每 10 分钟检查一次许可名单文件的更改。如果存在更新,同步器会在集群中安装更新后的许可名单。

在 GKE 根据 AllowlistSynchronizer 安装许可名单后,您可以在集群中创建相应的特权工作负载。

如需详细了解如何在集群中安装许可名单,请参阅在 Autopilot 中运行特权工作负载

列入许可清单的路径

在组织政策或集群中配置许可名单支持时,您需要指定一个或多个已获批准可供安装的 WorkloadAllowlist 的路径。这些路径的语法取决于工作负载许可名单的创建者,如下所示:

  • 特定 Autopilot 合作伙伴和已获批的开源项目:

    gke://REPOSITORY_PATH/SELECTOR
    

    替换以下内容:

    例如,以下路径会选择 Grafana/alloy 目录中的任何许可名单:

    gke://Grafana/alloy/*
    
  • 客户自有特权工作负载

    gs://DIRECTORY_PATH/SELECTOR
    

    DIRECTORY_PATH 替换为 Cloud Storage 中包含许可名单文件的目录的路径。您可以指定多个路径。

您可以在组织政策或集群配置中指定上述一个或多个路径。例如,您可以将 GKE 合作伙伴工作负载和客户自有工作负载添加到同一配置中。您还可以使用 * 字符选择所有许可名单。例如,gke://* 会从任何来源中选择任何 GKE 批准的许可名单。

下表介绍了组织政策或集群中需要哪些配置才能实现特定目标:

目标 组织政策配置 集群配置
允许所有 GKE 批准的 WorkloadAllowlist 执行以下操作:
  1. allowAnyGKEPath 形参设置为默认值 True
  2. allowPaths 参数留空。
执行下列其中一项操作:
  • 请勿为集群配置许可名单。默认情况下,所有集群都允许安装 GKE 批准的工作负载许可名单。
  • 为集群配置许可名单时,请仅指定 gke://* 作为获批路径。
仅允许特定的 GKE 批准的工作负载许可名单 执行以下操作:
  1. allowAnyGKEPath 参数设置为 False
  2. allowPaths 参数中指定特定 GKE 批准的 WorkloadAllowlists 的路径。
在创建或更新集群时,指定特定 GKE 批准的工作负载许可名单的路径。组织政策可能会限制您可以指定的 GKE 批准的路径。
仅允许客户管理的 WorkloadAllowlists 执行以下操作:
  1. allowAnyGKEPath 参数设置为 False
  2. allowPaths 参数中指定客户管理的工作负载许可名单的路径。
在创建或更新集群时,指定客户管理的 WorkloadAllowlists 的路径。您指定的路径必须位于组织政策的 allowPaths 参数中。
防止使用 WorkloadAllowlists 执行以下操作:
  1. allowAnyGKEPath 参数设置为 False
  2. allowPaths 参数留空。
在创建或更新集群时,将获批路径设置为空字符串 ""

后续步骤