Docker怎样改变的云计算安全?
发布日期:2016-7-11 16:7:59
自云计算问世以来,人们就一直对云(如阿里云)计算技术的安全性持有怀疑态度。一提到多租户模式:你也许与陌生人在同一个物理硬件上,即便服务提供商承诺采用虚拟机来隔离,也是这样,人们总是想到安全灾难。时间证明,虚拟机确实提供了一层有效的隔离;更多的公司每天在采用虚拟机。Docker容器就好比微型虚拟机。比如说,若一台服务器上可运行10个虚拟机,同样这台服务器上可运行100个、甚至1000个Docker容器。 坏消息是,默认状态下的Docker其安全性不如虚拟机和大多数云计算技术。因为多个Docker容器共享一个Linux内核,内核漏洞也许导致特权升级攻击方面存在更大的风险。通俗地说,Docker使用多租户模式是个坏主意,由于容器之间没足够的固有隔离,无法完全确保一个用户根本无法访问另一个用户的容器。现在有不少办法可缓解这种风险。比如说,若使用安全增强Linux(即SELinux,最初由NSA开发),即便Linux内核遭到危及,在容器外面肆意妄为的能力也很有限。但完善这种办法却困难重重。 为Docker化的应用程序确保安全的若干原则 若你将CoreOS等简约的操作系统和SELinux及临时映像结合起来,就能摈弃那些也许被人钻空子的不必要的技术。与大多数Linux发行版捆绑了大量不必要的工具不同,若使用Docker,你就能够创建经过精细调整、异常高效的基础设施集群,攻击途径比较少。若你将该方法与Docker公司打算未来一年推出的网络层安全特性结合起来,那么部署的Docker化的应用程序其安全性就会大大加强。当然了,若你在Docker里面构建的应用程序本身存在安全漏洞,这个方法没有太大帮助,而有时候,未知因素却是最让我们担忧不止的隐患。还有多少Heartbleeds和Shellshocks位于完全没有被发现的/usr/bin中呢? 减小受攻击面 好消息是,Docker采用共享式Linux内核的架构实际上让你能够为开发的Linux应用程序大大减小受攻击面。如果你在开发并不需要多租户模式的技术(比如为银行、零售商和在线商家开发的软件),实际上可以通过采用Docker来增强安全性。如何实现?如果你从一款为Docker开发的简约版Linux操作系统(比如开源CoreOS)开始入手,就能减少主机系统上面临的潜在攻击途径。CoreOS摈弃了Linux的大多数特性和功能,包括apt-get和yum之类的程序包管理器。要是不使用Docker,就很难将外部代码安装到CoreOS上。比如说,若你想要安装Apache,就必须通过拉取里面有Apache的Docker容器才能够安装上去。 这个要求减少了一系列受攻击面,由于无意中在Docker主机上运行不安全的代码变得极其困难。但若你将CoreOS与一项名为“临时映像”(sratch image)的特殊的Docker特性结合起来,安全方面的好处变得还要明显。临时映像是最简约的Docker容器。它里面到底有什么东西呢?绝对是什么都没有。它是用一个空的打包文件创建而成的。不仅没Apache,连二进制代码都根本没创建。这个无二进制代码的磁盘映像概念在虚拟机上不可能实现,由于虚拟机并不共享Linux内核,这意味着虚拟机需要随带各自的二进制代码,才能够正常运行。 眼下使用经过编译的Go二进制代码构建单单一套二进制代码的Docker容器方面在开展令人关注的工作。这种工作显著减小了Docker容器本身里面的受攻击面。比如说,若你在临时映像里面运行你的应用程序代码,就没必要担心Bash Shellshock这个软件错误(bug)。那是因为你首先并不压根在容器里面使用bash命令。Linux内核本身成了唯一有可能的操作系统层面(非网络层面)的攻击途径。
|