Kubernetes 基于云原生架构,并参考了 CNCF 关于云原生信息安全最佳实践的建议。
请继续阅读,了解 Kubernetes 如何设计以帮助您部署安全的云原生平台。
CNCF 关于云原生安全的白皮书定义了适用于不同生命周期阶段的安全控制和实践。
为此,您可以:
为此,您可以:
确保对部署的内容、部署人员以及部署位置进行适当限制。您可以强制执行分发阶段的措施,例如验证容器镜像构件的加密身份。
您可以将不同的应用程序和集群组件部署到不同的命名空间中。容器和命名空间都提供了与信息安全相关的重要隔离机制。
在部署 Kubernetes 时,您同时也为应用程序的运行时环境奠定了基础:Kubernetes 集群(或多个集群)。该基础设施必须提供上层期望的安全保障。
Kubernetes API 是集群正常运行的核心。保护此 API 是实现有效集群安全的关键。
Kubernetes 文档的其他页面详细介绍了如何设置访问控制的特定方面。安全清单为您提供了集群的基本检查建议。
在此之外,保护您的集群意味着要为 API 访问实施有效的身份验证和授权。使用 ServiceAccounts 为工作负载和集群组件提供及管理安全身份。
Kubernetes 使用 TLS 保护 API 流量;请确保使用 TLS 部署集群(包括节点与控制平面之间的流量),并保护加密密钥。如果您使用 Kubernetes 自有的 API 进行 CertificateSigningRequests(证书签名请求),请特别注意限制其被滥用。
容器提供两件事:应用程序之间的隔离,以及在同一台主机上组合运行这些隔离应用程序的机制。这两个方面(隔离和聚合)意味着运行时安全涉及确定权衡并找到合适的平衡点。
Kubernetes 依赖容器运行时来设置和运行容器。Kubernetes 项目不推荐特定的容器运行时,您应该确保所选的运行时满足您的信息安全需求。
为了保护运行时的计算安全,您可以:
强制执行Pod 安全标准,以帮助确保应用程序仅在必要的权限下运行。
在您的节点上运行专为运行容器化工作负载而设计的专用操作系统。这通常基于仅提供运行容器所需服务的只读操作系统(不可变镜像)。
容器专用操作系统有助于隔离系统组件,并在容器逃逸的情况下缩小攻击面。
定义 ResourceQuotas(资源配额)以公平分配共享资源,并使用 LimitRanges(限制范围)等机制确保 Pod 指定其资源需求。
跨不同节点划分工作负载以提高隔离性。使用 Kubernetes 本身或生态系统提供的节点隔离机制,确保具有不同信任上下文的 Pod 运行在不同的节点集上。
使用提供安全限制的容器运行时。
为了保护集群及其运行的应用程序的存储安全,您可以:
对于加密密钥,在专用硬件内生成密钥可提供抵御泄露风险的最佳保护。硬件安全模块(HSM)允许您执行加密操作,同时不允许安全密钥被复制到其他地方。
您还应该考虑网络安全措施,例如 NetworkPolicy 或服务网格。一些 Kubernetes 网络插件使用虚拟专用网(VPN)覆盖技术为您的集群网络提供加密。根据设计,Kubernetes 允许您为集群使用自己的网络插件。如果您使用托管的 Kubernetes,服务提供商可能已经为您选择了网络插件。
您选择的网络插件及其集成方式会对传输中的信息安全产生很大影响。
Kubernetes 允许您使用额外的工具扩展集群。您可以设置第三方解决方案来帮助您监控或排查应用程序和运行它们的集群。您还可以获得 Kubernetes 本身内置的一些基本可观测性功能。在容器中运行的代码可以生成日志、发布指标或提供其他可观测性数据;在部署时,您需要确保集群提供了适当的保护级别。
如果您设置了指标仪表板或类似工具,请检查将数据填充到该仪表板的组件链以及仪表板本身。确保整个链条的设计具有足够的弹性和完整性保护,以便即使在集群可能降级的故障期间,您也可以依赖它。
在适当的情况下,在 Kubernetes 层之下部署安全措施,例如加密测量的启动(Measured Boot)或经过身份验证的时间分发(这有助于确保日志和审计记录的保真度)。
对于高保证环境,请部署加密保护以确保日志既防篡改又保密。