CIS 基准


本页面介绍了 Google Kubernetes Engine (GKE) 为提高对 Kubernetes 和 GKE 的互联网安全中心 (CIS) 基准的遵从性所采用的方法。本页面包含以下信息:

  • 我们如何配置托管式 GKE 控制平面以符合 CIS Kubernetes 基准
  • 如何配置 GKE 节点和工作负载以符合 CIS Google Kubernetes Engine (GKE) 基准

CIS 基准简介

CIS 发布了以下基准,其中包含 Kubernetes 的安全配置准则:

  • CIS Kubernetes 基准:适用于开源 Kubernetes 项目。旨在为各种自行管理和托管的 Kubernetes 实现提供指导。
  • CIS GKE 基准:为您在 GKE 集群中可以控制的组件的安全配置制定了准则。包括特定于 GKE on Google Cloud的建议。

我们建议您优先考虑 CIS GKE 基准,因为它特定于 GKE on Google Cloud。CIS Kubernetes 基准包含许多有关您无法在 GKE 中查看或修改的控制措施的建议。我们的集群安全方法包括超出开源 Kubernetes 基准范围并且可能会与这些建议发生冲突的缓解措施。

适用于 GKE 的其他基准

除了 CIS GKE 基准和 CIS Kubernetes 基准之外,以下基准也适用于 GKE 中可用的操作系统。即使特定的操作系统基准未明确提及 Kubernetes 用量,您也应参考该基准以获取更多安全指导。

默认容器运行时环境 containerd 没有基准。

责任共担模型

根据 GKE 共担责任模型,我们会为您管理以下组件:

  • 控制平面,包括控制平面虚拟机、API 服务器以及 etcd、kube-controller-manager 和 kube-scheduler 等组件。
  • 节点操作系统。

这些组件存在于 GKE 所拥有的项目中,因此您无法根据相应的 CIS 基准控制机制修改或评估这些组件。但是,您可以评估和修复适用于工作器节点和工作负载的所有 CIS 基准控制机制。根据 GKE 共担责任模型,这些组件由您负责。

我们在 CIS 基准中保护 GKE 的方法

GKE 是开源 Kubernetes 的托管式实现。我们完全管理控制平面,并负责保护控制平面组件的配置。下表介绍了我们做出的一些可能影响 CIS 基准得分的决策:

GKE 安全方法
身份验证
  • 一些 GKE 监控组件使用匿名身份验证来获取指标。
  • 一些控制平面组件使用静态令牌启动,然后这些令牌被用于向 API 服务器进行身份验证。这些令牌会在每次启动或重启虚拟机时生成。
准入控制器

GKE 会停用以下准入控制器:

  • EventRateLimit:这是 Kubernetes 中的 Alpha 版功能
  • AlwaysPullImages:此控制器为非合作多租户集群中的私有注册表映像提供一定程度的保护,但代价是使映像注册表在集群中创建新 pod 时出现单点故障。
  • SecurityContextDenyPod 安全准入控制器是首选,可在所有 GKE 版本中使用。 如果您使用 GKE Enterprise,则还可以使用 Policy Controller 启用 Pod 安全标准的强制执行。
  • ImagePolicyWebhook:GKE 默认会停用 ImagePolicyWebhook,因为它有自己的映像管理和安全机制。这可让 GKE 对环境进行更严格的控制,并确保其安全实践得到一致应用。 不过,您可以使用 Binary Authorization 或 Policy Controller 进行政策管理。
审核日志记录 GKE 使用 GKE 审核政策捕获审核日志。因此,我们无需设置任何 Kubernetes API 服务器审核日志记录标志。
调试 GKE 使用性能剖析进行调试。
加密
kubelet
  • GKE 会启用未经身份验证的 kubelet 只读端口。您可以通过设置 --no-autoprovisioning-enable-insecure-kubelet-readonly-port 来停用该端口。在未来的版本中,只读端口将默认处于停用状态,以便您有时间进行迁移。
  • 在 GKE Standard 模式下,您的工作负载可以根据需要修改内核默认设置。
  • GKE 会限制 kubelet 中的 Kubernetes 事件数量,以降低拒绝服务攻击的风险。
  • GKE 使用 mTLS 来保护 kubelet 和 API 服务器之间的流量。
  • GKE 默认会轮替服务器证书,并在启用安全强化型 GKE 节点时轮替客户端证书。
  • GKE 使用 Golang 默认的允许加密集,该加密集也是 Kubernetes 的默认加密集。

根据 CIS 基准评估 GKE

您可以使用以下方法之一,根据基准自动对集群进行评估:

  • CIS GKE 基准:

    • 所有 GKE 版本
      • 运行 kube-bench 以根据基准评估工作器节点。如需了解详情,请参阅 kube-bench GitHub 代码库
      • 使用 Twistlock Defender 等第三方工具,根据基准评估节点。
    • GKE Enterprise 版本:使用合规性信息中心评估所有集群是否符合 CIS GKE 基准。如需了解详情,请参阅 GKE 合规性信息中心简介
  • CIS Kubernetes 基准:运行 kube-bench 以根据基准评估工作器节点。您无法根据基准中的建议评估托管式控制平面。

后续步骤