公有云和私有云,到底谁更安全?

本文摘要:HyperStratus咨询公司首席执行官伯纳德·戈尔登(Bernard Golden)撰文指出,一个接一个的调查表明,对于公有云计算,安全是潜在用户最担心的问题。例如,2010年4月的一项调查指出,45%的以上的受访者感到云计算带来的风险超过了收益。

HyperStratus咨询公司首席执行官伯纳德·戈尔登(Bernard Golden)撰文指出,一个接一个的调查表明,对于公有云计算,安全是潜在用户最担心的问题。例如,2010年4月的一项调查指出,45%的以上的受访者感到云计算带来的风险超过了收益。CA和Ponemon Institute进行的一项调查也发现了类似的担心。但是,他们还发现,尽管有这些担心,云应用还是在部署着。类似的调查和结果的继续发布表明人们对云计算安全的不信任继续存在。

当然,大多数对云计算的担心与公有云计算有关。全球IT从业者不断地对使用一个公有云服务提供商提出同样的问题。例如,戈尔登本周去了台湾并且在台湾云SIG会议上发表了演讲。有250人参加了这个会议。正如预料的那样,人们向他提出的第一个问题是“公有云计算足够安全吗,我是否应该使用私有云以避免安全问题?”所有的人似乎都认为公有云服务提供商是不可信赖的。

然而,把云安全的讨论归结为“公有云不安全,私有云安全”的公式似乎过于简单化。简单地说,这个观点存在两个大谎言(或者说是两个基本的误会)。主要原因是这种新的计算模式迫使安全产品和方法发生了巨大变化。

第一个云安全谎言

第一个谎言是私有云是安全的,这个结论的依据仅仅是私有云的定义:私有云是在企业自己的数据中心边界范围内部署的。这个误解产生于这样一个事实:云计算包含与传统的计算不同的两个关键区别:虚拟化和活力。

第一个1区别是,云计算的技术基础是在一个应用的管理程序的基础上的。管理程序能够把计算(及其相关的安全威胁)与传统的安全工具隔离开,检查网络通讯中不适当的或者恶意的数据包。由于在同一台服务器中的虚拟机能够完全通过管理程序中的通信进行沟通,数据包能够从一个虚拟机发送到另一个虚拟机,不必经过物理网络。一般安装的安全设备在物理网络检查通讯流量。

至关重要的是,这意味着如果一个虚拟机被攻破,它能够把危险的通信发送到另一个虚拟机,机构的防护措施甚至都不会察觉。换句话说,一个不安全的应用程序能够造成对其它虚拟机的攻击,用户采用的安全措施对此无能为力。仅仅因为一个用户的应用程序位于私有云并不能保护这个应用程序不会出现安全问题。

当然,人们也许会指出,这个问题是与虚拟化一起出现的,没有涉及到云计算的任何方面。这个观点是正确的。云计算代表了虚拟化与自动化的结合。它是私有云出现的另一个安全缺陷的第二个因素。

云计算应用程序得益于自动化以实现灵活性和弹性,能够通过迅速迁移虚拟机和启动额外的虚拟机来管理变化的工作量,并对不断变化的应用状况做出回应。这意味着新的实例在几分钟之内就可以上线,不用任何人工干预。这意味着任何必要的软件安装或者配置也必须实现自动化。这样,当新的实例加入现有的应用程序池的时候,它能够立即作为一个资源使用。

同样,它还意味着任何需要的安全软件必须自动化地安装和配置,不需要人工干预。遗憾的是,许多机构依靠安全人员或者系统管理员人工安装和配置必要的安全组件,但这通常是作为这台机器的其它软件组件安装和配置完毕之后的第二个步骤。

换句话说,许多机构在安全实践与云要求的现实方面是不匹配的。估计私有云本身是安全的这个观点是不正确的。在你的安全和基础设施实践与自动化的实例一致之前,肯定会产生安全漏洞。

而且,使它们一致是非常重要的。否则,你可能出现这种情况:你的应用程序自动化超过了你的安全实践的应对能力。这不是一个好现象。毫无疑问,人们不喜欢解释为什么好像安全的私有云最终还是有安全漏洞,因为云计算的自动化特征还没有扩展到软件基础设施的所有方面。

因此,关于云计算的第一个大谎言的结果是私有云本身就是不安全的。

