本文是 https://aws.amazon.com/cn/blogs/security/confidential-computing-an-aws-perspective/ 的翻译,翻译后内容不代表AWS官方。

全球各地的客户--从政府和高度管制的行业到小型企业和初创企业--都把他们最敏感的数据和应用程序交给亚马逊云科技(AWS)。在AWS,保护客户工作负载的安全和机密,同时帮助他们满足隐私和数据主权的要求,是我们最优先的任务。我们在安全技术方面的投资和严格的运营实践,甚至可以满足并超越我们最苛刻的客户在机密计算和数据隐私方面的标准。多年来,我们在专门的技术和系统方面进行了许多长期投资,以满足我们客户在安全和保密性方面不断提高的要求。

在过去的一年里,业界及我们的客户对机密计算这个短语的越来越感兴趣。我们注意到,这个短语适用于解决非常不同问题的各种技术,导致人们对它的实际含义感到困惑。本着代表客户进行创新的使命,我们想为您提供我们对机密计算的看法。

在AWS,我们将机密计算定义为使用专门的硬件和相关的固件来保护客户的代码和数据在处理过程中不受外界访问。机密计算在安全和隐私层面有两个不同的维度。最重要的维度--我们最常听到的客户的主要关切--是保护客户的代码和数据不受底层云基础设施运营商的影响。第二个维度是客户能够将自己的工作负载划分为信任度较高和信任度较低的组件,或者设计一个系统,允许不信任或不能完全信任对方的各方建立密切合作的系统,同时保持各方代码和数据的保密性。

在这篇文章中,我将阐述AWS Nitro系统如何在本质上满足第一个维度的要求,向使用基于Nitro的Amazon EC2实例的客户提供这些保护,而不要求客户方进行任何代码或工作负载的修改。我还将阐述AWS Nitro Enclaves如何为客户提供一种方法,以使用熟悉的工具集和编程模型来满足第二个层面的要求。在我们讨论细节之前,让我们先详细了解一下Nitro系统。

什么是Nitro系统?

Nitro系统是所有现代亚马逊EC2实例的底层平台,是我们代表客户进行发明和创新,为他们的应用程序提供额外的保密性和隐私的一个很好的例子。十年来,我们一直通过将越来越多的虚拟化功能转移到专用硬件和固件上,来在重塑EC2虚拟化堆栈,而Nitro系统就是这种持续不断创新的结果。Nitro系统由三个主要部分组成:Nitro卡、Nitro安全芯片和Nitro管理程序(Hypervisor)。Nitro卡是具有计算能力的专用硬件组件,可执行I/O功能,如用于Amazon VPC的Nitro卡、用于EBS的Nitro卡,以及用于EC2实例存储的Nitro卡。

Nitro卡--由我们的内部芯片开发子公司Annapurna实验室设计、制造和测试--使我们能够将关键的虚拟化功能从运行EC2实例的EC2服务器--底层主机基础设施上移开。我们在设计Nitro系统时,使用了Nitro安全芯片这一基于硬件的信任根,使我们能够对系统进行加密测量和验证。这提供了比传统硬件或虚拟化系统所能达到的更高的信任度。Nitro管理程序是一个轻量级的管理程序,可以管理内存和CPU分配,并提供了几乎与裸机无异的性能(我们最近在AWS Nitro系统的裸机性能中与我们的裸机实例进行了比较)。

从Nitro的角度看机密计算

Nitro系统提供的保护主要有三种类型。前两种保护是机密计算的关键维度的基础--客户从云运营商和云系统软件获得的保护,第三种保护加强了第二维度--将客户的工作负载划分为更可信和不太可信的部分。

1. 来自云运营商的保护。

