【51CTO.com快译】可以信任公共云吗?答案当然是肯定的。在许多方面,采用公共云比企业运营自己的数据中心更安全。

但是,多个客户在公共云共享同一物理硬件这一事实是否会造成安全问题?多租户系统在本质上都不太安全吗?

什么是多租户?

首先,应该讨论多租户环境和单租户环境的含义。正如人们怀疑的那样,答案并不像看起来那么明确。

先了解一下在数据中心运行的非云的应用程序。图1显示了这样一个系统。

图1单租户应用程序

可以在图1中看到两个客户,每个客户都在不同且独立的物理服务器上运行不同的应用程序实例。两台服务器可能在同一个数据中心运行,共享同一个网络基础设施,但不共享其他物理资源。由于它们都运行不同的计算机实例(具有独立的CPU、内存和存储硬件),因此一个客户的信息很难干扰另一个客户的信息,这在本质上是不可能的。

但是,如果在此设置中添加第三个客户,则需要应用程序的第三个实例,这需要购买和设置第三台物理服务器,并安装、更新和配置适当的硬件设置和软件。通常情况下,添加新客户是一项缓慢、繁琐且极其昂贵的任务。而从好的方面来说,客户的应用程序可以被物理硬件墙隔开。

多租户的虚拟化

将上述单租户模型与图2所示的模型进行比较。

图2 物理多租户、虚拟单租户模型

在图2中有两个客户,他们使用了一台物理服务器运行两个不同实例。但是在这种情况下,实例分别运行在两个独立的虚拟服务器上,实际上它们都在同一台物理服务器上运行。这是使用服务器虚拟化的多租户示例,自从上世纪80年代末和90年代初以来一直在使用。这个理念是每个应用程序驻留在单独的虚拟服务器上,但两个虚拟服务器驻留在相同的物理硬件上。

与单租户模型相比,这一模型提高了迁移应用程序和软件的能力。现在,当新客户加入时,可以使用这台物理服务器的硬件和软件,无需部署全新的物理服务器。需要做的就是启动一个新的虚拟服务器实例。这是一个简单的命令或API调用,通常很容易做到。只要物理服务器有足够的容量,就可以通过简单的API调用启动多个虚拟服务器。而只有在需要额外的物理资源时才需要增加新硬件。

事实上,这个模型如此强大,以至于它是云计算服务的基础。服务器虚拟化允许云计算提供商直接向企业出售虚拟服务器实例,并使他们能够按需启动和停止实例。这是AWS EC2服务的基础,也是Microsoft Azure、谷歌云平台和其他公共云服务的基础。新实例可以租给客户一段时间,然后释放出来供其他客户使用。

客户的信息被虚拟硬件墙隔开,而这些硬件墙可以由虚拟化软件模拟。虽然添加新的客户更容易,但它仍然需要启动新的虚拟服务器实例,这确实会消耗资源。

这种模型称为物理多租户、虚拟单租户模型。这个名字来源于这样一个事实,即每个虚拟实例都被分配给一个拥有自己的软件实例(虚拟单租户)的客户,而虚拟实例都运行在共享的物理硬件上(物理多租户)。

多租户软件

现在将上面的两个模型与图3进行比较。

图3 物理多租户、虚拟多租户模型(又名SaaS模型)

在这个模型中,多个客户共享同一个应用程序实例,都运行在同一个物理服务器和同一个物理基础设施上。在这种情况下,软件提供了客户之间的分离,但不是物理分离,这些客户的应用和信息只是通过软件分隔。

这种模型称为物理多租户、虚拟多租户模型。它被称为软件即服务(SaaS)模型。

在这种情况下,添加新客户非常容易。不需要虚拟或物理硬件。只要底层硬件有足够的资源,就可以通过更新数据库或在配置文件中添加条目来添加额外的客户。添加新客户快速、简单且成本低廉。

多租户安全吗?

