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

受信任的硬件标识管理

受信任硬件标识管理服务为所有驻留在 Azure 中的受信任执行环境处理证书的缓存管理。 它还提供受信任计算基础 (TCB) 信息,以强制实施证明解决方案的最低基线。

受信任硬件标识管理和证明交互

受信任硬件标识管理为 Azure 机密计算 (ACC) 节点定义 Azure 安全基线,并缓存来自 TEE 提供程序的附件。 证明服务和 ACC 节点可以使用缓存的信息来验证 TEE。 下图显示了证明服务或节点、受信任硬件标识管理和 enclave 主机之间的交互。

Diagram that illustrates interactions between an attestation service or node, Trusted Hardware Identity Management, and an enclave host.

常见问题解答

如何实现受信任硬件身份管理服务与 Intel 处理器配合使用?

若要生成 Intel SGX 和 Intel TDX 报价,Intel 报价生成库 (QGL) 需要访问报价生成/验证附件。 必须从受信任硬件标识管理提取此附件的全部或部分内容。 可以使用 Intel 报价提供程序库 (QPL)Azure 数据中心证明基元 (DCAP) 客户端库来提取这些内容。

Azure 证明使用的 Azure 内部缓存服务 API 的“下一次更新”日期似乎已过时。 它是否仍在运行?能否使用?

tcbinfo 字段包含 TCB 信息。 默认情况下,受信任硬件标识管理服务提供较旧的 tcbinfo 信息。 更新到 Intel 最新的 tcbinfo 信息会导致那些尚未迁移到最新 Intel SDK 的客户的证明失败,并可能导致服务中断。

但开放式 Enclave SDK 和 Azure 证明不会查看 nextUpdate 日期,并且会通过证明。

什么是 Azure DCAP 库?

Azure 数据中心证明基元 (DCAP) 库(替代 Intel 报价提供程序库 (QPL))直接从受信任硬件标识管理服务提取报价生成附件和报价验证附件。 直接从受信任硬件标识管理服务提取附件可确保所有 Azure 主机在 Azure 云中提供现成的附件,以减少外部依赖。 当前推荐的 DCAP 库版本为 1.11.2。

我可以在哪里下载最新的 Azure DCAP 库?

使用以下链接下载包:

对于更高版本的 Ubuntu(例如 Ubuntu 22.04),必须使用 Intel QPL

为什么受信任硬件标识管理和 Intel 具有不同的基线?

受信任硬件标识管理和 Intel 提供不同基线级别的受信任计算基础。 当客户认为 Intel 具有最新的基线时,他们必须确保满足所有要求。 如果客户尚未更新到指定的要求,此方法可能会导致中断。

受信任硬件标识管理采用较慢的方法来更新 TCB 基线,从而让客户能够按照自己的节奏进行必要的更改。 尽管此方法提供较旧的 TCB 基线,但如果客户不符合新 TCB 基线的要求,则不会遇到中断。 因此受信任硬件标识管理中的 TCB 基线版本与 Intel 基线的版本不相同。 我们希望能够让客户按自己的节奏满足新 TCB 基线的要求,而不是强制进行更新,给他们带来影响,导致需要重排工作流的优先级。

使用 Intel Xeon E 处理器,我可以直接从 Intel PCS 获取证书。 为什么从第 4 代开始使用 Intel Xeon 可缩放处理器,我是否需要从受信任的硬件标识管理获取证书? 如何提取这些证书?

从第 4 代 Intel® Xeon® 可缩放处理器开始,Azure 使用平台清单在 Intel 的注册服务中执行间接注册,并将生成的 PCK 证书存储在受信任的硬件标识管理 (THIM) 服务中。Azure 使用间接注册,因为 Intel 的注册服务不会在此情况下存储平台的根密钥,这在 PCK 证书中由 CachedKeys 标志中的 false 反映。 由于使用间接注册,与 Intel PCS 的所有后续通信都需要平台清单,而 Azure 不向虚拟机 (VM) 提供平台清单。 相反,VM 必须联系 THIM 才能接收 PCK 证书。 若要检索 PCK 证书,可以使用 Intel QPLAzure DCAP 库

如何实现 Intel QPL 与受信任硬件标识管理的配合使用?

客户希望能够灵活地使用 Intel QPL 与受信任硬件标识管理进行交互,而无需从 Microsoft 下载另一个依赖项(即 Azure DCAP 客户端库)。 想要将 Intel QPL 与受信任硬件标识管理服务配合使用的客户必须调整 Intel QPL 配置文件 sgx_default_qcnl.conf

用于生成 Intel SGX 或 Intel TDX 报价的报价生成/验证附件可拆分成:

  • PCK 证书。 若要检索它,客户必须使用受信任硬件标识管理终结点。
  • 所有其他报价生成/验证附件。 若要检索它,客户可以使用受信任硬件标识管理终结点或 Intel 预配认证服务 (PCS) 终结点。

Intel QPL 配置文件 (sgx_default_qcnl.conf) 包含用于定义附件终结点的三个键。 pccs_url 键定义用于检索 PCK 证书的终结点。 collateral_service 键可用于定义用于检索所有其他报价生成/验证附件的终结点。 如果未定义 collateral_service 键,则将从使用 pccs_url 键定义的终结点检索所有报价验证附件。

下表显示了设置这些键的方法。

