本文来自twt企业IT社区。
随着容器及微服务架构的兴起,容器化部署已经成为云原生实践的重要部分,越来越多的公司将应用部署在容器平台上。自然的,随着容器的广泛使用,容器的安全性就成为了业界关注的焦点,容器镜像安全扫描工具也随之诞生,如:Clair,Anchore Engine,Quay,Trivy等。容器是基于镜像构建的,如果镜像本身就是一个恶意镜像或是一个存在漏洞的镜像,那么基于它搭建的容器自然就是不安全的了,故镜像安全直接决定了容器安全。
为什么容器镜像会产生安全问题?
在传统的部署方式中,应用依赖于操作系统中的环境。在配置好环境后,应用可以稳定地运行。但是随着技术的发展,传统部署带来的问题越来越严重。因为多个应用对运行环境的不同要求,导致应用部署产生了很多出乎意料的麻烦,在琐碎的环境问题上消耗了许多精力。因此,容器化部署被引进以应对这种情景。容器安装了运行时所需要的环境,并且要求开发人员将他们的应用程序及其所需的依赖关系打包到容器镜像中。无论其他开发人员和操作系统如何,每个开发人员都可以拥有自己的依赖版本。最终不论是用户还是开发者都在这种部署方案中受益匪浅,开发者可以轻松地在不同环境中测试应用的运行情况,在发布新版本的时候也不必为环境的改变而定制升级教程;用户在使用容器部署时也十分便利,并且不同的软件之间也不会相互影响。
理想情况下,容器镜像应该只包含应用程序的二进制文件及其依赖项。然而实际上,容器镜像往往是相当巨大的。像Ubuntu、Centos这样被广泛使用的基础系统镜像,它们包含了相当多的无用功能。尽管有些功能在调试部署的时候带来了一定的便利,但是在增大的体积面前,收益极低。容器实际上是不透明的,被封装成一个个繁琐的镜像。
最终,当越来越多的容器被创建时,没有人再确定容器到底装载了什么,实际运行着什么。正是因为如此,我们日常使用的镜像面临严峻的安全问题。随着历年来积累的CVE越来越多,很多应用都存在一些问题,在更新频率低的镜像中尤为严重。