单租户比多租户更安全吗?这是一个常见问题,也是一个很难回答的问题。两种模型可能是安全的,也可能是不安全的。当涉及到恶意人士试图攻击软件和应用程序时,这两种模型都需要安全的流程和程序来防止恶意攻击。

但是意外的安全漏洞呢?例如,不小心将一个客户的数据暴露给另一个客户呢?当然,设计不佳的多租户SaaS应用程序确实存在将数据暴露给使用相同共享环境的其他消费者的风险。

要了解这一点,可以通过图4来了解。

图4 跨客户安全问题因租赁类型而异

首先来看一个真正的单租户应用程序,如图4左上角所示。如果一个客户的数据意外地泄露给另一个客户,那么其数据必须在物理服务器之间移动。这并不容易,也很难想象这怎么会意外发生。单租户系统不太可能出现意外的安全问题。

现在来看看虚拟服务器的多租户应用,如图4右上角所示。为了在这个模型中意外暴露数据,数据必须穿越一个强大的虚拟化边界。虽然很难想象这种情况会发生,但这并非不可能。事实上,几年前,Meltdown和Spectre漏洞暴露了服务器虚拟化中的一个缺陷,该缺陷可能导致此类暴露,但该缺陷很快被发现并修复。

在真正的多租户应用程序(SaaS应用程序)中,如图4底部所示,软件错误更有可能暴露客户之间的数据。这是因为客户之间的分离完全存在于应用层,其底层硬件或虚拟化没有分离。从理论上来说,软件错误可能会意外地暴露另一个客户的数据。

这是人们可能会面临的风险。但实际上,当使用来自信誉良好的企业的高质量SaaS应用程序时,这种风险并没有看起来那么大。当然,任何涉及租户之间意外数据泄露的漏洞都会很快得到修复。人们对这个特定问题给予了很多关注。但这是客户在选择SaaS公司并决定向他们提供哪些数据时应该考虑的问题。

为什么要使用多租户?

如果单租户在理论上比多租户更安全,那为什么还要使用多租户呢?

首先,可以从上述用例中推断出,多租户系统更容易扩展,也更容易添加新客户。在单租户系统中添加新客户的成本非常高,因为这包括新硬件、设置、配置、维护、软件、升级等的成本。相比之下,新客户的增量成本在真正的多租户SaaS系统几乎为零,其添加实际上就像向数据库添加一行数据一样简单。多租户SaaS系统允许提供商在他们的应用程序中构建“先试后买”的功能,并在仍然保持盈利的同时实施真正的免费层。这在完整的单租户应用程序和硬件中几乎是不可能的。

当必须处理额外负载时,多租户系统还可以更轻松地向正在运行的应用程序添加资源。如果应用程序需要一定数量的服务器来处理负载,并且流量激增,那么会怎么做?对于具有虚拟多租户硬件的系统,可以在几秒钟内轻松地动态添加额外的服务器容量。对于真正的单租户应用程序,购买、安装和配置物理服务器可能需要数天或数周的时间。

由于在单租户应用程序中增加容量需要很长时间,因此需要提前几个月规划容量。企业必须猜测自己的需求是什么,并且必须有足够的过剩容量来满足可能遇到的任何异常或意外的峰值。这种过剩容量大部分时间都处于闲置状态,从而增加了应用程序运营成本。

使用多租户系统,以通过启动更多虚拟服务器,在需要时动态添加额外容量。由于多租户基础设施中的硬件是共享的,因此多余的容量会在多个客户之间分摊。

应用程序将运行在多租户的硬件环境

应用程序的未来发展是,多租户硬件环境中的多租户虚拟环境中运行多租户应用程序。单租户应用程序将越来越少,并且将主要用于内部部署数据中心环境。多租户系统的安全问题只是所有应用程序整体安全框架的一部分。

多租户是公共云的基础,它是所有主要生产操作环境的支柱,它定义了现在和将来如何构建和部署应用程序。

原文标题:Learn to love the multitenant cloud,作者:Lee Atchison

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】