企业镜像的安全边界
发布时间:
2024-05-25 13:07
容器的安全性在很大程度上取决于容器镜像的安全性。容器镜像的安全边界是确保容器安全的关键。在容器镜像的安全治理中,预防为主、治理为辅的理念至关重要。预防,就是要在编写 Dockerfle 的时候,遵循最佳实践来编写安全的 Dockerfile;还要采用安全的方式来构建容器镜像;防治,即要使用容器镜像扫描,又要将扫描流程嵌入到 CI/CD 中,如果镜像扫描出漏洞,则应该立即终止 CI/CD 流程,并反馈至相关人员,进行修复后重新触发。本文将探讨企业镜像的安全边界以及如何实现安全治理。
云原生的安全架构中更强调“早发现、早预防、早处理”。意味着在整个开发生命周期内实施安全措施容器镜像作为承载云原生应用的重要载体,作为云原生应用生命周期的源头,其安全性对云原生系统的安全有着重要的意义。确保容器镜像的安全性,是实现安全左移最重要的手段之一。
一:镜像的安全治理
在介绍镜像前,我们先回顾下容器镜像的概念。镜像是一个特殊的文件系统,通常包含了容器运行时所需的程序,库,资源,配置等,还可能包含一些为运行时准备的一些配置参数,但不包含任何动态数据。当提交这个修改,生成新的镜像时,保存的内容仅为最上层可读写文件系统中被更新过的文件,这样就实现了在不同的容器镜像间共享镜像层的效果。最上层是容器的读写层,剩余的是只读层。
在镜像的安全治理和运营中,我们采用了全生命周期安全管控的思路,以实现DevSecOps的闭环。保障基础镜像的安全性是容器镜像安全治理中最为基础和重要的一环。我们主要将镜像的安全治理分为两个方面:控制增量和管理存量。这个治理思路与整体大部分安全治理的思路是一致的。分为下面这两个方面:
控制增量的目标是确保新增加的容器镜像在构建、传输、存储和运行等各个环节都符合安全标准。具体措施包括:
维护黄金基础镜像仓库:鉴于“安全左移”的思想,将安全集成在开发阶段,希望在构建业务镜像时使用没有漏洞的“黄金镜像”——基础镜像。这样可以有效降低安全运营的成本。但是由于漏洞不断地被披露出来,因此“黄金镜像”需要持续进行更新和维护,因此时间和人力成本是非常大的。独自维护需要有专门的团队和人员进行,相对来说成本较高。
规范镜像构建流程:通过构建安全的基础镜像,实现业务流程安全可控。使用可信的镜像源,并进行了全面的漏洞扫描和恶意文件检测,确保基础镜像中不存在中高危漏洞和恶意文件。针对安全的基础镜像,我们形成了标准:“没有中高危漏洞,不含恶意文件的基础镜像,研发会基于黄金镜像构建业务镜像;高度精简,不含无用的组件,因为组件越多,暴露面可能就越多。
增加镜像扫描效率:将镜像仓库与CI/CD流程紧密对接,在CI/CD流水线中集成自动化的镜像构建和推送步骤。在构建引用镜像扫描过程中使用层缓存技术,可减少30%镜像扫描时间还能减少需要损耗的资源。
存量:
管理存量的目标是对已存在的容器镜像进行安全风险的收敛,以减少安全漏洞的影响范围。具体措施包括:
细粒度的风险检测:通过对镜像的层级特性进行扫描分析,识别哪些镜像是基础镜像,可以对制品内的第三方开源组件、框架等进行精准分析,能很好地融入企业内部的DevOps流程,助力企业提升软件供应链安全管理能力。
增强镜像风险管控:通过对进行流程的研究,提炼其建设思路和内容为两个阶段
第一个阶段建设的要点通过建设镜像和容器运行时的安全能力,建设内部基础镜像仓库,基于安全的基础镜像构建业务镜像弥补云原生安全的空白,从0到1建立云原生安全平台的闭环运营。
第二个阶段建设的要点是实现云原生安全的增强能力:通过建设镜像签名和加密存储,提高容器镜像的机密性及运行时的主动防御能力,提高云原生业务的稳定性和可靠性。
二:清晰的全责划分
在企业内部,坚持"谁生成谁维护"的原则是确保镜像安全的基石。这一原则意味着各个团队和角色必须紧密合作,以确保镜像安全性的多重保障。
运维团队:他们负责提供企业内统一的底层操作系统基础镜像,这是整个镜像构建链条的基础。运维团队不仅要保证底层操作系统的安全性,还需定期更新和修复已知的安全漏洞。
基础平台团队:他们在基础镜像的基础上封装容器PaaS平台基础镜像,供业务团队使用。在这个过程中,他们必须确保基础镜像的安全性,遵循安全规范要求,以保证镜像的安全性和稳定性。
业务运维团队:根据业务属性研发需求,他们在容器PaaS平台基础镜像的基础上封装出业务标准基础镜像。这些镜像不仅需满足业务的特定需求,还需保证安全性,并在发布之前进行安全扫描和已知安全风险修复。
安全团队:他们协同各个角色方制定内部镜像构建、存储、发布的安全规范要求,并提供相应的安全扫描工具能力。将安全工具集成至公司的流水线中,实现自动化检测,并设定安全控制策略并且定期对内部镜像仓库进行评估和检测,一旦发现安全风险,将及时推送给镜像资产负责人进行修复。
通过这种逐层封装应用的过程,每个团队都在其层级内负责镜像的安全性,从而确保了镜像在整个生命周期中的安全性。