登录 / 注册 Account
快速跳转

如何驾驭 Kubernetes 安全防护

复制 URL

想要驾驭 Kubernetes 的安全防护,需要在构建阶段修复已知的安全漏洞,在构建/部署阶段重新配置错误配置,并在运行时响应威胁。这些符合最新的《Kubernetes 和容器安全状况报告》中收集的反馈,该报告发现 24% 的严重容器安全问题是可以修复的漏洞,近 70% 是配置错误,27% 是运行时安全事件。

容器无处不在

Kubernetes 是一款开源容器编排平台,用于管理批量保存在集群中的数百个(有时候数千个)Linux® 容器。它非常依赖连接容器化微服务应用程序编程接口(API)。这种分布式特性让我们很难检测哪些容器可能存在漏洞、可能存在错误配置,或者会给您的组织带来很大风险

驾驭之道是全面掌握容器部署的情况,及时捕捉每个容器中的系统级关键事件。

容器镜像和镜像仓库可能被滥用

容器镜像(也称为基础镜像)是用于创建新容器的不可变模板。新复制的容器镜像则可以进行修改,以满足不同的目的。

驾驭之道是设置策略,确定如何构建镜像,以及如何在镜像仓库中存储它们。需要定期对基础镜像进行测试、批准和扫描。只能使用经允许的镜像仓库中的镜像在 Kubernetes 环境中启动容器。

不受约束的容器通信

容器和容器集需要在部署中相互通信,也需要与其他内部和外部端点通信,来确保正常工作。如果一个容器遭到攻击,该容器与其他容器和容器集通信的范围,直接决定了黑客在环境中的活动范围。在疯狂蔓延的容器环境中,手动配置此类策略会变得十分复杂,因此实现网络分段可能会异常困难。

驾驭之道是跟踪命名空间、部署和容器集之间传输的流量;并确定其中实际允许的流量。

默认的容器网络策略

默认情况下,Kubernetes 部署不会对容器集(Kubernetes 应用的最小单位)应用网络策略。这些网络策略就像是防火墙规则。它们控制着容器集如何通信。在不使用网络策略的情况下,容器集之间可以自由通信。 

驾驭之道是定义网络策略,限定容器集只能与定义的资产通信,且只在容器中的只读卷上挂载密钥,而不是作为环境变量来传输这些敏感数据。

容器和 Kubernetes 合规性

Kubernetes 支持的云原生环境应像所有其他 IT 环境一样,符合安全最佳实践、行业标准、基准和内部组织策略的要求,并证明其合规性。有时,这需要您调整合规性策略,使 Kubernetes 环境满足最初为传统应用基础架构所编写的控制要求。

驾驭之道是监测其合规遵从情况,并自动执行审查。

运行时

Kubernetes 是一种不可变的基础架构。在容器运行时期间无法安装补丁,因为这样必须要销毁正在运行的容器,然后重新创建。被攻击的容器可以用来运行恶意进程,例如加密挖矿和端口扫描。

驾驭之道是销毁被攻击或正在运行的容器,重建未被攻破的容器镜像,然后重新启动它。

通过创建坚固的基础镜像并采用漏洞扫描流程,可以从构建阶段就开始确保 Kubernetes 安全。

  • 使用最小的基础镜像。避免使用带操作系统(OS)软件包管理器或 shell(可能包含未知漏洞)的镜像,如果一定要使用这类镜像,可以在之后移除软件包管理器。

  • 切勿添加不必要的组件。一般来说,常用工具包含在镜像中时,会成为安全隐患。

  • 仅使用最新的镜像。更新组件版本。

  • 使用镜像扫描程序。识别镜像中的漏洞,逐层击破。

  • 将安全防护集成到 CI/CD 管道中。对安全防护中会导致连续集成构建中断的可重复工作实施自动化,并针对严重的可修复漏洞生成警报。

  • 标记永久漏洞。将无法修复、不太关键或无需立即修复的已知漏洞添加到允许列表中。 

  • 采用深度防御。标准化策略检查和补救工作流程,以检测和更新易受攻击的镜像。

