全部產品
Search
文件中心

Elastic Compute Service:使用Enclave構建機密計算環境

更新時間:Jun 19, 2024

本文介紹如何使用阿里雲虛擬化Enclave建立一個可信的隔離空間,從而保護您的應用程式和資料的安全。

背景資訊

資料一般分為三種形態:待用資料、傳輸中的資料以及使用中的資料。前兩者可以通過加密等方式來保障資料安全;而使用中的資料的安全性保障十分困難,目前一般使用機密計算(Confidential Computing)來保護使用中的資料的安全性。

阿里雲虛擬化Enclave在ECS執行個體內部提供一個可信的隔離空間,將合法軟體的安全操作封裝在一個Enclave中,保障您的代碼和資料的機密性與完整性,不受惡意軟體的攻擊。

說明

阿里雲虛擬化Enclave正在邀測中。您可以提交工單申請使用。

阿里雲虛擬化Enclave適用於對敏感和機密資料有強保護需求的業務,例如金融服務、互連網、醫學等。

Enclave的工作原理

使用阿里雲虛擬化Enclave構建機密計算環境的工作原理,是在ECS執行個體(即主VM)內切分計算資源(包括vCPU和記憶體),建立一個Enclave VM(簡稱EVM)作為可信執行環境。EVM的安全性保障體現在以下幾方面:

  • 由底層虛擬化技術提供安全隔離,EVM和主VM之間隔離,並且和其他ECS執行個體也隔離。

  • EVM運行獨立的、定製化的可信作業系統,沒有持久化儲存、互動式串連或外部網路通路,僅允許通過本地安全通道(基於vsock)與主VM進行通訊,最大程度縮小攻擊面。您可以將涉及機密資料的應用放入EVM中運行,通過安全調用的形式與運行在主VM上的應用進行互動。

阿里雲虛擬化Enclave提供的安全性由多個方面結合實現。底層基於帶有TPM/TCM晶片的第三代神龍架構,且為EVM提供vTPM/vTCM裝置來增強其安全性和可信能力;上層提供高相容性的SDK,方便您快速搭建Enclave環境並使用。在可信證明能力方面,您可以對運行在機密執行環境中的代碼進行驗證,例如藉助SDK,機密應用可在運行時產生證明材料(包括平台、應用資訊、簽名等),再通過遠程證明服務端(可結合KMS)驗證證明材料的有效性。當主VM切分資源給EVM,並且EVM開始運行時,底層會執行資源訪問隔離,確保主VM無法訪問這些已經切分出去的vCPU或記憶體資源,保障EVM的正常運行和私密性。

使用限制

  • 僅g7、c7、r7支援阿里雲虛擬化Enclave。

  • 每台ECS執行個體只允許建立一個Enclave。

  • 使用Enclave前,您必須至少為主VM保留一個處理器物理核以及部分記憶體,剩餘的處理器和記憶體資源可以靈活地分配給Enclave。如果您開啟了超執行緒,則代表保留了屬於一個物理核的兩個處理器超執行緒,因此啟用Enclave特性的ECS執行個體至少需要具備4 vCPU。

其他通用限制,請參見使用限制

通過工具集使用Enclave

  1. 安裝Enclave Runtime工具集。

    Enclave Runtime工具集負責在主VM上管理Enclave的生命週期,包括Enclave的啟動和終止。您可以通過以下任一方式安裝:

    • 在建立ECS執行個體時勾選Enclave,自動安裝Enclave Runtime工具集。隨執行個體安裝

      說明

      通過OpenAPI建立Enclave機密計算的ECS執行個體時,只能調用RunInstances實現,CreateInstance目前不支援設定機密計算模式參數(SecurityOptions.ConfidentialComputingMode)。

    • 在建立ECS執行個體後,運行以下命令,在主VM中安裝Enclave Runtime工具集。

      sudo rpmkeys --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7
      sudo yum install -y alinux-release-experimentals
      sudo yum install -y https://enclave.oss-cn-hangzhou.aliyuncs.com/de-platform-runtime-0.1.0-1.2.al7.x86_64.rpm

    安裝Enclave Runtime後,本地服務會嘗試自動拉起Enclave,預設的Enclave鏡像儲存於/usr/local/share/dragonfly/image.bin,您可以修改設定檔/etc/enclave.conf來變更鏡像儲存所在路徑。設定檔還提供了更多的配置選項,包括分配給Enclave的vCPU和記憶體資源等。

  2. 初次手動安裝後,運行以下命令將Enclave鏡像下載儲存到本地。

    wget -O /usr/local/share/dragonfly/image.bin \
      https://enclave-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com/download/linux/enclave_image/x86_64/0.1.0/image-0.1.0.bin
  3. 運行systemctl命令,對Enclave進行操作。

    systemctl status de_platform_service # 查看運行狀態
    systemctl start de_platform_service # 啟動服務
    systemctl restart de_platform_service # 重啟服務
    systemctl stop de_platform_service # 關閉服務

