构建Enclave机密计算环境

更新时间:
复制 MD 格式

本文介绍如何使用阿里云虚拟化Enclave创建一个可信的隔离空间,从而保护您的应用程序和数据的安全。

背景信息

数据一般分为三种形态:静态数据、传输中的数据以及使用中的数据。

  • 静态数据和传输中的数据可以通过加密等方式来保障数据安全。

  • 使用中的数据的安全性保障十分困难,目前一般使用机密计算(Confidential Computing)来保护使用中的数据的安全性。

阿里云虚拟化Enclave在ECS实例内部提供一个可信的隔离空间,将合法软件的安全操作封装在一个Enclave中,保障您的代码和数据的机密性与完整性,不受恶意软件的攻击。 适用于对敏感和机密数据有强保护需求的业务,例如金融服务、互联网、医疗等。

Enclave的工作原理

使用阿里云虚拟化Enclave构建机密计算环境的工作原理,是在ECS实例(即主VM)内切分计算资源(包括vCPU和内存),创建一个Enclave VM(简称EVM)作为可信执行环境。EVM的安全性保障体现在以下几方面:

  • 由底层虚拟化技术提供安全隔离,EVM和主VM之间隔离,并且和其他ECS实例也隔离。

  • EVM运行独立的、定制化的可信操作系统,没有持久化存储、交互式连接或外部网络通路,仅允许通过本地安全信道(基于vsock)与主VM进行通信,最大程度缩小攻击面。您可以将涉及机密数据的应用放入EVM中运行,通过安全调用的形式与运行在主VM上的应用进行交互。

阿里云虚拟化Enclave的工作原理图如下所示。

image

阿里云虚拟化Enclave提供的安全性由多个方面结合实现。底层基于带有TPM/TCM芯片的第三代神龙架构,且为EVM提供vTPM/vTCM设备来增强其安全性和可信能力;上层提供高兼容性的SDK,方便您快速搭建Enclave环境并使用。在可信证明能力方面,您可以对运行在机密执行环境中的代码进行验证,例如借助SDK,机密应用可在运行时生成证明材料(包括平台、应用信息、签名等),再通过远程证明服务端(可结合KMS)验证证明材料的有效性。当主VM切分资源给EVM,并且EVM开始运行时,底层会执行资源访问隔离,确保主VM无法访问这些已经切分出去的vCPU或内存资源,保障EVM的正常运行和私密性。

阿里云虚拟化Enclave功能的架构图如下所示。

image

使用限制

  • 仅hfg9i、hfc9i、hfr9i、g8i、c8i、r8i规格族中4 vCPU以上的实例规格支持阿里云虚拟化Enclave。

  • 每台ECS实例只允许创建一个Enclave。

  • 使用Enclave前,您必须至少为主VM保留一个处理器物理核以及部分内存,剩余的处理器和内存资源可以灵活地分配给Enclave。如果您开启了超线程,则代表保留了属于一个物理核的两个处理器超线程,因此启用Enclave特性的ECS实例至少需要具备4 vCPU。

其他通用限制,请参见使用限制。

创建Enclave实例

在控制台创建具备Enclave特性的实例步骤与创建普通实例类似,但需要注意一些特定选项。本步骤重点介绍Enclave实例相关的特定配置,如果您想了解其他通用配置,请参见自定义购买实例。

  1. 访问ECS管理控制台-实例。

  2. 在页面左侧顶部,选择目标资源所在的资源组和地域。

  3. 单击创建实例,按照以下配置创建对应实例。

    配置项

    说明

    实例规格

    hfg9i、hfc9i、hfr9i、g8i、c8i、r8i规格族中4 vCPU以上的实例规格。

    镜像

    选中Enclave复选框,选择Alibaba Cloud Linux 2.1903 LTS 64位 UEFI版镜像。

    说明

    选择Enclave时,会默认安装可信系统。

    实例RAM角色

    选择阿里云提供的服务角色AliyunECSInstanceForYundunSysTrustRole。