在部署工作负载之前配置好 Kubernetes 基础架构的安全防护。首先要尽可能多地了解部署过程,比如部署内容(镜像、组件、容器集)、部署位置(集群、命名空间和节点)、部署方式(特权、通信策略、应用的安全防护)、可以访问的对象(密钥、卷)和合规性标准。

  • 使用命名空间。将工作负载划分到命名空间,可以帮助遏制攻击,并限制授权用户所犯的错误或做出的破坏性操作带来的影响。

  • 使用网络策略。Kubernetes 默认允许每个容器集与其他容器集通信,但是网络分段策略无法覆盖这项默认设置。

  • 限制密钥的访问权限。仅挂载部署所需的密钥。

  • 评估容器特权。仅提供容器行使其功能所需的功能、角色和特权。 

  • 评估镜像出处。使用来自已知镜像仓库的镜像。

  • 扫描部署。根据扫描结果实施策略。 

  • 使用标签和注释。在部署中标记或注释负责容器化应用的团队的联系信息,以简化分类。

  • 启用基于角色的访问权限控制(RBAC)。RBAC 控制用户和服务帐户访问集群 Kubernetes API 服务器的授权。

在构建和部署期间采用主动安全防御可以降低在运行时发生安全事件的几率,但要识别和响应运行时威胁,需要持续监控流程活动和网络通信。

  • 使用上下文信息。使用 Kubernetes 中的构建和部署时间信息来评估运行时中观察到的和预期的活动,以检测可疑活动。

  • 扫描正在运行的部署。监控正在运行的部署,确认是否存在最近在容器镜像中发现的相同漏洞。

  • 使用内置控制。配置容器集的安全上下文,以限制它们的功能。

  • 监控网络流量。观察并比较实时网络流量和 Kubernetes 网络策略允许的流量,以识别预期外的通信。

  • 使用允许列表。识别在正常的应用运行过程中执行的进程,以创建一个允许列表。

  • 比较相似部署的容器集中的运行时活动。需要对具有明显差异的重复项执行调查。

  • 将可疑的容器集缩容到零。使用 Kubernetes 原生控制,通过自动指示 Kubernetes 将可疑容器集缩容为零,或销毁并重建实例来控制漏洞。

安全防护不仅限于镜像和工作负载。安全防护涉及整个 Kubernetes 基础架构:集群、容器引擎,甚至是

  • 应用 Kubernetes 更新。更新您的 Kubernetes 发行版将会应用安全补丁并安装新安全工具。

  • 配置 Kubernetes API 服务器。禁用未验证身份/匿名的访问,并对 kubelet 和 API 服务器之间的连接使用 TLS 加密。

  • 保护 etcd。etcd 是 Kubernetes 用于数据访问的一个键值存储。保护 kubelet。使用 --anonymous-auth=false 标志启动 kubelet 以禁用对 kubelet 的匿名访问,并使用 NodeRestriction 许可控制器来限制 kubelet 的访问权限。

云安全防护

无论是用哪种类型的云(公共云私有云混合云多云)托管容器或运行 Kubernetes,云用户(非云提供商)应始终负责保护 Kubernetes 工作负载的安全,包括:

  • 容器镜像:源、内容和漏洞

  • 部署: 网络服务、存储和特权

  • 配置管理:角色、组、角色绑定、服务帐户

  • 应用:密钥管理、标签、注释

  • 网络分段:Kubernetes 集群中的网络策略

  • 运行时:威胁检测和事件响应

使用容器和 Kubernetes 不会改变您的安全防护目标:减少漏洞。

  • 尽早将安全防护嵌入到容器生命周期中。安全防护应让开发人员和 DevOps 团队放心地构建和部署生产就绪型应用。

  • 使用 Kubernetes 原生安全防护控制。原生控制可以防止安全控制与编排器发生冲突。 

  • 让 Kubernetes 划定补救的优先次序。

扩展阅读

文章

OpenShift 如何助力实现容器安全

红帽® OpenShift® 可以将安全控制应用于软件供应链,在不降低开发人员生产率力的情况下提高应用的安全性。 

文章

什么是容器安全防护?

容器安全防护是指保护容器的完整性。这包括从其保管的应用到其所依赖的基础架构等全部内容。

文章

什么是 Kubernetes 模式?

模式是一种可重复利用的解决方案。Kubernetes 模式是基于容器的应用和服务的设计模式。  

开始使用企业级 Kubernetes 平台

Red Hat OpenShift

企业就绪型 Kubernetes 容器平台。