强化集群的安全性

Kubernetes 的开发速度较快,经常会有新的安全功能供您使用。本文档介绍了如何强化 Google Distributed Cloud 集群的安全。

本指南首先介绍重要安全措施,这些措施需要您在创建集群时执行相关操作。不太重要的功能、默认安全的设置以及可在创建集群后启用的功能会在文档后面介绍。如需大致了解安全主题,请参阅安全

核对清单

以下部署核对清单强调了强化 GKE 集群平台部署安全性的最佳做法。如需详细了解每种做法,请参阅本文档中的各个部分。

部署核对清单 说明
身份和访问权限控制

使用 vSphere 账号权限
使用具有最小权限的 vSphere 管理员账号。

保护 Google Cloud 服务账号的安全
尽可能减小 Google Cloud 服务账号权限。

配置 OpenID Connect (OIDC)
配置 OpenID Connect 以进行用户身份验证。

使用 Kubernetes 命名空间和 RBAC 限制访问权限
将命名空间与 RBAC 搭配使用以实现管理隔离和最小权限角色和权限。

数据保护

加密 vSphere 虚拟机
设置 vSphere 以加密 Google Distributed Cloud 使用的卷。

管理密文
加密静态密文。

网络保护

限制对控制层面和节点的网络访问
设置控制措施以隔离和保护控制层面网络和节点。

使用网络政策来限制流量
实施网络政策以限制集群内流量。

声明式安全

使用 Policy Controller
在集群中安装政策控制器,以管理声明式安全政策。

维护

升级 GKE Enterprise
确保您运行的是适用于您的平台的最新版 GKE Enterprise。

监控安全公告
查看 GKE Enterprise 安全公告,获取关于版本控制的最新建议和指导。

监控和日志记录

设置 GKE 集群日志记录选项
确保日志记录已启用并集成到 SIEM 解决方案中。

身份和访问权限控制

本部分介绍如何控制对集群的访问权限。

使用 vSphere 账号权限

用于安装 Google Distributed Cloud 的 vCenter 用户帐号必须具有足够的权限。例如,分配了 vCenter 的管理员角色的用户帐号具有对所有 vCenter 对象的完整访问权限,并为 Google Distributed Cloud 集群管理员提供完全访问权限。

建议使用最小权限原则,仅授予成功安装 GKE Enterprise 所需的必要权限。我们预定义了执行安装所需的最小权限集以及授予这些权限所需的命令。

保护 Google Cloud 服务账号的安全

Google Distributed Cloud 需要三个 Google Cloud 服务帐号

  • 用于访问 Google Distributed Cloud 软件的预定义服务帐号。您可以在购买 GKE Enterprise 时创建此账号。
  • 注册服务帐号,供 Connect 用于向 Google Cloud 注册 Google Distributed Cloud 集群。
  • Cloud Logging 服务账号,用于收集集群日志以供 Cloud Logging 使用。

在安装期间,您将 Identity and Access Management 角色绑定到这些服务账号。这些角色会向服务账号授予在您项目中的特定权限,并且可以在安装期间为您生成。

为集群用户配置身份验证

如需为集群配置用户身份验证,可以使用 OpenID Connect (OIDC)轻量级目录访问协议 (LDAP)

如需了解详情,请参阅 GKE Identity Service

使用 Kubernetes 命名空间和 RBAC 限制访问权限

如需为团队提供对 Kubernetes 的最低访问权限,请创建 Kubernetes 命名空间或特定于环境的集群。为每个命名空间分配成本中心和适当的标签,以实现责任的明晰化和退款。仅为开发者提供部署和管理应用(特别是在生产环境中)所需的访问权限级别,允许其对命名空间进行访问。

划分用户需要对集群执行的任务,并定义完成每项任务所需的权限。如需授予集群级层和命名空间级层的权限,请使用 Kubernetes RBAC

除了用于安装 Google Distributed Cloud 的 Google Cloud 服务帐号的权限之外,IAM 不适用于 Google Distributed Cloud 集群。

如需了解详情,请参阅以下文档:

数据保护

本部分介绍了如何保护您的数据。

加密 vSphere 虚拟机

Google Distributed Cloud 集群节点在 vSphere 集群中的虚拟机上运行。Google 强烈建议您对所有静态数据进行加密。如需在 vSphere 上执行此操作,请遵循 VMware vSphere 7 安全配置和加固指南以及有关加密虚拟机的最佳实践指南。

此操作必须在安装 GKE Enterprise 之前完成。

管理密文

如需为敏感数据(例如存储在 etcd 中的 Kubernetes Secret)提供额外保护,请配置与 Google Distributed Cloud 集集群成的 Secret 管理器。

如果您在多个环境中运行工作负载,则可能更适合使用同时适用于 Google Kubernetes Engine 和 Google Distributed Cloud 的解决方案。如果您选择使用外部 Secret 管理器(例如 HashiCorp Vault),请在集成 Google Distributed Cloud 集群之前设置。

您可以通过多种方式来管理密文。

  • 您可以在 Google Distributed Cloud 中以原生方式使用 Kubernetes Secret。如前文所述,我们希望集群针对虚拟机使用 vSphere 加密,为 Secret 提供基本的静态加密保护。默认情况下,Secret 不会进一步加密。
  • 您可以使用外部 Secret 管理器,例如 HashiCorp Vault。您可以使用 Kubernetes 服务账号或 Google Cloud 服务账号向 HashiCorp 进行身份验证。

