Share via


機密 VM 的機密運算外掛程式

Azure Kubernetes Service (AKS) 會為 Azure 機密運算虛擬機器 (VM) 提供外掛程式。 外掛程式 confcom 是精靈集。 外掛程式只會針對 AKS 叢集中的 Intel Software Guard Extensions (SGX) 機密 VM 執行。 此外掛程式已在 AKS 叢集層級註冊。 您可以使用外掛程式輕鬆地管理機密節點。 開始之前,請先啟用 AKS 叢集上的外掛程式

適用於 AKS 的 Intel SGX 裝置外掛程式

SGX 裝置外掛程式會實作 Enclave Page Cache (EPC) 記憶體的 Kubernetes 裝置外掛程式介面。 實際上,此外掛程式會使 EPC 記憶體成為 Kubernetes 中的另一個資源類型。 使用者可以指定 EPC 的限制,就像其他資源一樣。 除了排程函式以外,裝置外掛程式也有助於將 SGX 裝置驅動程式權限指派給機密工作負載容器。 EPC 記憶體型部署 (kubernetes.azure.com/sgx_epc_mem_in_MiB) 的範例實作可供使用。

SGX 引用協助程式的 PSW

執行遠端證明的記憶體保護區應用程式必須產生引用。 此引用會提供身分識別的密碼編譯證明與應用程式的狀態,以及記憶體保護區的主機環境。 產生引用會依賴使用 Intel 所提供信任的特定軟體元件,而這些元件屬於 SGX 平台軟體元件 (PSW/DCAP) 的一部分。 此 PSW 會封裝為對個別節點執行的精靈集。 您可以在從記憶體保護區應用程式要求證明引用時,使用 PSW。 使用 AKS 提供的服務有助於更有效地維護 PSW 與主機中其他 SW 元件之間的相容性。 閱讀以下功能詳細資料。

執行遠端證明的記憶體保護區應用程式需要產生的引用。 此引用提供應用程式身分識別、狀態與執行環境的密碼編譯證明。 產生作業需要屬於 Intel PSW 一部分之信任的軟體元件。

概觀

注意

只有使用特製化 Intel SGX 硬體的 DCsv2/DCsv3 VM 才需要此功能。

