云原生安全与 Kubernetes

保持云原生工作负载安全的概念。

Kubernetes 基于云原生架构,并参考了 CNCF 关于云原生信息安全最佳实践的建议。

请继续阅读,了解 Kubernetes 如何设计以帮助您部署安全的云原生平台。

云原生信息安全

CNCF 关于云原生安全的白皮书定义了适用于不同生命周期阶段的安全控制和实践。

开发生命周期阶段

  • 确保开发环境的完整性。
  • 根据适合您环境的信息安全最佳实践来设计应用程序。
  • 在解决方案设计中考虑终端用户安全。

为此,您可以:

  1. 采用架构(如零信任),即使在面对内部威胁时也能最大程度地减少攻击面。
  2. 定义一个考虑安全问题的代码审查流程。
  3. 构建系统或应用程序的威胁模型,识别信任边界。使用该威胁模型来识别风险并确定如何处理它们。
  4. 在合理的情况下,引入高级安全自动化技术,例如模糊测试(fuzzing)和安全混沌工程

分发生命周期阶段

  • 确保您所运行的容器镜像的供应链安全。
  • 确保集群和其他运行您应用程序的组件的供应链安全。例如,这可能包括您的云原生应用程序用于持久化存储的外部数据库。

为此,您可以:

  1. 扫描容器镜像和其他构件以发现已知漏洞。
  2. 确保软件分发在传输过程中使用加密,并为软件源建立信任链。
  3. 采用并遵循相关流程,在更新可用时及时更新依赖项,特别是在收到安全公告时。
  4. 使用数字证书等验证机制来保证供应链安全。
  5. 订阅安全源和其他机制,以便及时获知安全风险。
  6. 限制对构件的访问。将容器镜像放置在只有经过授权的客户端才能拉取镜像的私有仓库中。

部署生命周期阶段

确保对部署的内容、部署人员以及部署位置进行适当限制。您可以强制执行分发阶段的措施,例如验证容器镜像构件的加密身份。

您可以将不同的应用程序和集群组件部署到不同的命名空间中。容器和命名空间都提供了与信息安全相关的重要隔离机制。

在部署 Kubernetes 时,您同时也为应用程序的运行时环境奠定了基础:Kubernetes 集群(或多个集群)。该基础设施必须提供上层期望的安全保障。

运行生命周期阶段

运行时阶段包含三个关键领域:访问计算存储

运行时保护:访问

Kubernetes API 是集群正常运行的核心。保护此 API 是实现有效集群安全的关键。

Kubernetes 文档的其他页面详细介绍了如何设置访问控制的特定方面。安全清单为您提供了集群的基本检查建议。

在此之外,保护您的集群意味着要为 API 访问实施有效的身份验证授权。使用 ServiceAccounts 为工作负载和集群组件提供及管理安全身份。

Kubernetes 使用 TLS 保护 API 流量;请确保使用 TLS 部署集群(包括节点与控制平面之间的流量),并保护加密密钥。如果您使用 Kubernetes 自有的 API 进行 CertificateSigningRequests(证书签名请求),请特别注意限制其被滥用。

运行时保护:计算

容器提供两件事:应用程序之间的隔离,以及在同一台主机上组合运行这些隔离应用程序的机制。这两个方面(隔离和聚合)意味着运行时安全涉及确定权衡并找到合适的平衡点。

Kubernetes 依赖容器运行时来设置和运行容器。Kubernetes 项目不推荐特定的容器运行时,您应该确保所选的运行时满足您的信息安全需求。

为了保护运行时的计算安全,您可以:

  1. 强制执行Pod 安全标准,以帮助确保应用程序仅在必要的权限下运行。

  2. 在您的节点上运行专为运行容器化工作负载而设计的专用操作系统。这通常基于仅提供运行容器所需服务的只读操作系统(不可变镜像)。

    容器专用操作系统有助于隔离系统组件,并在容器逃逸的情况下缩小攻击面。

  3. 定义 ResourceQuotas(资源配额)以公平分配共享资源,并使用 LimitRanges(限制范围)等机制确保 Pod 指定其资源需求。

  4. 跨不同节点划分工作负载以提高隔离性。使用 Kubernetes 本身或生态系统提供的节点隔离机制,确保具有不同信任上下文的 Pod 运行在不同的节点集上。

  5. 使用提供安全限制的容器运行时

  6. 在 Linux 节点上,使用 Linux 安全模块,例如 AppArmorseccomp

运行时保护:存储

为了保护集群及其运行的应用程序的存储安全,您可以:

  1. 将您的集群与提供卷静态加密(Encryption at Rest)的外部存储插件集成。
  2. 为 API 对象启用静态加密
  3. 使用备份来保护数据持久性,并验证在需要时能够成功恢复。
  4. 对集群节点与其所依赖的任何网络存储之间的连接进行身份验证。
  5. 在您自己的应用程序中实施数据加密。

对于加密密钥,在专用硬件内生成密钥可提供抵御泄露风险的最佳保护。硬件安全模块(HSM)允许您执行加密操作,同时不允许安全密钥被复制到其他地方。

网络与安全

您还应该考虑网络安全措施,例如 NetworkPolicy服务网格。一些 Kubernetes 网络插件使用虚拟专用网(VPN)覆盖技术为您的集群网络提供加密。根据设计,Kubernetes 允许您为集群使用自己的网络插件。如果您使用托管的 Kubernetes,服务提供商可能已经为您选择了网络插件。

您选择的网络插件及其集成方式会对传输中的信息安全产生很大影响。

可观测性与运行时安全

Kubernetes 允许您使用额外的工具扩展集群。您可以设置第三方解决方案来帮助您监控或排查应用程序和运行它们的集群。您还可以获得 Kubernetes 本身内置的一些基本可观测性功能。在容器中运行的代码可以生成日志、发布指标或提供其他可观测性数据;在部署时,您需要确保集群提供了适当的保护级别。

如果您设置了指标仪表板或类似工具,请检查将数据填充到该仪表板的组件链以及仪表板本身。确保整个链条的设计具有足够的弹性和完整性保护,以便即使在集群可能降级的故障期间,您也可以依赖它。

在适当的情况下,在 Kubernetes 层之下部署安全措施,例如加密测量的启动(Measured Boot)或经过身份验证的时间分发(这有助于确保日志和审计记录的保真度)。

对于高保证环境,请部署加密保护以确保日志既防篡改又保密。

接下来

云原生安全

Kubernetes 与信息安全


最后修改于 2025 年 11 月 21 日上午 11:31 (PST):删除 CNCF 生态系统终端用户连字符。(dbfb43f3d9)