第二个云安全谎言

关于云计算安全的第二个谎言是对公有云安全的推测,特别是推测公有云计算的安全完全取决于云服务提供商。现实是,服务提供商领域的安全是提供商与用户共同承担的责任。服务提供商负责基础设施的安全以及应用程序与托管的环境之间的接口的安全;用户负责接入这个环境的接口的安全,更重要的是负责应用程序本身的内部安全。

没有正确地配置应用程序,如环境安全接口或者没有采取适当的应用程序级安全预防措施,会使用户产生一些问题。任何提供商也许都不会对这种问题承担责任。

让我提供一个例子。与我们合作的一家公司把自己核心的应用程序放在亚马逊的Web服务中。遗憾的是这家公司既没有针对亚马逊Web服务安全机制可能存在漏洞部署安全措施,也没有针对应用程序设计的问题采取措施。

实际上,亚马逊提供了一个虚拟机级别的防火墙(称作安全组)。人们配置这个防火墙以允许数据包访问具体的端口。与安全组有关的最佳做法是对它们进行分区,这样,就会为每一个虚拟机提供非常精细的访问端口。这将保证只有适用于那种类型机器的通信才能够访问一个实例。例如,一台Web服务器虚拟机经过配置允许端口80上的通信访问这个实例,同时,数据库虚拟机经过配置允许端口80上的通讯访问这个实例。这就阻止了来自外部的利用web通信对包含重要应用程序数据的数据库实例的攻击。

要建立一个安全的应用程序,人们必须正确地使用安全组。但下述这个用户没有这样做。它对于访问所有实例的通信都使用一个安全组。这意味着访问任何实例的任何类型的通信都可以访问每一种类型的实例。这显然是糟糕地使用亚马逊Web服务安全机制的一个例子。

关于用户的应用程序本身,它采用了糟糕的安全措施。它没有在不同类型的机器之中对应用程序代码分区,它把所有的应用程序代码都装载到同一个实例中。这个实例接收其企业网站的通信,还有包含专有算法的代码。

这种情况的关键事实是:如果这个用户以为所有的安全责任都由云服务提供商来承担(在这个案例中是亚马逊Web服务),这将是一个严重的疏忽,因为它没有采取重要的步骤来解决安全问题,而这个安全问题是没有任何一个云服务提供商会承担相关责任的。这就是共同承担责任的意义——双方必须建立自己控制的安全方面。没有这样做,意味着应用程序是不安全的。即使云服务提供商在自己控制的范围内所做的一切都是正确的,如果这个应用程序的所有者没有正确地履行自己的责任,这个应用程序也将会不安全。

戈尔登称,我曾经见过许多安全人员讨论有关公有云服务提供商的问题。他们拒绝承担自己的公司在公有云环境中的责任,坚持把每一个安全话题转向对云服务提供商的担心。

坦率地说,这使我感到他们是轻率的,因为这暗示他们拒绝认真地做一些必要的工作以便创建一个基于公有云服务提供商的尽可能安全的应用程序。这个态度好像所有的安全责任都在云服务提供商身上,进一步发展就是认为他的公司与在云服务提供商环境中运行的应用程序的任何安全事故都无关。因此,这种情况并不让人感到意外:有关人士坚决支持私有云,声称私有云有优越的安全性。

现实是,用户正在越来越多地在公有云服务提供商环境中部署应用程序。安全组织保证自己采取一切可能的步骤尽可能安全地执行应用程序是非常重要的。这意味着用户本身也需要在这方面采取些什么步骤。

因此,安全是云计算的第三条轨道。安全一直被说成是私有云固有的好处和公有云计算的基本缺陷。实际上,事实比这些情况暗示的还要模糊不清。断言公有云环境有安全缺陷,不认真考虑如何缓解这些不安全因素,似乎是不负责任的。

一个管理不善和配置糟糕的私有云应用程序是非常容易受到攻击的。而一个管理妥当的和配置合格的公共云应用程序却能够达到很好的安全性。把这种情况描非黑即白地简单化,会危害这个云环境。

在这两个环境中的更有建设性的做法是询问必须采取什么行动才能实现在时间、预算和容许风险的条件下尽可能保证应用程序安全的目标。考虑到一个具体环境和应用,安全从来不是一个或黑或白的简单问题,而是如何尽可能地将黑色变成白色的问题。