Kubernetes 的开发速度较快,经常会有新的安全功能供您使用。本页面将指导您完成当前指南中的操作,以增强 GKE On-Prem 集群的安全性。
本指南优先介绍需要您在创建集群时执行相关操作的重要安全措施。不太重要的功能、默认安全的设置以及可在创建后启用的功能会在后面介绍。如需大致了解安全主题,请参阅安全。
加密 vSphere 虚拟机
GKE On-Prem 集群节点在 vSphere 集群中的虚拟机上运行。遵循 VMware vSphere 安全指南和加密虚拟机的最佳做法指南。
及时升级基础架构
Kubernetes 经常引入新的安全功能并提供安全补丁程序。如需了解安全补丁程序,请参阅 GKE On-Prem 安全公告。
您需要确保您的 GKE On-Prem 集群保持最新状态。对于每个版本,请查看版本说明。规划您的更新,每个月更新到最新的补丁程序版本,每三个月更新到次要版本。了解如何升级集群。
此外,您还需负责升级和保护 vSphere 基础架构:
- 建立及时修补和升级虚拟机的流程。
- 及时了解最新的 VMware 安全建议
- 按照将补丁程序应用于主机中的指导进行操作
配置 OpenID Connect
如果要为集群配置用户身份验证,请使用 OpenID Connect (OIDC)。
在通过基于角色的访问权限控制 (RBAC) 授予访问权限时,您还应利用 OIDC 组。这样您就无需在用户角色变化时手动更新 RBAC 配置。
对 Google Cloud 服务帐号应用最低权限原则
GKE On-Prem 需要 4 个 Google Cloud 服务帐号:
- 已列入白名单的服务帐号,用于访问 GKE On-Prem 软件。您可以在购买 Anthos 时创建此帐号。
- 注册服务帐号,供 Connect 用于将 GKE On-Prem 集群注册到 Google Cloud。
- 连接服务帐号,供 Connect 用于在 GKE On-Prem 集群和 Google Cloud 之间建立连接。
- Cloud Logging 服务帐号,用于收集集群日志以供 Cloud Logging 使用。
在安装期间,您将 Identity and Access Management 角色绑定到这些服务帐号。这些角色会向服务帐号授予在您项目中的特定权限。您应根据最低权限原则配置这些服务帐号:仅授予履行服务帐号各自角色所需的权限。
使用 Kubernetes 命名空间和 RBAC 限制访问权限
如需向团队授予对 Kubernetes 的最低访问权限,请创建 Kubernetes 命名空间或特定于环境的集群。为每个命名空间分配成本中心和适当的标签,以实现责任的明晰化和退款。仅为开发者提供部署和管理应用(特别是在生产环境中)所需的对其命名空间的访问权限级别。
划分用户需要对集群执行的任务,并定义完成每项任务所需的权限。如需授予集群级层和命名空间级层的权限,请使用 Kubernetes RBAC。
除了 Google Cloud 服务帐号用于安装 GKE On-Prem 的权限之外,IAM 不适用于 GKE On-Prem 集群。
限制集群发现 RBAC 权限
默认情况下,Kubernetes 使用一组宽松的发现 ClusterRoleBinding 启动集群,从而允许广泛访问集群 API 的相关信息,包括 CustomResourceDefinition (CRD) 的相关信息。这些权限在 Kubernetes 1.14 中有所减少,将从 GKE On-Prem 版本 1.2 开始提供。如果需要限制访问权限,请考虑适当地配置本地防火墙。
密钥管理
如需为敏感数据(例如存储在 etcd 中的 Kubernetes Secret)提供额外保护,请配置与 GKE On-Prem 集群集成的 Secret 管理器。
如果您在多个环境中运行工作负载,则可能更适合使用同时适用于 Google Kubernetes Engine 和 GKE On-Prem 的解决方案。如果您选择使用外部 Secret 管理器(例如 HashiCorp Vault),则需要在创建 GKE On-Prem 集群之前设置。
您可以通过多种方式来管理 Secret。
- 您可以在 GKE On-Prem 中以原生方式使用 Kubernetes Secret。如前文所述,我们希望集群针对虚拟机使用 vSphere 加密,为 Secret 提供基本的静态加密保护。默认情况下,Secret 不会进一步加密。如需在应用层加密这些 Secret,您可以修改 EncryptionConfig 并使用密钥管理服务插件。
- 您可以使用外部 Secret 管理器,例如 HashiCorp Vault。您可以使用 Kubernetes 服务帐号或 Google Cloud 服务帐号向 HashiCorp 进行身份验证。
限制对控制层面和节点的网络访问
您应该限制集群控制层面和节点对互联网的公开程度。创建集群后,无法更改这些选项。
默认情况下,系统会使用 RFC 1918 地址创建 GKE On-Prem 集群节点,您不应更改此设置。您应在本地部署网络中实施防火墙规则,以限制对控制层面的访问权限。
使用网络政策限制 pod 之间的流量
默认情况下,GKE On-Prem 集群中的所有 Service 都可以相互通信。您应根据需要控制工作负载的“Service 到 Service”通信。
限制网络对 Service 的访问权限可以大大增加攻击者在集群中横向移动的难度,还可以保护 Service 免遭意外的或故意的拒绝服务攻击。控制流量的两种推荐方法如下:
- 要控制到应用端点的 L7 流量,请使用 Istio。如果您对负载平衡、服务授权、节流、配额和指标感兴趣,请选择此方法。
- 如需控制 pod 之间的 L4 流量,请使用 Kubernetes 网络政策。如果您需要 Kubernetes 所提供的基本访问权限控制功能,请选择此方法。
您可以在创建 GKE On-Prem 集群后同时启用 Istio 和 Kubernetes 网络政策。如有需要,您可以同时使用它们。
使用 Anthos Config Management 政策控制器
Kubernetes 准入控制器是负责管理和实施 Kubernetes 集群使用方式的插件。您必须启用准入控制器才能使用 Kubernetes 高级安全功能。准入控制器是强化集群安全性的深度防御方法的重要组成部分。
最佳做法是使用 Anthos Config Management 的政策控制器。政策控制器使用 OPA 限制框架将政策描述和实施为 CRD。您希望应用于集群的限制是在集群中部署的限制模板中定义的。
监控集群配置
您应该审核集群配置与您定义的设置之间是否存在差异。若要自动检查这些配置,则无论您的 GKE On-Prem 集群部署在何处,您都应使用适合这些群集的解决方案。请参阅 Anthos 合作伙伴。
停用旧的客户端身份验证方法(默认)
向 Kubernetes API 服务器进行身份验证的方法有多种。建议您使用 OIDC 身份验证机制。默认情况下,基本身份验证处于停用状态。请勿将 x509 证书用于身份验证。
启用 Cloud Logging(默认)
为了减少运营开销并维护日志的统一视图,请在部署集群的任何位置实施一致的日志记录策略。默认情况下,GKE On-Prem 与 Google Cloud 的运维套件集成。您应通过填充 GKE On-Prem 配置文件中的 stackdriver
规范在安装过程中启用 Google Cloud 的运维套件。
默认情况下,所有 GKE On-Prem 集群都会启用 Kubernetes 审核日志记录。审核日志记录按时间顺序记录已对 Kubernetes API 服务器进行的调用。审核日志条目适合用于调查可疑的 API 请求、收集统计信息,以及针对不当 API 调用创建监控提醒。
GKE On-Prem 集群整合了 Kubernetes 审核日志记录、Google Cloud Audit Logs 和 Cloud Logging。GKE On-Prem 也可以从 Logging 路由到您自己的日志记录系统。
Google Cloud 的运维套件会从您的集群中收集和汇总日志。通过启用 Google Cloud 的运维套件,您可以从 Google 获得更好的支持。如需了解详情,请参阅日志记录和监控。
停用 Kubernetes 信息中心(默认)
Kubernetes 信息中心由权限较高的 Kubernetes 服务帐号提供支持,它在数次针对 Kubernetes 的重大攻击中被利用。Google Cloud Console 是 GKE On-Prem 的推荐网页界面。它具有许多相同的功能,支持 IAM 和 Kubernetes RBAC 且无需提升权限,并提供多集群管理等 Anthos 功能。
GKE On-Prem 中不包含 Kubernetes 信息中心。
停用基于特性的访问权限控制(默认)
在 Kubernetes 中,您可以使用 RBAC 在集群和命名空间级层授予对资源的访问权限。借助 RBAC,您可以使用包含一组权限的规则来定义角色。
默认情况下,GKE On-Prem 集群会停用基于特性的访问权限控制 (ABAC),您不应启用它。