通過SDK使用Enclave

阿里雲虛擬化Enclave提供了SDK,讓您在啟用了Enclave的ECS執行個體上開發自己的應用。阿里雲虛擬化Enclave還提供了一組與SGX-SDK相容的API介面定義和程式碼程式庫,如果您已經有SGX應用,則只需經過少量遷移工作即可將應用運行在Enclave平台上。

  1. 在開發環境中準備以下Dockerfile檔案。

    FROM registry.cn-hangzhou.aliyuncs.com/alinux/aliyunlinux
    RUN rpmkeys --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 \
        && yum install -y alinux-release-experimentals \
        && yum install -y devtoolset-9 wget openssl-devel zlib-devel patch git cmake3 \
          https://enclave.oss-cn-hangzhou.aliyuncs.com/de-platform-runtime-0.1.0-1.2.al7.x86_64.rpm \
          https://enclave.oss-cn-hangzhou.aliyuncs.com/teesdk-0.1.0-1.1.al7.x86_64.rpm \
        && yum clean all -y \
        && wget -O /devtoolset9_enable.sh \
          https://enclave.oss-cn-hangzhou.aliyuncs.com/devtoolset9_enable.sh \
        && chmod +x /devtoolset9_enable.sh
    WORKDIR /opt/app-root/src
    ENTRYPOINT ["/devtoolset9_enable.sh"]
  2. 運行以下命令,利用docker建立Enclave鏡像。

    docker build -t deenclave/sdk-builder .

    執行成功後,自動產生名為deenclave/sdk-builder的鏡像。您只需使用該鏡像,即可進行DE Enclave的應用構建。阿里雲提供了SDK樣本供您參考。

SDK樣本一:啟動容器構建應用

阿里雲提供了SDK樣本程式,位於/opt/alibaba/teesdk/desdk/examples/SampleMath。該樣本程式接收外部輸入的兩個平面座標點,並在Enclave內計算兩點之間的直線距離,最後將計算結果輸出至控制台。您可以按照以下步驟完成樣本操作。

  1. 運行以下命令,通過構建的docker鏡像deenclave/sdk-builder啟動容器。

    docker run -it \
      -v /opt/alibaba/teesdk/desdk/examples/SampleMath:/opt/app-root/src:z \
      deenclave/sdk-builder
  2. 在啟動後的容器執行個體內,運行以下命令配置環境變數。

    source /opt/alibaba/teesdk/desdk/environment
  3. 在啟動後的容器執行個體內,運行cmake命令對範例程式碼執行構建。

    cmake3 -B build && \
    cmake3 --build build

    構建成功後,應用和Enclave所在路徑分別為/opt/app-root/src/build/SampleMath/App/app/opt/app-root/src/build/SampleMath/Enclave/enclave.signed.so

  4. 將應用上傳至主VM。

  5. 在主VM上啟動Enclave,並執行範例程式碼SampleMath,然後查看執行結果。

    [root@AliYun ~]# ./app
    A(3,4) -> B(1,8) -> 4.47214
    A(6,9) -> B(6,2) -> 7
    A(3,3) -> B(7,5) -> 4.47214

SDK樣本二:通過Attestation產生證明材料

Attestation是一個認證的過程,您可以通過它來確保運行在Enclave中的鏡像、作業系統和應用程式代碼沒有被修改或篡改。您可以在自己的Enclave應用代碼內調用SDK提供的API介面產生證明材料,並將證明材料上傳至遠程證明服務進行驗證,遠程證明服務會將驗證結果返回給調用者。

阿里雲提供了以下樣本,您可以使用與SDK樣本一中SampleMath相同的方式構建並運行這些樣本。

  • 產生證明材料的樣本程式,位置在/opt/alibaba/teesdk/desdk/examples/QuoteGenerationSample

  • 驗證證明材料的樣本程式,位置在/opt/alibaba/teesdk/desdk/examples/QuoteVerificationSample