本文介绍如何在基于Intel® TDX技术的ECS实例(以下简称TDX实例)中检查并验证TDX功能,以及TDX实例存在的一些功能限制。
安全增强通用型实例g3ilt基于Intel® TDX技术提供机密计算能力,可以为实例和应用提供默认的安全保护。您可以将现有应用直接迁移至TDX实例上并获得TDX能力带来的安全保护,而无需重新开发现有的应用程序。
Intel® TDX简介
Intel® TDX (Trust Domain Extensions) 是一种基于CPU硬件的云服务器ECS保护技术,TDX实例的CPU寄存器、内存数据以及中断处理等均受到CPU硬件的机密保护,云厂商和外部攻击者均无法对TDX实例的内部运行状态(诸如运行的进程、计算中的敏感数据等)进行监控或篡改。关于Intel® TDX技术的更多信息,请参见Inte® Trust Domain Extensions (Intel® TDX)。
TDX的关键特性:
已创建具备TDX特性的安全增强通用型g3ilt实例。如无可用,请先创建实例。
说明
在使用TDX机密计算环境前,建议您先检查对应实例的TDX使能状态,确保实例处于安全保护中。
登录实例。
执行以下命令,检查TDX的使能状态。
lscpu |grep -i tdx_guest
回显如下,表示TDX被正确使能。
执行以下命令,检查TDX驱动的安装情况。
ls -l /dev/tdx_guest
回显如下,表示已安装相关驱动。
您可以通过在TDX实例中生成远程证明报告(TD Quote),并通过验证工具度量其可信性,证明TDX实例处于可信安全的TDX环境。
说明
远程证明报告(TD Quote)用于证明您所购买的TDX实例开启了Intel® TDX保护,确保其运行环境具有数据完整性、机密性和真实性。其中Quote内容包含TD Report与Attestation key签名等关键信息。TD Report是由CPU硬件生成的代表该TDX实例身份的数据,其中包含了TDX实例的属性(attributes)、初始度量值(MRTD)、动态度量值(RTMR)、TCB SVN等关键信息,并以密码学方法保护其完整性。
说明
通常情况下您所购买的TDX实例已经安装并编译了远程证明所需的工具,可参考步骤4查看。若没有安装请参考以下步骤进行安装与编译。
(可选)依次执行以下命令,安装远程证明所需的工具。
# velinux/ubuntu版本 sudo apt-get update sudo apt-get install -y libtdx-attest-dev # velinux(centos compatible)版本 sudo yum makecache sudo yum install -y libtdx-attest-devel
(可选)编译生成远程证明报告的工具。
cd /opt/intel/tdx-quote-generation-sample/
sudo sed '/rtmr_event.version = 1;/,/tdx_att_free_quote(p_quote_buf);/{/tdx_att_free_quote(p_quote_buf);/!d;}' -i test_tdx_attest.c sudo make
运行编译出的可执行文件。
sudo ./test_tdx_attest
回显如下,“Successfully get the TD Quote”表明已成功生成远程证明报告(TD Quote)。
4. 执行以下命令,查看生成的文件。
ls -al /opt/intel/tdx-quote-generation-sample/
回显如上图,在tdx-quote-generation-sample的工作路径下,新增了quote.dat与report.dat文件。其中,quote.dat即为远程证明报告(TD Quote);report.dat为TD report,生成TD report需要提供16进制、长度为64字节的字符串(本文选择随机生成),该字符串会作为生成的TD report的一部分,在实践中通常作为一个哈希值。例如,它可以是一个公钥的哈希值,验证方在验证该远程证明报告成功后,可以提取这段哈希值用于后续的密钥协商流程使用。
说明
如需自行设置report.dat,您可以参考下方提供的文件,手动修改test_tdx_attest.c文件,并重新执行sudo make
命令进行编译,然后通过sudo ./test_tdx_attest -d <report_data>
运行。其中<report_data>
为您指定的16进制、64字节的字符串,例如sudo ./test_tdx_attest -d 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
。
为了验证您所购买的TDX实例的环境可信,您可以使用远程证明验证工具,验证TD Quote中内容。
执行以下命令,安装远程证明验证工具及其所依赖的软件包。
# velinux/ubuntu版本 sudo apt-get install -y tee-appraisal-tool libsgx-dcap-ql-dev libsgx-dcap-quote-verify-dev libsgx-dcap-default-qpl-dev libssl-dev libtdx-appraisal-sample # velinux(centos compatible)版本 sudo yum install -y tee-appraisal-tool libsgx-dcap-ql-devel libsgx-dcap-quote-verify-devel libsgx-dcap-default-qpl-devel libubsan libtdx-appraisal-sample
配置火山引擎TDX远程证明服务。
配置/etc/sgx_default_qcnl.conf文件中的PCCS_URL。例如,将PCCS_URL设置为华北2(北京)的PCCS(Provisioning Certificate Cache Service)服务。
sudo sed "s|\"pccs_url\": \"https:\/\/localhost:8081\/sgx\/certification\/v4/\"|\"pccs_url\": \"https:\/\/tdx-dcap-server-cn-beijing.ecs.volces.com\/sgx\/certification\/v4\/\"|" -i /etc/sgx_default_qcnl.conf
进入tdx-quote-appraisal-sample目录,编译对应的证明工具。
cd /opt/intel/tdx-quote-appraisal-sample/ sudo make
回显如下图所示。
生成安全评估策略(JSON格式)。
{ "policy_array": [ { "environment": { "class_id": "45b734fc-aa4e-4c3d-ad28-e43d08880e68", }, "reference":{ "tdx_attributes":"8000000010000000", "tdx_attributes_mask": "7FFFFFFFFFFFFFFF" } } ] }
sudo tee_appraisal_tool gen_payload -in <report_path> -out <td_identity_policy>
- <report_path>请替换为真实的TD Report路径,本文使用/opt/intel/tdx-quote-generation-sample/report.dat。
- <td_identity_policy>请替换为要生成的策略名,本文使用payload.json。
对安全评估策略进行签名。
生成安全评估策略后,还需要将策略进行签名并转换成对应的JWT(JSON Web Token)格式。生成的JWT文件可以被传输至任何需要验证远程证明报告的环境中,用作远程评估的安全策略以进行后续的检验流程。
方式一:使用默认的安全评估策略。
在编译阶段就已经生成对应的签名策略,您无需操作,具体的文件存放在/opt/intel/tdx-quote-appraisal-sample/Policies/default_enclave.jwt。
方式二:对自定义策略进行签名(包括通过TD Report生成的安全评估策略)。
sudo tee_appraisal_tool sign_policy -in <td_identity_policy> -key ec_priv.pem -out <signed_td_identity_policy>
- <td_identity_policy>请替换为待签名的策略文件路径(.json文件),本文使用/opt/intel/tdx-quote-generation-sample/payload.json。
- <signed_td_identity_policy>请替换为签名的策略名(以.jwt后缀命名),本文使用/opt/intel/tdx-quote-generation-sample/payload.jwt。
回显如下,表示已生成JWT格式的安全策略。
验证远程证明报告。
方式一:使用验证工具自带的默认安全评估策略,验证远程证明生成的Ouote。
sudo ./verifier -quote <quote_path>
<quote_path>请替换为待验证的Quote路径,本文使用/opt/intel/tdx-quote-generation-sample/quote.dat。
回显如下图所示。
方式二:使用您签名后的自定义策略进行验证(包括通过TD Report生成的安全评估策略)。
sudo ./verifier -quote <quote_path> -td_identity_policy <td_identity_policy>
- <quote_path>请替换为待验证的Quote路径,本文使用/opt/intel/tdx-quote-generation-sample/quote.dat。
- <td_identity_policy>请替换为您生成的策略路径,本文使用/opt/intel/tdx-quote-appraisal-sample/payload.jwt。
回显如下图所示。
TDX实例暂不支持VNC登录。
TDX实例的CPU寄存器和内存中的数据会通过CPU硬件进行加密保护,因此其性能相较常规ECS实例存在一定损失。
当前仅支持使用 Ubuntu 24.04 通用公共镜像和 veLinux 2.0 for TDX 、veLinux 2.0 CentOS Compatible for TDX 定制版公共镜像,若您使用自定义镜像创建TDX实例可能会导致实例无法使用。
Linux guest kernel SWIOTLB buffer已知问题:
SWIOTLB:Single-page Input/Output Transfer Lookaside Buffer,单页输入输出转换后备缓冲区。
可见内存较常规实例较小,开启了TDX特性的ECS实例内部将使用特定的非加密内存(SWIOTLB)用于外设通信,该内存区域的大小默认情况下为ECS实例可用内存的6%(但不大于1 GiB)。
大规格实例插入多张弹性网卡可能导致ECS实例夯机,原因是网卡多队列情况下SWIOTLB内存可能不足导致内存分配失败,您可以在控制台将对应ECS实例关机并卸载对应弹性网卡以从启动失败中恢复。
如果您的实例负载涉及大量的I/O通信,则可能遭遇由SWIOTLB不足导致的性能下降。您可以执行以下命令检查该问题是否存在:
dmesg| grep 'swiotlb buffer is full'
注意
错误配置SWIOTLB参数可能导致您的实例启动失败,建议您在操作前创建磁盘快照以方便在任何错误情况下可以安全回滚。具体操作,请参见创建快照。
若存在该问题,您可以尝试调大SWIOTLB的值以改善ECS的性能,具体操作如下:
vim /etc/default/grub
GRUB_CMDLINE_LINUX=".... swiotlb=524288"
以将SWIOTLB的大小修改为1 GiB。
SWIOTLB参数取值的计算方法为:目标大小(以MiB为单位)* 512。更多信息,请参见The kernel's command-line parameters。
# velinux/ubuntu版本 sudo update-grub # velinux(centos compatible)版本 sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg --update-bls-cmdline