CI 过程中的镜像安全检查
CI 过程中的镜像,可以被理解为镜像构建之后,推送到镜像仓库的过程(Image -> Registry)。这个过程通常被设计在镜像构建持续集成流水线中,目的是将频繁产生的代码自动化构建成容器镜像并推送至镜像仓库,来支持容器化应用程序的部署。对于容器镜像,CI 过程通常包括以下步骤:
代码拉取:从代码仓库(如 Git)中拉取最新的代码;
代码构建:根据项目的构建配置,使用构建工具(如 Maven、Gradle 或 npm)对源代码进行编译、测试和打包;
构建镜像:使用 Dockerfile 或其他类似工具,将编译后的代码和依赖打包成一个容器镜像。这一步通常包括基础镜像的选择、应用程序及其依赖的复制、配置文件的修改等;
镜像推送:将通过测试的镜像推送到镜像仓库(如 Docker Hub、Harbor 或 Google Container Registry)中,以便后续的部署和分发。
在上述 CI 过程中,我们可以发现,流水线在完成镜像构建之后,不论镜像的安全性如何,都会将其推送至镜像仓库。有可能在后续的工作中,镜像仓库管理员会对其进行安全检查,又或者直至业务上线的时,才对镜像启动的容器做安全检查,这种做法不太符合安全左移的理念,会产生较大的企业安全成本。
对 CI 流水线中的镜像进行扫描并验证其安全性
我们需要对镜像的构建流程稍作修改,引入镜像安全能力,以确保容器镜像的安全性、质量和合规性,从而提高整个应用程序的稳定性和可靠性,尽可能地在开发侧解决镜像安全性问题,实现安全左移。
赤岩石®️镜像安全支持 CI 镜像扫描
功能。引入该功能后,您的流水线会变成如下流程:
CI 镜像扫描的工作流程:
CI 镜像扫描插件会将
构建镜像
步骤输出的镜像推送至赤岩石安全平台;镜像安全分析器会对这个镜像进行全方位的安全评估,根据用户定义的 CI 镜像构建控制规则,返回
True
或者False
;镜像扫描插件根据赤岩石安全平台的返回值决定步骤是否正常结束。
一般情况下,步骤非正常退出,流水线将会中断。上面示例引入 CI 镜像扫描功能后,您可以在镜像构建之后,推送到镜像库之前,对容器镜像进行安全扫描,分析镜像的应用漏洞、病毒木马、可疑威胁。
在发现安全隐患之后,CI 镜像扫描插件中断了镜像构建流水线,阻止了危险镜像的推送。开发同学可以根据镜像的分析结果有针对性的对镜像进行修复。
您需要在流水线中设置我们提供的 CI 镜像扫描插件
,我们已经提供了适用于 Jenkins、Tekton 等常见流水线的插件。