針對執行引用產生作業,Intel 支援兩個證明模式。 如需如何選擇哪種類型的資訊,請參閱[證明類型差異] (#attestation-type-differences)。

  • 同處理序:在記憶體保護區應用程式處理序中裝載信任的軟體元件。 當您執行本機證明 (單一 VM 節點中 2 個記憶體保護區應用程式之間) 時,此方法非常實用

  • 處理序外:在記憶體保護區應用程式外裝載受信任的軟體元件。 這是執行遠端證明時的慣用方法。

根據預設,使用 Open Enclave SDK 建置的 SGX 應用程式會使用同處理序證明模式。 以 SGX 為基礎的應用程式允許跨處理序,而且需要額外的裝載。 這些應用程式會公開應用程式外部需要的元件,例如 Architectural Enclave Service Manager (AESM)。

強烈建議您使用此功能。 此功能可在 Intel 平台更新或 DCAP 驅動程式更新期間,增強記憶體保護區應用程式的運作時間。

證明類型差異

每個容器化應用程式的 PSW 引用產生元件都不需要任何更新。

使用處理序外時,容器擁有者無須管理其容器內的更新。 容器擁有者會改為依賴提供的介面,在容器外部叫用集中式服務。

針對跨處理序,因為 PSW 元件過期,所以不擔心失敗。 引用產生牽涉到受信任的 SW 元件 - Quoting Enclave (QE) 和 Provisioning Certificate Enclave (PCE),這是受信任運算基礎 (TCB) 的一部分。 這些 SW 元件必須是最新的,以維護證明需求。 提供者會管理這些元件的更新。 客戶完全不需要處理證明失敗,因為其容器內有過期之信任的 SW 元件。

跨處理序更適合使用 EPC 記憶體。 在同處理序證明模式中,每個記憶體保護區應用程式都必須具現化 QE 與 PCE 的複本,以進行遠端證明。 使用跨處理序時,容器不會裝載這些記憶體保護區,也不會耗用容器配額中的記憶體保護區記憶體。

另外也有針對防止施行核心的保護。 當 SGX 驅動程式串流至 Linux 核心時,記憶體保護區具有更高的權限。 此權限允許記憶體保護區叫用 PCE,這會中斷以同處理序模式執行的記憶體保護區應用程式。 根據預設,記憶體保護區不會取得此權限。 要將此權限授與記憶體保護區應用程式,必須變更應用程式安裝程序。 處理跨處理序要求的服務提供者會確保服務透過此權限來安裝。

您不需要檢查 PSW 與 DCAP 的回溯相容性。 提供者會驗證 PSW 的引用產生元件更新是否有回溯相容性。 此步驟會提前處理相容性問題,並在部署機密工作負載的更新之前加以解決。

機密工作負載的跨處理序證明

跨處理序證明模型適用於機密工作負載。 引用要求者與引用產生會個別執行,但位於相同的實體機器上。 引用產生會以集中的方式發生,並處理所有實體的引用要求。 正確定義介面,並讓介面可供任何實體探索要求引用。

Diagram of quote requestor and quote generation interface.

抽象模型適用於機密工作負載案例。 此模型會使用可供使用的 AESM 服務。 AESM 會容器化並部署為 Kubernetes 叢集之間的精靈集。 Kubernetes 保證會將 AESM 服務容器的單一執行個體 (包裝在 Pod 中) 部署至每個代理程式節點上。 新的 SGX 引用精靈集會相依於 sgx-device-plugin 精靈集,因為 AESM 服務容器會從 sgx-device-plugin 要求 EPC 記憶體,用以啟動 QE 與 PCE 記憶體保護區。

每個容器都必須在建立期間設定環境變數 SGX_AESM_ADDR=1,這樣才能加入並使用處理序外引用產生。 該容器也必須包含套件 libsgx-quote-ex,其會將要求導向預設 UNIX 網域通訊端

應用程式仍然可以像之前一樣使用同處理序證明。 然而,您無法在應用程式內同時使用同處理序與跨處理序。 處理序外基礎結構預設為可用,且會耗用資源。

注意

若使用 Intel SGX 包裝函式軟體 (OSS/ISV),執行未修改的容器,通常會為更高階的應用程式,處理與硬體的證明互動。 請參閱每個提供者的證明實作。

樣本實作

根據預設,不會針對具有 "confcom" 附加元件的 AKS 叢集啟用此服務。 請使用以下命令更新附加元件

az aks addon update --addon confcom --name " YourAKSClusterName " --resource-group "YourResourceGroup " --enable-sgxquotehelper

服務啟動之後,請針對 Open Enclave 型應用程式使用以下 Docker 範例來驗證流程。 在 Docker 檔案中設定 SGX_AESM_ADDR=1 環境變數。 或者,在部署檔案中設定該變數。 如需 Docker 檔案與部署 YAML 詳細資料,請遵循此範例。

注意

Intel 提供的 libsgx-quote-ex 必須封裝在應用程式容器中,跨處理序證明才能正常運作。 以下指示具有詳細資料。

# Refer to Intel_SGX_Installation_Guide_Linux for detail
FROM ubuntu:18.04 as sgx_base
RUN apt-get update && apt-get install -y \
    wget \
    gnupg

# Add the repository to sources, and add the key to the list of
# trusted keys used by the apt to authenticate packages
RUN echo "deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu bionic main" | tee /etc/apt/sources.list.d/intel-sgx.list \
    && wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add -
# Add Microsoft repo for az-dcap-client
RUN echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main" | tee /etc/apt/sources.list.d/msprod.list \
    && wget -qO - https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

FROM sgx_base as sgx_sample
RUN apt-get update && apt-get install -y \
    clang-7 \
    libssl-dev \
    gdb \
    libprotobuf10 \
    libsgx-dcap-ql \
    libsgx-quote-ex \
    az-dcap-client \
    open-enclave
WORKDIR /opt/openenclave/share/openenclave/samples/attestation
RUN . /opt/openenclave/share/openenclave/openenclaverc \
    && make build
# this sets the flag for out of proc attestation mode, alternatively you can set this flag on the deployment files
ENV SGX_AESM_ADDR=1 

CMD make run

相反地,在部署 YAML 檔案中設定跨處理序證明模式,如下所示:

apiVersion: batch/v1
kind: Job
metadata:
  name: sgx-test
spec:
  template:
    spec:
      containers:
      - name: sgxtest
        image: <registry>/<repository>:<version>
        env:
        - name: SGX_AESM_ADDR
          value: 1
        resources:
          limits:
            kubernetes.azure.com/sgx_epc_mem_in_MiB: 10
        volumeMounts:
        - name: var-run-aesmd
          mountPath: /var/run/aesmd
      restartPolicy: "Never"
      volumes:
      - name: var-run-aesmd
        hostPath:
          path: /var/run/aesmd

部署應該會成功,並允許您的應用程式使用 SGX 引用協助程式服務來執行遠端證明。

後續步驟