如需了解详情,请参阅以下文档:

网络保护

本部分介绍了如何保护您的网络。

限制对控制平面和节点的网络访问

限制集群控制层面和节点向互联网的公开程度。创建集群后,无法更改这些选项。默认情况下,Google Distributed Cloud 集群节点是使用 RFC 1918 地址创建的,最佳做法是不要更改此设置。在本地网络中实施防火墙规则,以限制对控制层面的访问。

使用网络政策来限制流量

默认情况下,Google Distributed Cloud 集群中的所有 Service 都可以相互通信。如需了解如何根据工作负载的需要控制服务间通信,请参阅以下部分。

限制网络对服务的访问权限可以大大增加攻击者在集群中横向移动的难度,可以保护服务免遭意外的或故意的拒绝服务攻击。建议使用以下两种方法来控制流量:

  • 如需控制到应用端点的 L7 流量,请使用 Istio。如果您对负载均衡、服务授权、节流、配额和指标感兴趣,请选择此方法。
  • 如需控制 pod 之间的 L4 流量,请使用 Kubernetes 网络政策。如果您需要 Kubernetes 管理的基本访问权限控制功能,请选择此方法。

您可以在创建 Google Distributed Cloud 集群后同时启用 Istio 和 Kubernetes 网络政策。如有需要,您可以同时使用它们。

如需了解详情,请参阅以下文档:

声明式安全

本部分提供有关保护集群的建议。

使用 Policy Controller

Kubernetes 准入控制器是负责管理和实施 Kubernetes 集群使用方式的插件。准入控制器是强化集群安全性的深度防御方法的重要组成部分。

最佳做法是使用政策控制器。政策控制器使用 OPA 限制条件框架将政策描述和强制执行为 CRD。您希望应用于集群的限制是在集群中部署的限制模板中定义的。

如需了解如何使用政策控制器限制条件来实现与 PodSecurityPolicies 相同的许多保护措施,以及在强制执行政策前对其进行测试的功能,请参阅使用限制条件来强制执行 Pod 安全

如需了解详情,请参阅以下文档:

限制工作负载自行修改的能力

某些 Kubernetes 工作负载(尤其是系统工作负载)有权执行自行修改。例如,某些工作负载会自行纵向自动扩缩。虽然很方便,但这会使得已入侵节点的攻击者能够在集群中进行进一步的操作。例如,攻击者可能会使节点上的工作负载自行更改,以将其作为在同一命名空间内具有更高权限的服务账号运行。

理想情况下,不应从一开始就授予工作负载自行修改的权限。如果确实需要自行修改,您可以通过应用 Gatekeeper 或 Policy Controller 限制条件来限制这些权限,例如您可以使用 Gatekeeper 开源库中提供的 NoUpdateServiceAccount,此外该库还提供了许多其他有用的安全政策。

部署政策时,通常需要允许管理集群生命周期的控制器绕过政策以及日志记录和监控流水线。这样控制器才能更改集群,例如应用集群升级。例如,如果您在 Google Distributed Cloud 上部署 NoUpdateServiceAccount 政策,则必须在 Constraint 中设置以下参数:

parameters:
  allowedGroups:
  - system:masters
  allowedUsers:
  - system:serviceaccount:kube-system:monitoring-operator
  - system:serviceaccount:kube-system:stackdriver-operator
  - system:serviceaccount:kube-system:metrics-server-operator
  - system:serviceaccount:kube-system:logmon-operator

维护

本部分介绍如何维护集群。

升级 GKE Enterprise

Kubernetes 经常引入新的安全功能并提供安全补丁程序。

您有责任确保 Google Distributed Cloud 集群保持最新状态。对于每个版本,请查看版本说明。此外,请规划更新,每个月更新到最新的补丁程序版本,每三个月更新到次要版本。了解如何升级集群

此外,您还需负责升级和保护 vSphere 基础架构:

监控安全公告

GKE Enterprise 安全团队会针对严重程度为“高”和“严重”的漏洞发布安全公告

这些公告采用常见的 Google Cloud 漏洞编号方案,并且 Google Cloud 公告主页面和 Google Distributed Cloud 版本说明提供了相应链接。每个安全公告页面都有一个 RSS 源,供用户订阅更新。

如果需要客户操作才能解决这些严重程度为高和严重的漏洞,Google 会通过电子邮件与客户联系。此外,Google 可能还会通过支持渠道就支持合同事宜联系客户。

如需了解详情,请参阅以下文档:

监控和日志记录

Google Distributed Cloud 提供多种集群日志记录和监控选项,包括云端代管式服务、开源工具,以及经过验证的与第三方商业解决方案的兼容性:

  • Cloud Logging 和 Cloud Monitoring,由使用 Google Distributed Cloud 部署的集群内代理启用
  • 经过验证且适用于第三方解决方案的配置

无论您基于业务要求选择哪种日志记录解决方案,我们强烈建议您将转发相关事件和提醒记录到集中式安全信息和事件管理 (SIEM) 服务中,以管理安全突发事件。

如需了解详情,请参阅以下文档: