日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于Docker使用Inclavare Containers機密容器

重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

Inclavare Containers是工業界首個面向機密計算場景的開源容器運行時,它在基于硬件的可信執行環境中啟動受保護的容器,以防止不受信任的實體(例如:云服務商)訪問您的敏感數據。在基于SGX的機密計算環境中,您可以基于Inclavare Containers靈活、便捷地部署機密容器。本文主要為您介紹如何在Docker中基于Inclavare Containers部署和使用機密容器(簡稱Inclavare Containers機密容器)。

前提條件

  • 已創建一臺使用Alibaba Cloud Linux鏡像的安全增強型實例。

    創建安全增強型實例時,您需要選擇特定的鏡像以生效安全特性。更多信息,請參見創建可信實例。例如,創建ECS實例時,實例規格選擇安全增強型ecs.g7t、公共鏡像選擇Alibaba Cloud Linux 3.2104 64位 UEFI版進行創建。

  • 在已創建的安全增強型實例中構建SGX加密計算環境。具體操作,請參見構建SGX加密計算環境

背景信息

在Docker中雖然可以使用常規技術部署和使用機密容器,但需要您掌握機密計算領域的專業知識,并按照SGX SDK應用開發規范開發和構建鏡像。而Inclavare Containers能幫您省去這些復雜過程,降低機密計算的使用門檻,靈活對接不同類型的Enclave運行時形態,同時保持和普通容器一樣的使用體驗。更多信息,請參見inclavare-containers

操作步驟

步驟一:搭建Inclavare Containers機密容器運行環境

  1. 登錄安全增強型實例。

    具體操作,請參見連接方式概述

  2. 安裝rune。

    rune是符合OCI Runtime規范的命令行工具,用于在容器里創建和運行Enclave。更多信息,請參見runeruntime-container

    不同發行版的Alibaba Cloud Linux安裝命令也不同,具體說明如下:

    • 如果您使用的是Alibaba Cloud Linux 2.1903 LTS 64位 UEFI版操作系統,需運行以下命令安裝rune:

      sudo yum-config-manager --add-repo https://mirrors.openanolis.cn/inclavare-containers/alinux2-repo && \
        sudo rpm --import https://mirrors.openanolis.cn/inclavare-containers/alinux2-repo/RPM-GPG-KEY-rpm-sign && \
        sudo yum install -y rune
    • 如果您使用的是Alibaba Cloud Linux 3.2104 64位 UEFI版操作系統,需運行以下命令安裝rune:

      sudo yum-config-manager --add-repo https://mirrors.openanolis.cn/inclavare-containers/alinux3-repo && \
        sudo rpm --import https://mirrors.openanolis.cn/inclavare-containers/alinux3-repo/RPM-GPG-KEY-rpm-sign && \
        sudo yum install -y rune
  3. 運行以下命令,查看rune是否安裝成功。

    which rune

    返回結果如下所示,表示rune已安裝成功。

    /usr/local/bin/rune
  4. 運行以下命令,安裝Occlum軟件棧。

    Occlum是Inclavare Containers當前支持的Enclave運行時,而Inclavare Containers需要Enclave運行時的配合才能運行機密容器。更多信息,請參見occlum

    sudo yum install -y occlum-pal
  5. 運行以下命令,查看Occlum是否安裝成功。

    ls /opt/occlum/build/lib

    返回結果如下所示,表示Occlum已安裝成功。

    libocclum-pal.so.0.21.0

步驟二:為Docker配置OCI運行時rune

  1. 安裝Docker。

    具體操作,請參見部署Docker

  2. 為Docker配置OCI運行時rune。

    1. 運行以下命令,在Docker配置文件中添加rune的相關配置。

      例如,系統內的Docker配置文件/etc/docker/daemon.json

      sudo mkdir -p /etc/docker && \
      sudo tee /etc/docker/daemon.json > /dev/null <<EOF
      {
       "runtimes": {
        "rune": {
         "path": "/usr/local/bin/rune",
         "runtimeArgs": []
         }
        }
      }
      EOF
    2. 運行以下命令,重啟Docker守護進程。

      警告

      默認情況下,當Docker守護進程終止時,它會關閉正在運行的容器。建議您在重啟Docker守護進程之前,啟用live restore功能以確保守護進程不可用時容器仍在運行。更多信息,請參見Keep containers alive during daemon downtime

      sudo systemctl restart docker
    3. 運行以下命令,檢查rune容器運行時是否成功配置。

      sudo docker info | grep rune
      • 如果您使用的是Alibaba Cloud Linux 2.1903 LTS 64位 UEFI版操作系統,返回結果如下所示,表示rune容器運行時成功配置。

         Runtimes: rune io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
      • 如果您使用的是Alibaba Cloud Linux 3.2104 64位 UEFI版操作系統,返回結果如下所示,表示rune容器運行時成功配置。

         Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc rune

步驟三:構建Inclavare Containers機密容器鏡像

  1. 運行以下命令,啟動Occlum開發鏡像。

    該操作是為了確保后續構建機密容器鏡像的步驟都在Occlum開發鏡像里進行。關于Occlum開發鏡像的更多信息,請參見occlum 0.21.0

    sudo mkdir "$HOME/rune_workdir" && \
    sudo docker run -it --privileged \
        -v /dev/sgx_enclave:/dev/sgx/enclave \
        -v /dev/sgx_provision:/dev/sgx/provision \
        -v "$HOME/rune_workdir":/root/rune_workdir \
        occlum/occlum:0.21.0-ubuntu18.04
  2. 運行以下命令,編寫測試用的Hello World代碼。

    cd /root/rune_workdir && \
    cat << EOF > hello_world.c
    #include <stdio.h>
    #include <unistd.h>
    
    void main(void)
    {
        while (1) {
            printf("Hello World!\n");
            fflush(stdout);
            sleep(5);
        }
    }
    EOF
  3. 構建并打包Hello World可信應用。

    1. 運行以下命令,使用Occlum工具鏈編譯程序。

      occlum-gcc -o hello_world hello_world.c
    2. 運行以下命令,初始化Occlum instance。

      occlum new occlum_instance
    3. 運行以下命令,生成Occlum FS image和Occlum SGX Enclave。

      cd occlum_instance && \
          cp ../hello_world image/bin/ && \
          openssl genrsa -aes128 -out occlum_key.pem -3 3072 && \
          occlum build --sign-key occlum_key.pem

      運行命令后,請根據如下提示信息設置合適的保護密碼,密碼將用于加密保護簽名私鑰。

      Enter pass phrase for occlum_key.pem:
      Verifying - Enter pass phrase for occlum_key.pem:
    4. 運行以下命令,設置Production Enclave。

      Occlum默認會生成Debug Enclave,因此在實際業務環境中,你需要參考以下命令將Enclave設置為Production Enclave。關于Debug Enclave和Production Enclave的區別,請參見debugging-intel-sgx-enclaves-in-windows-737361.pdf

      sed -i 's/"debuggable": true/"debuggable": false/g' Occlum.json

      當您運行以上命令修改Occlum.json配置文件后,您還需要重新執行以下命令生成Production Enclave。

      occlum build --sign-key occlum_key.pem
    5. 運行以下命令,打包Hello World可信應用,并將可信應用拷貝到rune_workdir目錄。

      occlum package occlum_instance.tar.gz && \
          cp occlum_instance.tar.gz /root/rune_workdir
  4. 構建機密容器鏡像。

    1. 運行以下命令,退出Occlum開發鏡像。

      exit
    2. 運行以下命令,編寫Dockerfile。

      cd $HOME/rune_workdir && \
      sudo tee Dockerfile > /dev/null <<EOF
      FROM scratch
      ADD occlum_instance.tar.gz /
      ENTRYPOINT ["/bin/hello_world"]
      EOF
    3. 運行以下命令,構建機密容器鏡像。

      sudo docker build . -t occlum-app

步驟四:使用Inclavare Containers機密容器

運行以下命令,運行Inclavare Containers機密容器,并查看容器運行日志。

sudo docker run -it --rm --runtime=rune \
  -e ENCLAVE_TYPE=intelSgx \
  -e ENCLAVE_RUNTIME_PATH=/opt/occlum/build/lib/libocclum-pal.so.0.21.0 \
  -e ENCLAVE_RUNTIME_ARGS=occlum_instance \
  -e ENCLAVE_RUNTIME_LOGLEVEL="off" \
  -e OCCLUM_RELEASE_ENCLAVE=1 \
  occlum-app

以上命令中相關參數說明如下:

  • ENCLAVE_TYPE:指定要使用的Enclave硬件類型,當前驗證環境請選擇類型為intelSgx。

  • ENCLAVE_PATH:指定要啟動的Enclave運行時PAL的路徑。

  • ENCLAVE_ARGS:指定Enclave運行時PAL的特定參數。如果有多個參數,需用半角逗號(,)分隔。

  • ENCLAVE_RUNTIME_LOGLEVEL:指定Enclave運行時的日志等級。

  • OCCLUM_RELEASE_ENCLAVE:指定Enclave類型。設置為0表示為Debug Enclave,設置為1表示為Production Enclave。

輸出結果如下所示,如果容器日志每隔5s打印一行Hello World!,則表示Inclavare Containers環境安裝成功且機密容器也被正常運行。

Hello World!
Hello World!
Hello World!