資安

雲原生機密計算和 enclave 運行時生態系統inclavare-containers

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 的部署。

Leave a Reply

Your email address will not be published. Required fields are marked *