在g7h实例中构建CSV机密计算环境

本文介绍如何在基于海光安全加密虚拟化CSV(China Secure Virtualization)技术的ECS实例(下文简称为CSV实例)中构建CSV加密计算环境,并演示如何运行实例代码以验证CSV功能。

背景信息

海光安全加密虚拟化CSV是一项基于国产海光CPU硬件的云服务器ECS保护技术,CSV实例的运行时状态如内存数据均受到CPU硬件的加密保护,云厂商和外部攻击者均无法监控或定向篡改CSV实例的内部运行状态(如运行的进程、计算中的敏感数据等)。关于海光CSV技术的更多信息,请参见Hygon Arch

海光CSV可以为您的实例和应用提供默认的安全保护,即您可以将现有应用直接迁移至CSV实例上并获得CSV带来的安全保护,而无需重新开发现有的应用程序。

创建CSV实例

说明

目前仅g7h实例规格族支持CSV功能。更多信息,请参见海光通用型实例规格族g7h

通过控制台创建

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

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择实例与镜像 > 实例

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

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

    配置项

    说明

    实例规格

    仅以下g7h规格支持CSV功能。

    • ecs.g7h.2xlarge

    • ecs.g7h.4xlarge

    • ecs.g7h.8xlarge

    • ecs.g7h.16xlarge

    镜像

    选中机密虚拟机复选框,并选择Alibaba Cloud Linux 3.2104 LTS 64位 UEFI 版镜像。

  5. 根据界面提示,完成创建实例。

通过OpenAPI创建

您可以调用RunInstances创建实例,需要注意的参数如下表所示。

参数

说明

示例

InstanceType

选择支持CSV特性的实例规格,当前支持的规格如下:

  • ecs.g7h.2xlarge

  • ecs.g7h.4xlarge

  • ecs.g7h.8xlarge

ecs.g7h.2xlarge

ImageId

指定可信实例支持的镜像ID,当前仅以下镜像支持:

Alibaba Cloud Linux 3.2104 LTS 64位 UEFI 版。

aliyun_3_9_x64_20G_uefi_alibase_20231219.vhd

SecurityOptions.ConfidentialComputingMode

配置机密计算模式。

CSV

检查CSV使能状态

在使用CSV加密计算环境前,建议您先检查对应实例的CSV使能状态,以确保对应实例处于安全保护中。

  1. 检查CSV使能状态。

    通过MSR检查CSV使能状态

    通过访问CSV_STATUS(0xC0010131)来检查CSV功能是否开启,该MSR为只读且访问行为无法被Hypervisor拦截,您可以通过以下命令进行检查。

    sudo yum install msr-tools
    sudo rdmsr 0xC0010131 --bitfield 1:0

    下图表示CSV已经被正确使能。

    image.png

    通过内核日志检查CSV使用状态

    对于使能了CSV的实例,内核检测完成后会打印出对应日志,您可以通过以下命令进行检查。

    dmesg | grep SEV

    下图表示CSV已经被正确使能。

    image.png

  2. 检查CSV相关驱动安装情况。

    sudo modprobe csv-guest
    ls -l /dev/csv-guest

    下图表示已经安装CSV相关驱动。

    image.png

构建CSV加密计算环境并验证CSV功能

说明

正常情况下,运行于非CSV环境下的程序可直接迁移至CSV实例中,而无需额外开发,您可以像使用普通实例一样使用CSV实例。阿里云建议您充分利用下文所述的加密虚拟机相关功能,以充分使用CSV所提供的额外安全能力,并更好地保护实例的安全。

CSV Attestation Report是由海光Platform Security Processor(PSP)硬件直接生成的代表了CSV实例身份的数据结构,其包含了CSV实例的策略(POLICY)、用户自定义数据(UserData)、虚拟机摘要(DIGEST)等关键信息,并以密码学方法保护其完整性。阿里云为您提供了样例工具来快速生成和验证CSV Attestation Report。

  1. 下载阿里云提供的远程证明样例工具。

    wget https://enclave-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/csv/requirements.txt
    wget https://enclave-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/csv/csv-attestation.py
    sudo pip3 install -r requirements.txt
    chmod +x ./csv-attestation.py

    返回结果如下图所示,表示远程证明样例工具已安装。

    image.png

  2. 为本机生成远程证明报告。

    sudo ./csv-attestation.py generate -r ./

    返回结果如下图所示,表示远程证明报告被持久化存储到了本地目录下的report文件中。

    image.png

  3. 验证远程证明报告。

    sudo ./csv-attestation.py verify -r ./report

    执行的样例结果如下,POLICY中的NODEBUG表示当前CSV实例处于非调试状态,NOKS表示虚拟机的加密密钥为当前实例独享,即处于安全的受保护模式。

    image.png

  4. 生成指定UserData的远程证明报告。

    生成远程证明报告时,您可以通过指定UserData,从而生成您期望的远程证明报告。

    sudo ./csv-attestation.py generate -r ./ -u your-data-like-pubkey-digest

    image.png

已知功能限制

  • 开启CSV特性后ECS的内存数据会通过CPU硬件进行加密保护,因此其性能相较普通ECS实例存在一定损失。

  • 镜像限制:

    • 仅支持Alibaba Cloud Linux 3.2104 LTS 64位 UEFI 版镜像,且内核版本需大于等于5.10.134-16.al8.x86_64。

    • 暂不支持Windows。

  • Linux guest kernel SWIOTLB buffer已知问题:

    • 可见内存较常规实例较小,开启了TDX特性的ECS实例内部将使用特定的非加密内存(SWIOTLB)用于外设通信,该内存区域的大小默认情况下为ECS实例可用内存的6%(但不大于1 GiB)。

    • 大规格插入多张ENI弹性网卡可能导致ECS实例夯机,原因为网卡多队列情况下SWIOTLB内存可能不足导致内存分配失败,您可以在控制台将对应ECS实例关机并卸载对应弹性网卡以从启动失败中恢复。

    • 如果您的实例负载涉及大量的IO通信,则可能遭遇由SWIOTLB不足导致的性能下降。您可以使用以下命令检查此问题是否存在:

      dmesg| grep 'swiotlb buffer is full'
      重要

      错误配置SWIOTLB参数可能导致您的实例启动失败,建议您在操作前创建磁盘快照以方便在任何错误情况下可以安全回滚。具体操作,请参见创建一个云盘快照

      如您确认该问题存在,您可以尝试调大SWIOTLB大小以改善ECS的性能,具体操作如下:

      1. 打开/etc/default/grub文件。

        vim /etc/default/grub
      2. 在GRUB_CMDLINE_LINUX字段后加入"SWIOTLB"相关参数。

        例如将GRUB_CMDLINE_LINUX修改为GRUB_CMDLINE_LINUX=".... swiotlb=524288"以将SWIOTLB的大小修改为1 GiB。

        说明

        SWIOTLB参数取值的计算方法为:目标大小(以MiB为单位)* 512。更多信息,请参见The kernel's command-line parameters

      3. 更新grub.cfg配置文件使上述修改生效。

        grub2-mkconfig -o /boot/efi/EFI/alinux/grub.cfg