我们希望避免在 dockerfile 中包含“yum update”,因为它可能会根据构建 docker 镜像的时间生成不同的容器,但显然如果需要更新基础系统,这可能会带来一些安全问题。最好的选择真的是拥有一个组织范围的基础系统镜像并进行更新吗?存在的问题是,每次应用安全更新时,都需要在整个组织中重建和部署所有应用程序。
一个对我来说似乎有点过时的替代方法是简单地忽略容器内的安全更新,只担心主机上的它们。这里的思考过程是,攻击者要进入容器,主机上需要有一个漏洞,docker-engine 中有另一个漏洞才能进入容器,然后是另一个漏洞来利用容器中的某些东西。容器,这似乎是一系列难以置信的事件。随着用户命名空间和 seccomp 配置文件的引入,这似乎进一步降低了风险。
无论如何,我如何处理容器内的安全更新,同时对 CI/CD 管道的影响最小,或者理想情况下不必经常重新部署整个基础架构?
最佳答案
您可以通过引入中间更新层来减少构建的不可重复性。
创建一个像这样的图像:
FROM centos:latest
RUN yum update -y
构建图像,标记并推送它。现在,除非您决定更改它们,否则您的构建不会改变。
您可以将其他 Dockerfile 指向 myimage:latest
以在您决定这样做后自动更新,也可以指向特定版本。
我设置 CI 系统的方式是成功(手动)构建带有更新的基础镜像会触发构建依赖它的任何镜像。
报告了安全问题?检查更新的包是否可用或在 Dockerfile 中进行临时修复。触发构建。 不久之后,您将准备好部署所有应用的固定版本。
关于security - 如何处理 docker 容器中的安全更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756703/