名称 可能的终结点
pccs_url 受信任硬件标识管理终结点:https://global.acccache.azure.net/sgx/certification/v3
collateral_service 受信任硬件标识管理终结点 (https://global.acccache.azure.net/sgx/certification/v3) 或 Intel PCS 终结点。 sgx_default_qcnl.conf 文件始终列出 collateral_service 密钥中的最新终结点。

以下代码片段摘自 Intel QPL 配置文件的示例:

    { 
        "pccs_url": "https://global.acccache.azure.net/sgx/certification/v3/", 
        "use_secure_cert": true, 
        "collateral_service": "https://global.acccache.azure.net/sgx/certification/v3/",  
        "pccs_api_version": "3.1", 
        "retry_times": 6, 
        "retry_delay": 5, 
        "local_pck_url": "http://169.254.169.254/metadata/THIM/sgx/certification/v3/",
        "pck_cache_expire_hours": 24, 
        "verify_collateral_cache_expire_hours": 24, 
        "custom_request_options": { 
            "get_cert": { 
                "headers": { 
                    "metadata": "true" 
                }, 
                "params": { 
                    "api-version": "2021-07-22-preview" 
                } 
            } 
        } 
    }   

以下过程说明如何更改 Intel QPL 配置文件并激活更改。

在 Windows 上

  1. 对配置文件进行更改。

  2. 确保从以下注册表位置和键/值对文件具有读取权限:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Intel\SGX\QCNL]
    "CONFIG_FILE"="<Full File Path>"
    
  3. 重启 AESMD 服务。 例如,以管理员身份打开 PowerShell 并使用以下命令:

    Restart-Service -Name "AESMService" -ErrorAction Stop
    Get-Service -Name "AESMService"
    

在 Linux 上

  1. 对配置文件进行更改。 例如,可以通过以下命令使用 Vim 进行更改:

    sudo vim /etc/sgx_default_qcnl.conf
    
  2. 重启 AESMD 服务。 打开终端并运行以下命令:

    sudo systemctl restart aesmd 
    systemctl status aesmd 
    

如何在机密虚拟机中请求附件?

在机密虚拟机 (CVM) 来宾中,使用以下示例请求包含 VCEK 证书和证书链的 AMD 附件。 有关此附件及其来源的详细信息,请参阅版本受控的芯片认可密钥 (VCEK) 证书和 KDS 接口规范

URI 参数

GET "http://169.254.169.254/metadata/THIM/amd/certification"

请求正文

名称 Type 说明
Metadata Boolean 设置为 True 可返回附件。

示例请求

curl GET "http://169.254.169.254/metadata/THIM/amd/certification" -H "Metadata: true"

响应

名称 说明
200 OK 在 JSON 格式的 HTTP 正文中列出可用的附件
Other Status Codes 描述操作失败的原因

定义

密钥 说明
VcekCert RFC 5280 中定义的 X.509v3 证书
tcbm 受信任计算基础
certificateChain AMD SEV 密钥 (ASK) 和 AMD 根密钥 (ARK) 证书

如何请求 CVM 节点上 Azure Kubernetes 服务容器中的 AMD 附件?

按照在机密容器中请求 AMD 附件的步骤进行操作:

  1. 首先,在 CVM 节点上创建 Azure Kubernetes 服务 (AKS) 群集,或者将 CVM 节点池添加到现有群集:

    • 在 CVM 节点上创建 AKS 群集:

      1. 在其中一个 CVM 支持的区域创建资源组:

        az group create --resource-group <RG_NAME> --location <LOCATION> 
        
      2. 在资源组中的一个 CVM 节点上创建 AKS 群集:

        az aks create --name <CLUSTER_NAME> --resource-group <RG_NAME> -l <LOCATION> --node-vm-size Standard_DC4as_v5 --nodepool-name <POOL_NAME> --node-count 1
        
      3. 配置 kubectl,以便连接到群集:

        az aks get-credentials --resource-group <RG_NAME> --name <CLUSTER_NAME> 
        
    • 将 CVM 节点池添加到现有 AKS 群集:

      az aks nodepool add --cluster-name <CLUSTER_NAME> --resource-group <RG_NAME> --name <POOL_NAME > --node-vm-size Standard_DC4as_v5 --node-count 1 
      
  2. 使用 kubectl get 命令验证与群集的连接。 此命令将返回群集节点的列表。

    kubectl get nodes 
    

    以下输出示例显示在上一步创建的单个节点。 确保节点状态为 Ready

    名称 状态 ROLES 年龄 VERSION
    aks-nodepool1-31718369-0 就绪 代理 6m44s v1.12.8
  3. 创建具有以下内容的 curl.yaml 文件。 该文件会定义一个作业,运行 curl 容器以从受信任硬件标识管理终结点提取 AMD 附件。 有关 Kubernetes 作业的详细信息,请参阅 Kubernetes 文档

    apiVersion: batch/v1 
    kind: Job 
    metadata: 
      name: curl 
    spec: 
      template: 
        metadata: 
          labels: 
            app: curl 
        spec: 
          nodeSelector: 
            kubernetes.azure.com/security-type: ConfidentialVM 
          containers: 
            - name: curlcontainer 
              image: alpine/curl:3.14 
              imagePullPolicy: IfNotPresent 
              args: ["-H", "Metadata:true", "http://169.254.169.254/metadata/THIM/amd/certification"] 
          restartPolicy: "Never" 
    

    curl.yaml 文件包含以下参数。

    名称 Type 说明
    Metadata Boolean 设置为 True 可返回附件。
  4. 通过应用 curl.yaml 文件运行作业:

    kubectl apply -f curl.yaml 
    
  5. 检查并等待 Pod 完成其作业:

    kubectl get pods 
    

    下面是示例响应:

    名称 就绪 状态 重启数 Age
    Curl-w7nt8 0/1 已完成 0 72 秒
  6. 运行以下命令,获取作业日志并验证它是否正常工作。 成功的输出应包括 vcekCerttcbmcertificateChain

    kubectl logs job/curl  
    

后续步骤