Inclavare,读作[ˈinklɑveə]
,是该词的拉丁语词源enclave
,意思是将用户的敏感工作负载与不受信任和不可控的基础设施隔离,以满足对使用中数据的保护要求。
Inclavare Containers 是容器运行时的一项创新,采用了在硬件辅助可信执行环境 (TEE) 技术(又名 Enclave)中启动受保护容器的新颖方法,该技术可以防止不受信任的实体,例如云服务提供商 (CSP) 访问使用中的敏感和机密资产。
Inclavare Containers 具有以下显着特点:
- 面向机密计算。Inclavare Containers 提供了用于保护租户工作负载的通用设计。
- 在租户的工作负载和 CSP 控制的特权软件之间创建硬件强制隔离。
- 从不可信云中租户的可信计算库 (TCB) 中删除 CSP。
- 构建通用认证基础设施,说服用户信任基于硬件辅助飞地技术在 TEE 内运行的工作负载。
- 符合 OCI。该组件
rune
是完全兼容与OCI运行规范。 - 与云平台无关。它可以部署在任何公共云 Kubernetes 平台中。
有关Inclavare Containers 中使用的更多技术表达,请参阅术语。
观众
Inclavare Containers 帮助保护租户的机密数据安全,让他们确信他们的数据不会暴露给 CSP 或他们自己的内部人员,并且他们可以轻松地将他们信任的应用程序迁移到云中。
建筑学
Inclavare Containers 遵循经典的容器运行时设计。它以对containerd的适配为第一类,并使用专用的shim-rune与 OCI Runtime rune接口。在下游,init-runelet采用了一种新颖的方法来启动enclave 运行时和在硬件强制 enclave 中的可信应用程序。
Inclavare Containers 的主要组件是:
- rune
rune 是一个 CLI 工具,用于根据 OCI 规范在容器中生成和运行 enclave。符文已经写入OCI 运行时实现列表。 - shim-rune
shim-rune 位于 containerd 和 之间rune
,进行超出正常shim
基础的enclave 签名和管理。特别是shim-rune,rune
可以组成一个基本的enclave容器化栈,用于机密计算,为机密计算的使用提供了低门槛和与普通容器相同的体验。有关详细信息,请参阅此文档。 - enclave runtime
的后端rune
是一个名为 enclave runtime 的组件,它负责加载和运行 enclave 内受信任和受保护的应用程序。rune
enclave 运行时之间的接口是Enclave Runtime PAL API,它允许通过定义良好的函数调用 enclave 运行时。机密计算软件可以从这个接口中受益,与云原生生态系统进行交互。
一类典型的飞地运行时实现基于库操作系统。目前,推荐的与之交互的 enclave 运行时rune
是Occlum,这是一种用于英特尔 SGX 的内存安全、多进程库操作系统。另一个典型的 enclave 运行时类别是带有 Intel SGX 的WebAssembly Micro Runtime (WAMR),这是一个占用空间很小的独立 WebAssembly (WASM) 运行时,包括一个 VM 核心、一个应用程序框架和一个 WASM 应用程序的动态管理。
此外,您可以使用您喜欢的任何编程语言和 SDK(例如Intel SGX SDK)编写自己的 enclave 运行时,只要它实现了 Enclave Runtime PAL API。
认证
Inclavare Containers 实现了 Enclave Attestation Architecture (EAA),这是一种通用的跨平台远程证明基础架构。EAA 可以证明敏感工作负载正在基于机密计算技术的真正可信的硬件 TEE 上运行。EAA 的正式设计将针对 RFC 发布。
EAA的主要成分是:
- Enclave-TLS
Enclave-TLS
增强了标准 TLS 以支持基于机密计算技术的异构硬件 TEE 之间的可信通信,该技术由ra-tls(已弃用)演变而来。即使使用非硬件 TEE 平台Enclave-TLS
也可以通过经过认证和安全的通道与硬件 TEE(例如 SGX Enclave)通信以传输敏感信息。换句话说,TCB 的边界从执行环境扩展到网络传输Enclave-TLS
。此外,Enclave-TLS
具有可扩展的模型来支持各种硬件TEE。 - 机密容器
机密容器以飞地运行时的形式Occlum
响应来自 的请求Inclavared
,然后将机密容器的证明证据发回给Inclavared
。机密容器扮演证明者的角色。 - Inclavared
Inclavared
负责转发机密容器和Shelter
. 通信过程由经过证明的Enclave-TLS
通道保护。 - Shelter
Shelter
作为部署在云外的验证者的角色,记录 enclave 运行时的启动测量,然后建立经过证明的Enclave-TLS
通道与Inclavared
. 最终,它检索有关 enclave 运行时的证据以进行验证。
非核心组件
- sgx-tools
sgx-tools 是一个 CLI 工具,用于与 Intel SGX AESM 服务交互以检索各种材料,例如启动令牌、引用 enclave 的目标信息、enclave 引用和来自 IAS 的远程证明报告。有关其用法的详细信息,请参阅本教程。 - epm
epm 是一项服务,用于管理缓存池以优化 enclave 的启动时间。有关其用法的详细信息,请参阅本教程。
路线图
有关详细信息,请参阅Inclavare Containers Roadmap。本文档概述了 Inclavare Containers 项目的开发路线图。
建造
建议使用Inclavare Containers 开发docker 镜像从头开始构建 Inclavare Containers。
请注意,启动 Inclavare Containers 开发 docker 镜像的环境必须能够支持硬件 TEE 并安装相应的软件堆栈,例如 Intel SGX 和Intel SGX SDK & PSW for Linux。
运行 docker 镜像的确切命令需要根据 SGX 设备驱动程序的类型明确指定。
对于传统的树外驱动程序:
docker run -it -v /var/run/aesmd:/var/run/aesmd \ -设备 /dev/isgx \ inclavarecontainers/dev: $version - $os
对于 DCAP 和树内驱动程序:
docker run -it -v /var/run/aesmd:/var/run/aesmd \ -v /dev/sgx_enclave:/dev/sgx/enclave -v /dev/sgx_provision:/dev/sgx/provision \ inclavarecontainers/dev: $version - $os
在哪里:
$version
表示正在使用的 Inclavare Containers 版本。$os
表示开发docker镜像的操作系统类型,可能是ubuntu18.04、centos8.2或alinux2。
请注意在 Inclavare Containers 开发 docker 映像启动的开发容器中运行下面列出的命令。
- 下载最新的 Inclavare Containers 源代码
mkdir -p " $WORKSPACE " cd " $WORKSPACE " git clone https://github.com/alibaba/inclavare-containers
- 构建 Inclavare 容器
cd inclavare-containers #构建 rune、shim-rune、epm、sgx-tools、enclave-tls、shelter 和 inclavared make
安装
在您的系统上构建 Inclavare Containers 后,您可以使用以下命令在您的系统上安装 Inclavare Containers。
须藤制作安装
{rune,shim-rune,epm,sgx-tools,shelter,inclavared}
将安装到/usr/local/bin/{rune,containerd-shim-rune-v2,epm,sgx-tools,shelter,inclavared}
您的系统上。Enclave-TLS SDK 将安装到/opt/enclave-tls
. {enclave-tls-server,enclave-tls-client}
将安装到/usr/share/enclave-tls/samples
.
如果您不想从最新的源代码构建和安装 Inclavare Containers。我们还提供 RPM/DEB 存储库来帮助您快速安装 Inclavare Containers。请首先查看有关如何配置存储库的步骤。然后您可以运行以下命令在您的系统上安装 Inclavare Containers。
在 CentOS 8.2 上
sudo yum install rune shim-rune epm sgx-tools enclave-tls 避难所 inclavared
在 Ubuntu 18.04 服务器上
sudo apt-get install rune shim-rune epm sgx-tools enclave-tls shelter inclavared
整合
Inclavare Containers 可以与 dockerd、containerd 和pouchd 集成。
前者的目标是使用 docker 来部署 Inclavare Containers。具体来说,需要构建容器的图像时安装的首选聚集地运行,然后通过启动飞地运行rune
和飞地运行特定的PAL。
后者的目标是使用 K8s 来部署 Inclavare Containers。在这种情况下,shim-rune
并rune
可以组成一个飞地集装箱堆,所以飞地运行时不需要和建设集装箱图像时,有相同的经历与普通的容器提供安装。
码头工人
rune
在 dockerd 配置文件中添加相关配置,例如/etc/docker/daemon.json
,在您的系统上。
{ "runtimes": { "rune": { "path": "/usr/local/bin/rune", "runtimeArgs": [] } } }
然后在您的系统上重新启动 dockerd。
您可以检查是否rune
正确启用:
docker info | grep rune
注意systemd默认没有安装,请手动启动dockerd:
dockerd -b docker0 --storage-driver=vfs &
集装箱
Inclavare Containers 被添加到containerd的采用者列表中。此外,shim-rune
支持containerd shim v2 API。所以你可以shim-rune
在containerd
配置文件中添加相关的配置,例如/etc/containerd/config.toml
,在你的系统上。
[plugins.cri.containerd] ... [plugins.cri.containerd.runtimes.rune] runtime_type = "io.containerd.rune.v2"
然后在您的系统上重新启动 containerd。
小袋
在 pouchd 配置文件中添加相关配置,例如/etc/pouch/config.json
,在您的系统上。
"add-runtime": { "rune": { "path": "/usr/local/bin/rune", "runtimeArgs": null, "type": "io.containerd.rune.v2" }, ... }
在哪里:
- @path:指定 OCI Runtime 的路径,如
rune
. - @runtimeArgs:指定pouchd运行时的参数,如
--platform
,--network
。 - @type:从以下候选中指定填充模板:
- io.containerd.rune.v2:对应shim-rune
- io.containerd.runtime.v1.linux:对应containerd-shim
- io.containerd.runc.v1:对应containerd-shim-runc-v1
然后在您的系统上重新启动 pouchd。
您可以检查是否rune
正确启用:
pouch info | grep rune
部署
Inclavare Containers 可以与 Occlum LibOS 和 WebAssembly Micro Runtime (WAMR) 一起部署。
Occlum LibOS
请参考本指南在 Kubernetes 集群中部署 enclave 容器。目前提供了基于OpenJDK 11、Dragonwell和Golang 的Hello-world 应用镜像和 Web 应用镜像。这些图像不包含 enclave 运行时。它们仅用于使用 containerd 进行部署。
请参阅本指南以使用pouchd
.
WebAssembly 微运行时 (WAMR)
提供了 WebAssembly Micro Runtime (WAMR) 应用程序映像。WAMR 镜像包含 enclave 运行时,因为它不适应 shim-rune 并使用离云签名。它仅用于与 dockerd 的部署。