Kubernetes 的开发速度较快,经常会有新的安全功能供您使用。本文档介绍如何强化 Google Distributed Cloud 集群。
本指南首先介绍重要安全措施,这些措施需要您在创建集群时执行相关操作。不太重要的功能、默认安全的设置以及可在创建集群后启用的功能会在文档后面介绍。如需大致了解安全主题,请参阅安全。
核对清单
以下部署核对清单强调了强化 GKE 集群平台部署安全性的最佳做法。如需详细了解每种做法,请参阅本文档中的各个部分。
部署核对清单 | 说明 |
---|---|
身份和访问权限控制 | 使用 vSphere 账号权限: 保护 Google Cloud 服务账号的安全: 配置 OpenID Connect (OIDC): 使用 Kubernetes 命名空间和 RBAC 限制访问权限: |
数据保护 | 加密 vSphere 虚拟机: 管理 Secret: |
网络保护 | 限制对控制平面和节点的网络访问: 使用网络政策来限制流量: |
声明式安全 | 使用 Policy Controller: |
维护 | 升级: 监控安全公告: |
监控和日志记录 | 设置日志记录选项: |
身份和访问权限控制
本部分介绍了如何控制对集群的访问权限。
使用 vSphere 账号权限
您用于安装 Google Distributed Cloud 的 vCenter 用户账号必须具有足够的权限。例如,被分配了 vCenter 的 Administrator 角色的用户账号拥有对所有 vCenter 对象的完整访问权限,并向 Google Distributed Cloud 集群管理员提供完整访问权限。
建议使用最小权限原则,仅授予成功安装 {product_name} 所需的必要权限。我们预定义了执行安装所需的最小权限集以及授予这些权限所需的命令。
保护 Google Cloud 服务账号的安全
Google Distributed Cloud 需要多个Google Cloud 服务账号。在安装期间,您将 Identity and Access Management 角色绑定到这些服务账号。这些角色会向服务账号授予在您项目中的特定权限。某些服务账号可以在安装期间为您生成。
为集群用户配置身份验证
如需为集群配置用户身份验证,可以使用 OpenID Connect (OIDC) 或轻量级目录访问协议 (LDAP)。
如需了解详情,请参阅 GKE Identity Service。
使用 Kubernetes 命名空间和 RBAC 限制访问权限
如需向团队授予对 Kubernetes 的最低访问权限,请创建 Kubernetes 命名空间或特定于环境的集群。为每个命名空间分配成本中心和适当的标签,以实现责任的明晰化和退款。仅为开发者提供部署和管理应用(特别是在生产环境中)所需的访问权限级别,允许其对命名空间进行访问。
划分用户需要对集群执行的任务,并定义完成每项任务所需的权限。如需授予集群级层和命名空间级层的权限,请使用 Kubernetes RBAC。
除了Google Cloud 服务账号用于安装 Google Distributed Cloud 的权限之外,IAM 不适用于 Google Distributed Cloud 集群。
如需了解详情,请参阅以下文档:
数据保护
本部分提供有关保护数据的信息。
加密 vSphere 虚拟机
Google Distributed Cloud 集群节点在 vSphere 集群中的虚拟机 (VM) 上运行。Google 强烈建议您对所有静态数据进行加密。如需在 vSphere 上执行此操作,请遵循 VMware vSphere 7 安全配置和安全加固指南以及加密虚拟机的最佳做法指导。
此操作必须在安装 Google Distributed Cloud 之前完成。
管理密文
如需为敏感数据(例如存储在 etcd 中的 Kubernetes Secret)提供额外保护,请配置与 Google Distributed Cloud 集群集成的 Secret 管理器。
如果您在多个环境中运行工作负载,则可能更适合使用同时适用于 Google Kubernetes Engine 和 Google Distributed Cloud 的解决方案。如果您选择使用 HashiCorp Vault 等外部 Secret 管理器,请在集成 Google Distributed Cloud 集群之前设置该管理器。
您可以通过多种方式来管理 Secret。
- 您可以在 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 集群使用方式的插件。准入控制器是强化集群安全性的深度防御方法的重要组成部分。
最佳做法是使用 Policy Controller。Policy Controller 使用 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
维护
本部分介绍了如何维护集群。
升级 Google Distributed Cloud
Kubernetes 经常引入新的安全功能并提供安全补丁程序。
您需要确保您的 Google Distributed Cloud 集群保持最新状态。对于每个版本,请查看版本说明。此外,请规划更新,每个月更新到最新的补丁程序版本,每三个月更新到次要版本。了解如何升级集群。
此外,您还需负责升级和保护 vSphere 基础设施:
- 建立及时修补和升级虚拟机的流程。
- 及时了解最新的 VMware 安全建议
- 按照将补丁程序应用于主机中的指导进行操作
监控安全公告
GKE 安全团队会针对严重程度为“高”和“严重”的漏洞发布安全公告。
这些公告遵循通用的 Google Cloud 漏洞编号方案,并且在 Google Cloud 公告主页和 Google Distributed Cloud 版本说明中提供链接。每个安全公告页面都有一个 RSS 源,供用户订阅更新。
如果需要客户操作才能解决这些严重程度为高和严重的漏洞,Google 会通过电子邮件与客户联系。此外,Google 可能还会通过支持渠道就支持合同事宜联系客户。
如需了解详情,请参阅以下文档:
监控和日志记录
Google Distributed Cloud 包含多种集群日志记录和监控选项,其中包括云端托管式服务、开源工具,以及经过验证的与第三方商业解决方案的兼容性。
- Cloud Logging 和 Cloud Monitoring,由使用 Google Distributed Cloud 部署的集群内代理启用
- 经过验证且适用于第三方解决方案的配置
无论您基于业务要求选择哪种日志记录解决方案,我们强烈建议您将转发相关事件和提醒记录到集中式安全信息和事件管理 (SIEM) 服务中,以管理安全突发事件。
如需了解详情,请参阅以下文档:
- 日志记录和监控
- 使用日志记录和监控功能
- 应用日志记录和监控功能
- 使用 Elastic Stack 监控 Google Distributed Cloud
- 将日志从 Google Cloud 流式传输到 Splunk