跳到主要内容

CI 过程中的镜像安全检查

CI 过程中的镜像,可以被理解为镜像构建之后,推送到镜像仓库的过程(Image -> Registry)。这个过程通常被设计在镜像构建持续集成流水线中,目的是将频繁产生的代码自动化构建成容器镜像并推送至镜像仓库,来支持容器化应用程序的部署。对于容器镜像,CI 过程通常包括以下步骤:

  • 代码拉取:从代码仓库(如 Git)中拉取最新的代码;

  • 代码构建:根据项目的构建配置,使用构建工具(如 Maven、Gradle 或 npm)对源代码进行编译、测试和打包;

  • 构建镜像:使用 Dockerfile 或其他类似工具,将编译后的代码和依赖打包成一个容器镜像。这一步通常包括基础镜像的选择、应用程序及其依赖的复制、配置文件的修改等;

  • 镜像推送:将通过测试的镜像推送到镜像仓库(如 Docker Hub、Harbor 或 Google Container Registry)中,以便后续的部署和分发。

安全隐患

在上述 CI 过程中,我们可以发现,流水线在完成镜像构建之后,不论镜像的安全性如何,都会将其推送至镜像仓库。有可能在后续的工作中,镜像仓库管理员会对其进行安全检查,又或者直至业务上线的时,才对镜像启动的容器做安全检查,这种做法不太符合安全左移的理念,会产生较大的企业安全成本。

对 CI 流水线中的镜像进行扫描并验证其安全性

我们需要对镜像的构建流程稍作修改,引入镜像安全能力,以确保容器镜像的安全性、质量和合规性,从而提高整个应用程序的稳定性和可靠性,尽可能地在开发侧解决镜像安全性问题,实现安全左移。

赤岩石®️镜像安全支持 CI 镜像扫描 功能。引入该功能后,您的流水线会变成如下流程:

CI 镜像扫描的工作流程:

  1. CI 镜像扫描插件会将 构建镜像 步骤输出的镜像推送至赤岩石安全平台;

  2. 镜像安全分析器会对这个镜像进行全方位的安全评估,根据用户定义的 CI 镜像构建控制规则,返回 True 或者 False

  3. 镜像扫描插件根据赤岩石安全平台的返回值决定步骤是否正常结束。

一般情况下,步骤非正常退出,流水线将会中断。上面示例引入 CI 镜像扫描功能后,您可以在镜像构建之后,推送到镜像库之前,对容器镜像进行安全扫描,分析镜像的应用漏洞、病毒木马、可疑威胁。

在发现安全隐患之后,CI 镜像扫描插件中断了镜像构建流水线,阻止了危险镜像的推送。开发同学可以根据镜像的分析结果有针对性的对镜像进行修复。

信息

您需要在流水线中设置我们提供的 CI 镜像扫描插件,我们已经提供了适用于 Jenkins、Tekton 等常见流水线的插件。