此文档中的信息可能已过时
此文档的更新日期比原文晚,因此其中的信息可能已过时。如果能阅读英文,请查看英文版本以获取最新信息: Application Security Checklist
本检查清单旨在为开发者提供在 Kubernetes 上安全地运行应用的基本指南。 此列表并不打算详尽无遗,会随着时间的推移而不断演变。
关于如何阅读和使用本文档:
单靠检查清单自身不足以获得良好的安全态势。 实现良好的安全态势需要持续的关注和改进,实现安全上有备无患的目标道路漫长,清单可作为征程上的第一步。 对于你的特定安全需求,此清单中的某些建议可能过于严格或过于宽松。 由于 Kubernetes 的安全性并不是“一刀切”的,因此针对每一类检查清单项目都应该做价值评估。
以下检查清单提供了一些适用于部署到 Kubernetes 的大多数应用的基础安全加固建议。
default
ServiceAccount。为每个工作负载或微服务创建 ServiceAccount。automountServiceAccountToken
应被设置为 false
。securityContext
建议runAsNonRoot: true
。runAsUser
和 runAsGroup
), 并在容器镜像内配置恰当的文件或目录权限。fsGroup
访问持久卷。securityContext
建议allowPrivilegeEscalation: false
禁用特权提级。readOnlyRootFilesystem: true
将根文件系统配置为只读。privileged: false
)。system:unauthenticated
组的绑定,并在可能的情况下将其移除, 因为这类绑定会为能够在网络层与 API 服务器通信的所有人提供访问权限。对 create、update 和 delete 动词的授权要非常谨慎。 如果允许针对 Namespace 对象使用 patch 动词, 可能会允许用户更新命名空间或部署上的标签, 这可能会增加攻击面。
对于敏感工作负载,考虑提供推荐的 ValidatingAdmissionPolicy 以进一步限制允许的写入操作。
确保你的集群提供并强制执行 NetworkPolicy。 如果你所编写的应用将被人们部署到不同集群中,请考虑你是否可以假设 NetworkPolicy 可用且被启用。
本指南的这一节涵盖了一些高级安全加固要点,这些要点可能在不同 Kubernetes 环境设置中有用。
为 Pod 容器配置 安全上下文。
某些容器可能需要不同于集群默认运行时所提供的隔离级别。 你可以在 Pod 规约中使用 runtimeClassName
定义不同的运行时类。
对于敏感的工作负载,考虑使用 gVisor 这类内核仿真工具, 或使用 kata-containers 等机制进行虚拟化隔离。
在高度信任的环境中,考虑使用机密虚拟机进一步提高集群安全性。
本页面中的条目引用了第三方产品或项目,这些产品(项目)提供了 Kubernetes 所需的功能。Kubernetes 项目的开发人员不对这些第三方产品(项目)负责。请参阅CNCF 网站指南了解更多细节。
在提交更改建议,向本页添加新的第三方链接之前,你应该先阅读内容指南。