安装Enclave CLI

  1. 在Enclave实例中安装Docker。

  2. 使用Workbench工具以SSH协议登录Enclave实例。

  3. 安装Enclave CLI的RPM包。

    1. 执行如下命令,下载Enclave CLI的RPM包。

      wget https://enclave-cn-beijing.oss-cn-beijing.aliyuncs.com/download/linux/enclave-cli/x86_64/2.1903/enclave-cli-1.0.8-1.x86_64.rpm
    2. 执行如下命令,安装Enclave CLI。

      sudo rpm -ivh enclave-cli-1.0.8-1.x86_64.rpm
    3. 执行如下命令,查看Enclave CLI版本。

      enclave-cli --version

      当返回Enclave CLI的版本信息时,说明Enclave CLI已安装成功。

      [test@iz2zebt88ixxx          ~]$ enclave-cli --version
      Enclave CLI 1.0.8
  4. 将当前用户添加到de用户组和docker用户组。

    1. 执行如下命令,将当前用户添加到de用户组。

      sudo usermod -aG de <username>
      说明

      <username>请替换成实际的用户名,如test。

    2. 执行如下命令,将当前用户添加到docker用户组。

      sudo usermod -aG docker <username>
      说明

      <username>请替换成实际的用户名,如test。

    3. 重新登录实例,使上述配置生效。

  5. 为Enclave预分配供其使用的vCPU和内存。

    1. 执行如下命令,打开allocator.yaml配置文件。

      sudo vim /etc/ali-enclaves/allocator.yaml
    2. 按i键进入编辑模式。

    3. 修改配置项内容,具体的配置项说明如下:

      • memory_mib:分配的内存大小,单位:MiB。

      • cpu_count:分配的vCPU个数。

      以如下配置为例,表示为Enclave分配1024 MiB内存和2 vCPU。

      # Enclave configuration file.
      #
      # How much memory to allocate for enclaves (in MiB).
      memory_mib: 1024
      #
      # How many CPUs to reserve for enclaves.
      cpu_count: 2
    4. 按Esc键,输入:wq,按Enter键退出并保存文件。

  6. 执行如下命令,启动并设置开启自启动Enclave资源分配服务。

    sudo systemctl start ali-enclaves-allocator.service && \
    sudo systemctl enable ali-enclaves-allocator.service

    设置完成后,Enclave资源分配服务会根据设置的vCPU生成一个Enclave可用的vCPU池。ECS实例不能再使用池中的vCPU,Enclave启动时只能从此池中选取其所用的vCPU。

    说明

    若后续需要修改为Enclave分配的资源,则应再次修改allocator.yaml配置文件并执行如下命令重启Enclave资源分配服务。

    sudo systemctl restart ali-enclaves-allocator.service
  7. 执行如下命令,查看Enclave资源分配服务状态。

    systemctl status ali-enclaves-allocator.service

    当返回信息如下所示时,表示Enclave资源分配服务已启动。

    [test@iZ2zebt88    ~]$ systemctl status ali-enclaves-allocator.service
    ● ali-enclaves-allocator.service - Nitro Enclaves Resource Allocator
       Loaded: loaded (/usr/lib/systemd/system/ali-enclaves-allocator.service; enabled; vendor preset: disabled)
       Active: active (exited) since Tue 2023-06-20 10:39:57 CST; 46min ago
     Main PID: 1960 (code=exited, status=0/SUCCESS)
  8. 执行如下命令,启动并设置开机自启动Docker服务。

    sudo systemctl start docker && sudo systemctl enable docker
    说明

    若您不再使用阿里云虚拟化Enclave,可以执行sudo yum remove enclave-cli卸载Enclave CLI。

  9. 重启实例使上述操作生效。

相关文档

关于Enclave CLI的更多使用说明,请参见快速使用Enclave CLI。