本文介绍如何在基于Intel® Trusted Domain Extension(Intel® TDX)技术的ECS实例(下文简称为TDX实例)中构建TDX机密计算环境,并演示如何运行实例代码以验证TDX功能。
背景信息
Intel® TDX是一项基于CPU硬件的云服务器ECS保护技术,TDX实例的CPU寄存器、内存数据、中断处理等均受到CPU硬件的机密保护,云厂商和外部攻击者均无法监控或篡改TDX实例的内部运行状态(如运行的进程、计算中的敏感数据等)。关于Intel® TDX技术的更多信息,请参见Intel® Trusted Domain Extension(Intel® TDX)。
Intel® TDX可以为您的实例和应用提供默认的安全保护,即您可以将现有应用直接迁移至TDX实例上并获得TDX能力带来的安全保护,而无需重新开发现有的应用程序。
创建TDX实例
通过控制台创建
在控制台创建具备TDX特性的实例步骤与创建普通实例类似,但需要注意一些特定选项。本步骤重点介绍TDX实例相关的特定配置,如果您想了解其他通用配置,请参见自定义购买实例。
访问ECS控制台-实例。
在页面左侧顶部,选择目标资源所在的资源组和地域。
单击创建实例,按照以下配置创建对应实例。
配置项
说明
地域与可用区
支持的地域与可用区与实例规格有关。请参见支持的地域、规格与镜像。
本文以华北2(北京)可用区I、ecs.g8i.xlarge规格为例。
实例规格
镜像
选中机密虚拟机复选框,然后选择Alibaba Cloud Linux 3.2104 LTS 64位镜像
根据界面提示,完成创建实例。
通过OpenAPI或阿里云CLI创建
您可以调用RunInstances或阿里云CLI创建支持TDX安全特性的ECS实例,需要注意的参数如下表所示。
参数 | 说明 | 示例 |
RegionId | 华北2(北京) | cn-beijing |
ZoneId | 机密计算目前仅在部分地域的特定可用区开放,且不同可用区适配的实例规格存在差异。请参见支持的地域、规格与镜像。 | cn-beijing-i |
InstanceType | ecs.g8i.2xlarge | |
ImageId | 指定支持TDX的镜像ID,当前仅内核版本大于等于5.10.134-16.al8.x86_64的Alibaba Cloud Linux 3.2104 LTS 64位 UEFI 版镜像支持。 | aliyun_3_x64_20G_alibase_20241218.vhd |
SecurityOptions.ConfidentialComputingMode | 配置机密计算模式。 | TDX |
CLI示例
aliyun ecs RunInstances \
--SecurityOptions.ConfidentialComputingMode TDX \
--Region cn-beijing \
--ZoneId cn-beijing-i \
--SystemDisk.Category cloud_essd \
--ImageId 'aliyun_3_x64_20G_alibase_20241218.vhd' \
--InstanceType 'ecs.g8i.2xlarge' \
--SecurityGroupId 'sg-[SecurityGroupId]' \
--VSwitchId 'vsw-[VSwitchID]' \
--KeyPairName [KEY_PAIR_NAME] \
操作步骤
步骤一:检查TDX的启用状态
在使用TDX机密计算环境前,建议您先检查对应实例的TDX的启用状态,以确保对应实例处于安全保护中。
检查TDX的启用状态。
lscpu |grep -i tdx_guest如以下命令输出所示,Flags 列表中包含
tdx_guest则表示 TDX 已被正确启用。[root@iZwzxxxxxxxx:~]# lscpu |grep -i tdx_guest Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc bts rep_good nopl xtopology tsc_known_freq pni pclmulqdq dtes64 ds_cpl ssse3 sdbg fma cx16 pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single sbd ibrs ibpb stibp ibrs_enhanced tdx_guest fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap avx512ifma clflushopts clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx_vnni avx512_bf16 wbnoinvd avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid bus_lock_detect cldemote movdiri movdir64b _vp2intersect md_clear serialize tsxldtrk amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities检查可用的证明报告接口
TDX 的证明报告(TD Report 与 Quote)由内核暴露给用户态,接口形态随内核版本不同。请按镜像的内核版本选择检查方式,有其中之一即可。
接口
使用镜像与内核
检查命令
ConfigFS TSM
/sys/kernel/config/tsm/reportAlibaba Cloud Linux 4、Ubuntu 24.04、Debian 13、Rocky 9.5 及以上(上游内核 6.7 起)
ls -d /sys/kernel/config/tsm/report字符设备
/dev/tdx_guestAlibaba Cloud Linux 3(内核 5.10.134-16.al8 及以上)
ls -l /dev/tdx_guest
步骤二:使用TDX机密计算能力
TDX 面向用户态提供四类原子能力,构成从本地度量到远程验证的完整链路。
能力 | 说明 | 用途 |
TD Report 生成 | TDX Module 返回的本地证明结构,固定 1024 字节,可绑定调用方给的 64 字节 REPORTDATA | 取本地度量值;用 nonce 或公钥哈希绑定新鲜性 |
Quote 生成 | Quoting Enclave 对 TD Report 签名并内嵌 PCK 证书链,形成可被远端独立验证的凭证 | 向远端证明实例身份与运行状态 |
Quote 验证 | 校验 ECDSA 签名和证书链,按需拉 collateral(TCB Info、QE Identity、PCK CRL)校验平台 TCB 级别和吊销状态 | Quote真实性验证 |
度量寄存器读取与扩展 | 读 MRTD、RTMR[0~3];解析 ACPI CCEL 事件日志并与 RTMR 回放比对;向 RTMR[2]、RTMR[3] 扩展自定义度量 | 验启动链完整性;把应用层事件纳入度量 |
龙蜥社区在 go-tdx-guest 里提供了 tdx-lab 命令行工具,用例覆盖上述四类能力,本文展示如何运行对应测试用例:
获取并构建
sudo yum install -y git golang git clone https://gitee.com/anolis/go-tdx-guest.git cd go-tdx-guest/tools/tdx-lab go build -o tdx-lab .说明Debian、Ubuntu 镜像请改用
sudo apt install -y git golang-go。获取实例所在地域的阿里云 PCCS 地址
token=$(curl -s -X PUT -H "X-aliyun-ecs-metadata-token-ttl-seconds: 5" "http://100.100.100.200/latest/api/token") region_id=$(curl -s -H "X-aliyun-ecs-metadata-token: $token" http://100.100.100.200/latest/meta-data/region-id) PCCS_HOST=sgx-dcap-server-vpc.${region_id}.aliyuncs.com运行测试用例
# 运行所有测试用例 ./tdx-lab --skip-early --pccs-url ${PCCS_HOST}说明当前不承诺tcb状态为UpToDate,部分场景下Strict Tcb Check失败的情况符合预期
完整参数和逐个用例的说明见tools/tdx-lab/README.md。
支持的地域、规格与镜像
地域与规格限制
机密计算目前仅在部分地域的特定可用区开放,且不同可用区适配的实例规格存在差异。具体的地域与规格支持情况如下表所示:
地域及可用区 | 规格 |
华北2(北京)可用区L | ecs.g8i.xlarge及以上规格 |
华北2(北京)可用区I |
|
华东1(杭州)可用区J | ecs.r9i.xlarge及以上实例规格 |
中国香港 可用区B | ecs.g8i.xlarge及以上实例规格 |
中国香港 可用区C | ecs.g8i.xlarge及以上实例规格 |
中国香港 可用区D | ecs.g8i.xlarge及以上实例规格 |
新加坡 可用区B | ecs.g8i.xlarge及以上实例规格 |
镜像
推荐使用Alibaba Cloud Linux 3。
Debian版本大于等于13.1:Debian 13.1、Debian 13.2、Debian 13.3。Rocky版本大于等于9.5:Rocky 9.5、Rocky 9.6、Rocky 9.7、Rocky 10.0、Rocky 10.1Ubuntu版本大于等于24.04:Ubuntu 24.04Alibaba Cloud Linux版本大于等于3:Alibaba Cloud Linux 3、Alibaba Cloud Linux 4。
已知功能限制
开启TDX特性的ECS的CPU寄存器和内存中的数据会通过CPU硬件进行加密保护,因此其性能相较普通ECS实例存在一定损失。
受限于TDX动态度量值(RTMR)重置/中断保护/寄存器状态恢复等设计,开启了TDX特性的ECS实例不支持内部重启(即在操作系统内部不支持执行reboot命令)。
暂不支持VNC登录实例,但不影响SSH方式登录,例如可以通过Workbench或第三方客户端登录。如需获取实例运行时所打印的日志,请参见查看实例的系统日志和屏幕截图或获取实例系统命令行输出。
镜像限制:
仅支持UEFI镜像。
暂不支持Windows。
不支持内核版本过老的镜像,内核版本需大于等于5.10.134-16.al8.x86_64。
暂不支持eRDMA和各类加速器等。
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的性能,具体操作如下:
将SWIOTLB的大小修改为1 GiB。
grubby --update-kernel=ALL --args=swiotlb=524288如果您的内核版本大于
5.10.134-18.al8.x86_64,可以额外增加参数any以支持使用更大的SWIOTLB,如:grubby --update-kernel=ALL --args=swiotlb=2097152,any # 将SWIOTLB调整为4 GiB说明SWIOTLB参数取值的计算方法为:目标大小(以MiB为单位)* 512。更多信息,请参见The kernel's command-line parameters。
相关最佳实践
关于TDX机密计算环境的更多实践,您可以根据业务场景参考以下最佳实践,了解应用构建、磁盘保护和容器化部署等方案。
如果您需要在TDX实例上快速部署机密AI应用,请参见基于 g9i TDX 机密计算实例一键构建 OpenClaw 机密 AI Agent。
如果您需要保护机密计算实例的磁盘数据,并了解如何对根文件系统进行可信度量和完整性校验,请参见机密计算实例的磁盘度量与加密保护。
如果您需要在机密计算环境中运行容器化工作负载,请参见在阿里云裸金属实例上部署Confidential Containers (CoCo)。