在AWS,我们设计我们的系统以确保客户之间以及客户和AWS之间的工作负载保密性。我们设计的Nitro系统没有运营商访问。有了Nitro系统,任何系统或个人都不能登录EC2服务器(底层主机基础设施)、读取EC2实例的内存、或访问实例存储或加密EBS卷上存储的任何数据。如果任何AWS运营商,包括那些拥有最高权限的操作者,需要对EC2服务器进行维护工作,他们只能通过使用一套严格限制的经过认证、授权和审计的管理API来实现。这些API都不具备访问EC2服务器上客户数据的能力。由于这些技术限制是内置于Nitro系统本身的,任何AWS运营商都无法绕过这些控制和保护措施。为了在内存接口层面对物理攻击提供额外的深纵深防御,我们在很多EC2实例上提供内存加密。目前,所有基于Graviton2的实例(T4g、M6g、C6g、C6gn、R6g、X2g)和基于Intel的M6i实例都默认启用了内存加密,这些实例具有全内存加密(TME)。即将推出的基于AMD Milan处理器的EC2平台将具有安全内存加密(SME)。

2. 来自AWS系统软件的保护。

Nitro系统的独特设计利用低级别的、基于硬件的内存隔离来消除对客户内存的直接访问,同时消除在裸机实例中对管理程序的需求。

· 对于虚拟化的EC2实例(如图1所示),Nitro管理程序与底层硬件虚拟化系统协调,以创建相互隔离的虚拟机,并与管理程序本身隔离。网络、存储、GPU和加速器访问使用SR-IOV,这项技术允许实例使用管理程序安全创建的直通连接与硬件设备直接互动。其他EC2功能,如实例快照和休眠,都是由采用端到端内存加密的专用代理来推动的,AWS运营商无法访问。

图1:虚拟化的EC2实例

· 对于裸机EC2实例(如图2所示),EC2服务器上没有管理程序,客户可以获得对所有底层的专用和独占访问。裸机实例是为那些希望访问物理资源的客户设计的,这些应用可以利用低级别的硬件功能--如性能计数器和英特尔® VT--这些功能在虚拟化环境中并不总是可用或完全支持,同时也适用于打算直接在硬件上运行的应用,或在仅在非虚拟化环境中才提供的许可和支持。裸机实例具有与虚拟化实例相同的存储、网络和其他EC2功能,因为Nitro系统使用专用硬件和特制的系统固件,以隔离和独立的方式实现了通常由虚拟化层提供的所有系统功能。我们使用相同的技术来创建亚马逊EC2 Mac实例。由于Nitro系统在独立的总线上运行,我们可以将Nitro卡直接连接到苹果的Mac mini硬件上,而不需要进行任何其他硬件修改。

图2:裸机EC2实例

3. 保护敏感的计算和数据元素不受客户自己的操作员和软件的影响。

Nitro Enclaves提供了机密计算的第二个维度。Nitro Enclaves是一个经过加固和高度隔离的计算环境,从客户的EC2实例启动,并连接到客户的EC2实例。默认情况下,任何用户(甚至是root或管理员用户)或运行在客户EC2实例上的软件都不能对enclave进行交互式访问。Nitro Enclaves具有加密证明功能,允许客户验证所有部署在其enclave上的软件已经过验证并未被篡改过。Nitro enclave与普通的基于Nitro的EC2实例一样,具有来自云运营商的相同保护水平,但增加了客户将自己的系统划分为具有不同信任水平组件的能力。Nitro enclave提供了一种保护客户代码和数据中特别敏感的元素的手段,不仅可以防止AWS运营商,还可以防止客户自己的维护员和其他软件。由于Nitro Enclaves的主要目标是保护客户自己的用户和EC2实例上的软件,Nitro enclave认为EC2实例位于其信任边界之外。因此,Nitro enclave不与客户实例共享内存或CPU核心。为了显著减少攻击面,Nitro enclave没有IP网络,也不提供持久性存储。我们将Nitro Enclaves设计成一个所有开发人员都可以高度使用的平台,不需要具备高级密码学知识或CPU微架构专业知识,因此开发人员可以快速、轻松地构建处理敏感数据的应用程序。同时,我们专注于创造一个熟悉的开发体验,以便开发者在Nitro enclave中运行的可信代码,就像在任何Linux环境中编写代码一样容易。

总结

总而言之,Nitro系统在虚拟化和隔离方面的独特方法,使我们的客户能够在任何时候都保证敏感数据处理与AWS运营商和软件的安全和隔离。它提供了内在的、默认的、对系统软件和云运营商的防护满足了机密计算最重要的维度,同时它也通过Nitro Enclaves来提供对客户软件和操作员的防护。