你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

机密 VM 的机密计算插件

Azure Kubernetes 服务 (AKS) 提供 Azure 机密计算虚拟机 (VM) 的插件。 插件 confcom 是一个守护程序集。 此插件只能针对 AKS 群集中的 Intel Software Guard Extensions (SGX) 机密 VM 运行。 此插件在 AKS 群集级别注册。 可以使用此插件轻松管理机密节点。 在开始操作之前,请在 AKS 群集上启用此插件

适用于 AKS 的 Intel SGX 设备插件

SGX 设备插件实现了用于 Enclave 页面缓存 (EPC) 内存的 Kubernetes 设备插件接口。 实际上,此插件会使 EPC 内存成为 Kubernetes 中的另一种资源类型。 与其他资源一样,用户可以指定 EPC 的限制。 除了计划函数,设备插件还有助于为机密工作负载容器分配 SGX 设备驱动程序权限。 基于 EPC 内存的部署的示例实现 (kubernetes.azure.com/sgx_epc_mem_in_MiB) 已发布。

使用 SGX Quote 帮助程序的 PSW

执行远程证明的 Enclave 应用程序需要生成 Quote。 此 Quote 提供应用程序的标识和状态的加密证明,以及 Enclave 的托管环境。 Quote 生成依赖于 Intel 提供的某些受信任软件组件,这些组件属于 SGX 平台软件组件 (PSW/DCAP)。 此 PSW 打包为一个守护程序集,可在每个节点运行。 从 Enclave 应用请求证明 Quote 时,可以使用 PSW。 使用 AKS 提供的服务有助于更好地保持 PSW 与主机中其他 SW 组件之间的兼容性。 请阅读以下功能详细信息。

执行远程证明的 Enclave 应用程序需要一个生成的 Quote。 此 Quote 提供应用程序的标识、状态和运行环境的加密证明。 生成操作需要属于 Intel 的 PSW 的受信任软件组件。

概述

注意

仅使用专用 Intel SGX 硬件的 DCsv2/DCsv3 VM 需要此功能。

Intel 支持使用两种证明模式来运行 Quote 生成。 有关如何选择哪种类型,请参阅 [证明类型差异] (#attestation-type-differences)。

  • 进程内:在 enclave 应用程序进程内托管可信软件组件。 当在单个 VM 节点中的 2 个 enclave 应用之间执行本地证明时,此方法非常有用

  • 进程外:在 enclave 应用程序外托管可信软件组件。 首先此方法执行远程证明。

SGX 应用程序是使用开放式 Enclave SDK 生成的,在默认情况下,使用进程内证明模式。 基于 SGX 的应用程序允许进程外证明模式,但需要额外的托管。 这些应用程序会公开应用程序外部的必需组件,例如 Architectural Enclave Service Manager (AESM)。

强烈建议使用此功能。 此功能在 Intel 平台更新或 DCAP 驱动程序更新期间可增加 Enclave 应用的正常运行时间。

证明类型差异

每个容器化应用程序的 PSW 引用生成组件都无需更新。

使用进程外模式,容器所有者不需要管理其容器内的更新。 容器所有者依赖提供的接口来调用容器外部的集中式服务。

对于进程外证明模式,无需担心因 PSW 组件过期而导致失败。 引用生成涉及可信 SW 组件 - Quoting Enclave (QE) 和 Provisioning Certificate Enclave (PCE),这两个组件是可信计算基 (TCB) 的一部分。 这些 SW 组件必须保持最新,才能维护证明要求。 提供商负责管理这些组件的更新。 客户不需处理因为容器中存在过期的受信任 SW 组件而导致的证明失败。

进程外证明模式最好使用 EPC 内存。 在进程内证明模式下,每个 Enclave 应用程序都会实例化 QE 和 PCE 的副本以实现远程证明。 使用进程外证明模式,容器不托管这些 Enclave,不消耗容器配额中的 Enclave 内存。

还存在针对内核强制的安全措施。 将 SGX 驱动程序流式传输到 Linux 内核中时,Enclave 具有更高的特权。 此特权允许 Enclave 调用 PCE,这将中断在进程内模式下运行的 Enclave 应用程序。 默认情况下,enclave 不会获取此权限。 向 enclave 应用程序授予此权限需要更改应用程序安装进程。 处理进程外请求的服务的提供程序会确保以此特权安装该服务。

你无需检查与 PSW 和 DCAP 的后向兼容性。 提供程序会验证 PSW 的 Quote 生成组件的更新以实现后向兼容性。 此步骤会在部署机密工作负荷的更新之前提前处理并解决兼容性问题。

机密工作负荷的进程外证明

进程外证明模型适用于机密工作负荷。 Quote 请求程序和 Quote 生成操作会单独执行,但会在同一物理计算机上执行。 引用生成操作会集中完成,并处理来自所有实体的 QUOTE 的请求。 请正确定义接口,使任何实体都可以发现接口来请求 Quote。

Quote 请求程序和 Quote 生成接口的示意图。

抽象模型适用于机密工作负荷方案。 此模型使用已发布的 AESM 服务。 AESM 在 Kubernetes 群集中作为守护程序集进行容器化和部署。 Kubernetes 保证 AESM 服务容器的单个实例(包装在 Pod 中)部署到每个代理节点上。 新的 SGX Quote 守护程序集依赖于 sgx-device-plugin 守护程序集,因为 AESM 服务容器会从 sgx-device-plugin 请求 EPC 内存以启动 QE 和 PCE Enclave。

每个容器都需要在创建过程中设置环境变量 SGX_AESM_ADDR=1 才能选择使用进程外 Quote 生成。 容器还必须包含 libsgx-quote-ex 包,该包会将请求定向到默认 Unix 域套接字

应用程序仍可像以前一样使用进程内证明。 但是,不能在应用程序中同时使用进程内和进程外证明。 进程外基础结构默认可用并消耗资源。

注意

如果使用英特尔 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 Quote 帮助程序服务来执行远程证明。

后续步骤