Kubernetes 基于云原生架构,并借鉴了 CNCF 有关云原生信息安全良好实践的建议。
继续阅读本页,了解 Kubernetes 如何设计以帮助你部署安全的云原生平台。
CNCF 关于云原生安全的白皮书 介绍了适用于不同生命周期阶段的安全控制和实践。
要达到这些目的,你可以:
要达到这些目的,你可以:
确保对要部署的内容、可部署的人员和可部署的位置进行适当限制。 你可以采取分发阶段的举措,例如验证容器镜像制品的加密身份。
你可以部署不同的应用程序和集群组件到不同的命名空间中。 容器和命名空间都提供了与信息安全相关的隔离机制。
当你部署 Kubernetes 时,也是在为应用程序的运行环境奠定基础:一个或多个 Kubernetes 集群。 该基础设施必须提供上层所期望的安全保障。
Kubernetes API 是集群运行的基础。保护 API 是提供可靠的集群安全性的关键。
Kubernetes 文档中的其他页面更详细地介绍了如何设置访问控制的具体细节。 安全检查清单为你的集群提供了一套建议的基本检查。
除此之外,加固集群还意味着对访问 API 实施有效的身份认证和 鉴权。 使用 ServiceAccount 为工作负载和集群组件提供和管理安全身份。
Kubernetes 使用 TLS 保护 API 流量;确保在部署集群时采用了 TLS(包含工作节点和控制平面间的流量)加密方式, 并保护好加密密钥。如果使用 Kubernetes 自带的 证书签名请求 API, 特别注意不要滥用它们。
容器提供了两种功能: 不同应用程序间的隔离,以及将这些隔离的应用程序合并运行到同一台主机的机制。 隔离和聚合这两个方面意味着运行时安全需要权衡利弊,并找到合适的平衡点。
Kubernetes 依赖容器运行时 来设置和运行容器。Kubernetes 项目不会推荐特定的容器运行时, 你应当确保选用的运行时符合你的信息安全需要。
要在运行时保护计算资源,你可以:
为应用程序强制采用 Pod 安全性标准, 确保它们仅以所需权限运行。
在你的节点上运行专门为运行容器化工作负载的而设计的专用操作系统。 它通常基于只读操作系统(不可变镜像),只提供运行容器所必须的服务。
容器化专用操作系统有助于隔离系统组件,并在容器逃逸时减少攻击面。
要保护你的集群和应用运行使用的存储,你可以:
对于加密密钥来说,在专用硬件中生成这些密钥是防范泄密风险的最佳防护。 硬件安全模块可以让你在不允许将安全密钥拷贝到其他地方的情况下执行加密操作。
你也应当考虑网络安全措施, 例如 NetworkPolicy 或者服务网格。 一些 Kubernetes 的网络插件使用虚拟专用网络(VPN)叠加等技术, 可以为集群网络提供加密功能。 从设计上,Kubernetes 允许你在你的集群中使用自有网络插件。 如果你使用托管 Kubernetes,提供商可能会为你选择一个网络插件。
你选用的网络插件和集成方式会对传输中的信息安全产生重大影响。
Kubernetes 允许你使用外部工具扩展集群。 你可以选择第三方解决方案帮助你监控或排查应用程序或运行集群的故障。 Kubernetes 自身还内置了一些基本的可观测性功能。 运行在容器中的代码可以生成日志,暴露指标或提供其他的可观测数据; 在部署时,你需要确保你的集群提供适当级别的安全保护。
如果你配置了指标看板或其他类似的组件,审查暴露指标数据到看板的组件链路和看板本身。 确保整个链路设计具有足够的弹性和足够的完整性保护, 只有这样,即便是在集群降级导致的事件发生时,你也可以依赖它。
在适当的情况下,在 Kubernetes 层之下部署一些安全举措, 例如加密后启动或验证分发时间(有助于确保日志和审计记录的真实性)。
对于高安全级别需求环境,部署加密保护措施,以确保日志防篡改和保密。