云原生机密计算和 enclave 运行时生态系统inclavare-containers

简介: 一种新颖的容器运行时,又名机密容器,用于云原生机密计算和 enclave 运行时生态系统。

image.png

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 中的可信应用程序。

image.png

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 内受信任和受保护的应用程序。runeenclave 运行时之间的接口是Enclave Runtime PAL API,它允许通过定义良好的函数调用 enclave 运行时。机密计算软件可以从这个接口中受益,与云原生生态系统进行交互。
    一类典型的飞地运行时实现基于库操作系统。目前,推荐的与之交互的 enclave 运行时runeOcclum,这是一种用于英特尔 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 发布。

image.png

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 映像启动的开发容器中运行下面列出的命令。

  1. 下载最新的 Inclavare Containers 源代码
mkdir -p " $WORKSPACE "
 cd  " $WORKSPACE " 
git clone https://github.com/alibaba/inclavare-containers
  1. 构建 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-runerune可以组成一个飞地集装箱堆,所以飞地运行时不需要和建设集装箱图像时,有相同的经历与普通的容器提供安装。

码头工人

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-runecontainerd配置文件中添加相关的配置,例如/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

请参考本指南运行Occlumrune和泊坞窗。

请参考本指南在 Kubernetes 集群中部署 enclave 容器。目前提供了基于OpenJDK 11DragonwellGolang 的Hello-world 应用镜像和 Web 应用镜像。这些图像不包含 enclave 运行时。它们仅用于使用 containerd 进行部署。

请参阅本指南以使用pouchd.

WebAssembly 微运行时 (WAMR)

请参考本指南运行WAMRrune

提供了 WebAssembly Micro Runtime (WAMR) 应用程序映像。WAMR 镜像包含 enclave 运行时,因为它不适应 shim-rune 并使用离云签名。它仅用于与 dockerd 的部署。

相关文章
|
9月前
|
存储 Cloud Native 关系型数据库
云原生之使用docker部署ZPan个人网盘系统
云原生之使用docker部署ZPan个人网盘系统
225 1
|
2天前
|
Cloud Native 测试技术 数据安全/隐私保护
云原生之使用Docker部署Teedy轻量级文档管理系统
【5月更文挑战第8天】云原生之使用Docker部署Teedy轻量级文档管理系统
13 1
|
2月前
|
Kubernetes Cloud Native Devops
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
58 1
|
2月前
|
弹性计算 运维 Kubernetes
云原生K8S场景自动化响应ECS系统事件
客户云原生K8S场景下,通过社区开源NPD+Draino+Autoscaler零开发,对接响应ECS主动运维事件,通过自动响应事件减少非预期宕机。
|
5月前
|
Prometheus Kubernetes Cloud Native
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
199 0
|
5月前
|
Kubernetes Cloud Native Linux
云原生|kubernetes |kubelet服务加入系统守护进程supervisor(centos7系统下演示通过)
云原生|kubernetes |kubelet服务加入系统守护进程supervisor(centos7系统下演示通过)
64 0
|
5月前
|
Kubernetes Cloud Native 网络协议
云原生|kubernetes部署和运行维护中的错误汇总(不定时更新)
云原生|kubernetes部署和运行维护中的错误汇总(不定时更新)
318 0
|
10月前
|
Cloud Native 大数据
阿里云最新产品手册——阿里云核心产品——云原生大数据计算服务——云原生、大数据、计算的结合
阿里云最新产品手册——阿里云核心产品——云原生大数据计算服务——云原生、大数据、计算的结合自制脑图
178 1
|
5月前
|
弹性计算 人工智能 Cloud Native
新开普副总裁焦征海:云原生计算基础设施助力新开普创新提速
新开普副总裁焦征海在【云服务器 & 计算服务】专场中带来了题为《云原生计算基础设施助力新开普创新提速》的主题演讲,围绕新开普业务上云之路、倚天ECS实例降本实践以及未来业务展望等相关话题展开。
|
7月前
|
Prometheus Kubernetes Cloud Native
云原生应用程序运行时 Kyma 的主要特性介绍
云原生应用程序运行时 Kyma 的主要特性介绍
50 0

热门文章

最新文章