jib - 自定义入口点只能在运行时删除 类,但在部署前将无法通过 3pp 漏洞检查

jib - customized entrypoint can only remove classes at runtime, but will fail 3pp vulnerability check before deployment

我正在使用 Jib 拉取基本图像,向其添加包装器 java 代码,并在此基础上构建我的图像。由于 2021 年 12 月广为人知的 log4j CVE,我们正在寻找一种方法来消除漏洞 类。 (现在 2022 年发现了更多的 CVE,其中一个得分为 10.0,最高分。参见 https://www.cvedetails.com/vulnerability-list/vendor_id-45/product_id-37215/Apache-Log4j.html

基础镜像临近EOL,供应商回答不会发布新版本;此外,log4j 1.x 也早就停产了。但目前的情况是我们没有计划将基础镜像升级到下一个版本,所以删除 类 似乎是现在唯一的办法。

基本图像将使用 /opt/amq/bin/launch.sh 作为入口点。而且我发现我可以使用自定义入口点到 运行 之前的脚本,这会删除 类。喜欢 <entrypoint>/opt/amq/bin/my_script.sh</entrypoint>,因为我有 run_fix.sh && /opt/amq/bin/launch.sh

然后我意识到,当应用程序实际上 运行ning 时,即使这样也可以通过降低风险来工作,漏洞扫描(安全过程的一部分)仍然会在检查图像二进制文件时发出警报,因为这个是在将图像上传到 docker 注册表以进行生产之前完成的静态过程,远早于实际 运行 宁它。它们只能在应用程序 运行s 的那一刻被删除 ,也就是在 运行 时间。

jib 可以在进行 Maven 构建时预处理基础映像(mvn clean install -Pdocker-build),而不是仅在 运行 时允许它吗?根据我的阅读,我知道这是一个很大的 NO,而且还没有插件。

根据容器镜像的设计,任何人或任何工具都不可能物理从已经存在的容器镜像中删除文件。图像是不可变的。您可以尝试的最好的方法是使用一些特殊的“whiteout”文件(.wh.xyz)“标记删除”,容器运行时将在运行时隐藏目标文件。

但是,我不确定您的漏洞扫描器在扫描过程中是否会考虑到 whiteout 文件的影响。希望它会。如果没有,我能想到的唯一选择是 re-create 你自己的基本图像。

查看 了解更多详情。