本文介绍如何使用 CryptPilot 解决机密计算实例的数据落盘保护问题,通过对实例的根文件系统进行可信度量以防止软件篡改,并对云盘数据实施加密以实现落盘机密性。
机密计算实例(如TDX实例、异构机密实例)通过寄存器加密、内存加密等硬件能力保护运行时数据,但程序代码及其处理的数据通常仍存储在云盘上,需要额外机制对落盘数据进行保护。本文介绍如何使用CryptPilot在机密计算实例中实现磁盘的度量与加密保护,并自主管理云盘的加密密钥。
机密计算实例的磁盘保护有两种方案,可独立使用,也可组合使用:
机密系统盘的度量与加密:在制作系统盘镜像阶段引入 dm-verity 度量,并可选叠加 LUKS2 加密。系统启动时对 rootfs 进行完整性校验,并通过远程证明从信任管理服务获取解密密钥。适用于需要对整机环境进行可信度量的场景,也可在此基础上加密系统盘。
机密数据盘的加密:在已运行的机密计算实例上,对单独的数据盘分区进行 LUKS2 加密。适用于已有业务实例、希望在不重做镜像的前提下仅对部分数据盘进行加密保护的场景。
你可以根据自身场景选择阅读:若需要为机密实例制作可度量、可信启动的系统镜像请参阅机密系统盘的度量与加密;若仅需在已运行的实例上加密部分数据盘,请参阅机密数据盘的加密。
机密系统盘的度量与加密
机密系统盘组成与保护
使用CryptPilot处理后的机密系统盘如下所示,数据以卷(Volume)为单元组织,包含两个关键卷:
rootfs卷:只读的根文件系统。启动时基于 Linux 内核 dm-verity对 rootfs 卷构建完整的哈希树,根哈希值存入安全内存并记入机密实例的CC Eventlog,供远程证明校验启动链完整性。内核逐层校验每个数据块的哈希值与预存根哈希值的一致性,任何未经授权的篡改都会被实时检测并阻止启动。为保持业务兼容性,系统在只读的 rootfs 之上叠加一个可写覆盖层,覆盖层的后端存储由 delta 卷承载,临时写入不影响度量结果。
对该卷的加密是可选的。若启用,则基于 LUKS2(AES-256),由设备随机生成 Master Key 用于数据加解密;用户提供的 Passphrase 经密钥派生算法生成 KEK,对 Master Key 加密后存于卷头。启动时通过远程证明获取 KEK 解密 Master Key,加解密均在机密实例的安全内存中完成。
delta卷:系统盘剩余空间组成的加密卷,始终以 LUKS2 加密,承载 rootfs 可写覆盖层的后端数据。用户在 rootfs 上的所有写入操作最终都会加密落入 delta 卷。
使用流程
步骤一:准备受信任环境
受信任环境需满足以下条件:
Alibaba Cloud Linux 3操作系统:制作机密系统盘的Cryptpilot工具依赖于Alibaba Cloud Linux 3。
开通公网IP:机密计算实例启动过程中会访问Trustee服务器以获取解密密钥。
有足够的空间:取决于您要制作的系统盘镜像文件的大小,建议您的环境中有超过40 GiB的空闲空间。
步骤二:制作机密系统盘镜像
准备源磁盘镜像
在制作机密系统盘之前,您需要准备一个已完成业务部署的磁盘镜像文件。该镜像可通过以下两种方式获取:
从已有 ECS 实例导出系统镜像
在已有的阿里云 ECS 实例上部署并配置好您的业务环境,然后通过控制台或 API 将该实例的系统镜像导出为qcow2文件。
使用官方提供的基础镜像进行定制
从阿里云官网下载最新的 Alibaba Cloud Linux 3 基础镜像,并使用virt-customize工具对镜像内容进行个性化定制(如安装软件包、配置服务、添加您的业务程序等),以满足业务需求。
您可以访问 Alibaba Cloud Linux 3 On-premise Image页面,获取最新的发行版下载链接。例如,使用以下命令下载指定版本的 QCOW2 镜像文件:
curl -O -L -C - https://alinux3.oss-cn-hangzhou.aliyuncs.com/aliyun_3_x64_20G_nocloud_alibase_20250117.qcow2说明仅支持
.qcow2和.vhd格式的 Alibaba Cloud Linux 3 操作系统磁盘镜像文件;镜像一旦通过 cryptpilot-convert 处理后,将无法再修改其内容,因此请确保在处理前已完成所有必要的配置和定制。
(可选)加固镜像
对于运行在机密计算环境中的实例,加固可有效减少攻击面,防止不必要的服务或组件引入安全风险,提升整体安全性。
您可以参考下文的镜像加固章节,在镜像定制阶段完成相关操作后再执行加密。
安装Cryptpilot并准备配置文件
安装Cryptpilot。
在受信任的构建环境中安装 host 包(提供 cryptpilot-convert、cryptpilot-enhance、cryptpilot-fde-host 等制作机密系统盘镜像的工具):
sudo yum install -y cryptpilot-fde-host查看Cryptpilot版本。
cryptpilot-fde-host --version
创建一个存放Cryptpilot配置文件的目录。
mkdir -p ./config_dir写入系统盘配置。
CryptPilot支持单独设置机密系统盘的rootfs卷与delta卷的加密配置,应根据业务场景 是否需要加密rootfs卷以及差异数据(在delta卷上)是否需要持久化保存数据 两个维度来选择。下面列出了四种组合对应的
fde.toml内容,请将所选单元格的内容写入./config_dir/fde.toml:rootfs卷不加密 + delta卷不持久化
[rootfs] delta_location = "disk" [delta] integrity = true [delta.encrypt.otp]rootfs卷不加密 + delta卷需要持久化
[rootfs] delta_location = "disk-persist" [delta] integrity = true [delta.encrypt.kbs] kbs_url = "http://<trustee-ip>:8081/api" key_uri = "kbs:///default/local-resources/delta"rootfs卷加密 + delta卷不持久化
[rootfs] delta_location = "disk-persist" [rootfs.encrypt.kbs] kbs_url = "http://<trustee-ip>:8081/api" key_uri = "kbs:///default/local-resources/rootfs" [delta] integrity = true [delta.encrypt.otp]rootfs卷加密 + delta卷需要持久化
[rootfs] delta_location = "disk-persist" [rootfs.encrypt.kbs] kbs_url = "http://<trustee-ip>:8081/api" key_uri = "kbs:///default/local-resources/rootfs" [delta] integrity = true [delta.encrypt.kbs] kbs_url = "http://<trustee-ip>:8081/api" key_uri = "kbs:///default/local-resources/delta"说明使用OTP时,delta卷每次启动自动生成新的随机密钥,数据在关机后即丢失,无需部署任何密钥后端。OTP的概念详见一次性密钥(OTP)。
使用Trustee等持久化密钥后端时,请将配置中的
<trustee-ip>替换为您部署Trustee服务的实例公网IP地址(若已为Trustee配置HTTPS访问,请将kbs_url中的http://替换为https://)。各密钥获取方式的详细配置说明,请参见信任管理服务(Trustee)。
制作机密系统盘镜像文件
制作机密系统盘镜像文件。
如果您的配置是 不需要加密rootfs卷:
sudo cryptpilot-convert --uki --in ./aliyun_3_x64_20G_nocloud_alibase_20250117.qcow2 --out ./confidential-disk.qcow2 --config-dir ./config_dir/ --rootfs-no-encryption如果您的配置是 需要加密rootfs卷:
sudo cryptpilot-convert --uki --in ./aliyun_3_x64_20G_nocloud_alibase_20250117.qcow2 --out ./confidential-disk.qcow2 --config-dir ./config_dir/ --rootfs-passphrase "<rootfs卷加密密钥>"说明<rootfs卷加密密钥>请与为rootfs卷上传到密钥后端的加密密钥保持一致。由于delta卷的加密发生在实例启动过程中,因此在创建机密系统盘镜像文件时,您不需要指定delta卷的密码。
如果您需要在系统盘中安装额外的rpm包,可以使用
--package选项指定rpm包的名称或路径。
检查生成的镜像。
机密系统盘镜像默认在
./confidential-disk.qcow。file ./confidential-disk.qcow2
步骤三:导入自定义镜像并创建机密实例
上传本地镜像文件至OSS,并获取文件URL,详情请参见上传文件。
导入自定义镜像时,启动模式必须为UEFI。

导入成功后,在镜像详情页,修改NVMe驱动为支持。

步骤四:使用导入的自定义镜像创建机密计算实例
创建实例时,需要注意以下参数:
镜像:选择已导入的自定义镜像,并选中机密虚拟机。

公网IP:选中分配公网IPv4地址,以便您的实例能够访问到Trustee服务以通过远程证明获取密钥。
登录凭证:选择密钥对。
使用Cryptpilot制作的机密系统盘暂不支持使用密码方式登录。
(可选)如果您部署了Trustee服务,请在其对应实例的安全组开放机密实例的公网IP访问入方向8081端口的权限。

如果可以正常连接实例,说明实例可以正常访问Trustee服务并通过远程证明获取密钥。
步骤五:(可选)在Trustee服务中注册参考值
如果您配置了Trustee作为密钥的存储后端,在实例的启动过程中,会向Trustee服务发起请求获取磁盘解密密钥。而Trustee服务会通过远程证明机制对实例中的环境进行验证,检查其是否运行在TEE实例中。在此之上,如果您还想要对所运行的镜像做验证,则需要先将镜像的参考值注册到Trustee中。
使用Cryptpilot计算机密系统盘镜像的参考值,并保存在
reference-value.json中。sudo cryptpilot-fde-host show-reference-value --disk ./confidential-disk.qcow2 | tee ./reference-value.json示例输出如下,其中
466713bf9b2dacca6cd15ff4acd050712e29b4164628e01bd2495411766f36d7ba4560f62537926cf16e08480f1c1804便是该镜像的参考值:
导入参考值到Trustee服务中。
provenance=$(cat ./reference-value.json | base64 --wrap=0) cat << EOF > ./register-request.json { "version" : "0.1.0", "type": "sample", "payload": "$provenance" } EOF rvps-tool register --path ./register-request.json
镜像加固
机密计算环境中,镜像自身的安全配置直接影响整体可信性,建议在加密前对镜像进行安全加固:
攻击面最小化:预装的云服务组件(如云助手、监控代理)在机密计算场景下会扩大攻击面,移除可降低被利用的风险。
数据隔离保障:未关闭的管理服务可能成为数据泄露的通道,加固可确保只有必要的服务运行。
访问入口管控:禁用 SSH 等远程访问以阻断未授权登录,确保计算环境的封闭性。
加固工具说明
为简化加固流程,我们提供了cryptpilot-enhance工具,该工具集成了镜像安全加固的最佳实践。
若您使用 ECS 实例快照导出的镜像,而非从官方源获取的 Alibaba Cloud Linux 3 基础镜像从头定制您的镜像,则可能已预装云助手(Cloud Assistant)或云安全中心(安骑士 Aegis),cryptpilot-enhance 工具会自动识别并卸载这些组件。
经过cryptpilot-convert生成的镜像已经固化内容,无法进行修改,因此需要在其之前运行cryptpilot-enhance。
cryptpilot-enhance支持两种加固模式:
full:完全加固。移除 SSH 服务,实施最严格访问控制。partial:部分加固。保留 SSH 服务但强制密钥认证,适用于需远程维护的生产环境。
包含如下加固内容:
加固模式 | 内容 |
通用加固项(两种模式均执行) |
|
|
|
|
|
加固工具示例
对镜像执行完全加固:
cryptpilot-enhance \ --mode full \ --image ./os-disk.qcow2对镜像执行部分加固并注入 SSH 公钥:
cryptpilot-enhance \ --mode partial \ --image ./os-disk.qcow2 \ --ssh-key ~/.ssh/id_rsa.pub
机密数据盘的加密
在机密计算场景中,除了保护整个系统盘,也可以仅在已运行的机密实例上对部分数据盘分区进行加密。本章节介绍如何在机密计算实例内对数据盘实施 LUKS2 加密,同时实现密钥自主管理。
加密原理
机密云盘基于Linux平台的LUKS2技术实现,提供块存储级别的数据加密保护能力。包含初始化与打开两个流程:
初始化:选定一个块设备(如
/dev/nvme1n1p1),由安全随机数算法生成一个设备唯一的 Master Key,用于 AES-256 加密。Master Key 本身由用户提供的 Passphrase 经密钥派生算法生成 KEK 加密后存储在卷头中。重要初始化流程会抹去块设备上的原有数据,请谨慎处理,以免操作失误。
打开:基于用户提供的 Passphrase 重新派生 KEK,解密得到 Master Key,从而解锁卷。系统将在
/dev/mapper/<卷名>路径建立一个虚拟块设备,所有写入该设备的数据自动加密后落盘、读取时自动解密,加解密过程在 Linux 内核中完成,可以有效防止明文泄露到实例外部。
加密实例通过 CPU 内置的 AES 硬件加速能力降低加解密开销。机密数据盘支持通过 AEAD 加密模式提供完整性保护,可防止攻击者篡改密文数据,适用于大语言模型权重存储、训练数据集存储等场景。加密使用的Passphrase托管在实例外,支持多种密钥获取方式,详见附录:密钥获取方式。
使用流程
步骤一:准备环境
创建机密计算实例。
远程连接机密计算实例。
具体操作,请参见使用Workbench登录Linux实例。
安装Cryptpilot。
sudo yum install -y cryptpilot-crypt
步骤二:创建并挂载云盘
加密云盘是会抹去块设备上的原有数据,建议您创建新的数据盘进行操作。
初始化数据盘时,请仅创建分区及文件系统,不挂载文件系统,文件系统需要加密后再挂载。
查看挂载的云盘及分区信息。
lsblk显示结果如下,表示当前ECS实例挂载了两块云盘:
/dev/nvme0n1:原有的系统盘。/dev/nvme1n1:新增的数据盘,其中有2个新的空白分区(/dev/nvme1n1p1和/dev/nvme1n1p2)。

步骤三:创建带有ext4文件系统的卷
首先我们需要编写一个配置文件
/etc/cryptpilot/volumes/data0.toml文件,该文件定义了一个名为data0的数据卷。说明配置文件采用TOML配置语言格式,文件名可以是任意以
.toml结尾的文本文件,不强制与卷名称相同。下面提供一些典型场景下的配置,请根据实际情况修改其中的配置字段。
临时卷
# 卷配置 dev = "/dev/nvme1n1p1" # 指定要使用的块设备,即云盘的空白分区,本示例中/dev/nvme1n1p1使用了数据盘的第一个分区。 volume = "data0" # 指定卷的名称,本示例命名为data0。 auto_open = false # true表示系统启动时会自动打开该卷;false表示需要手动打开卷。 makefs = "ext4" # 指定要创建的文件系统类型,本示例为ext4。 integrity = true # true表示启用数据完整性支持;false表示关闭数据完整性支持。 # 密钥配置 [encrypt.otp] # 指定密钥存储类型,这里选择一次性密钥(OTP)类型。持久化卷(使用 Trustee)
# 卷配置 dev = "/dev/nvme1n1p2" # 指定要使用的块设备,即云盘的空白分区,本示例中 /dev/nvme1n1p2 使用了数据盘的第2个分区。 volume = "data0" # 指定卷的名称,本示例命名为 data0。 auto_open = false # true 表示系统启动时会自动打开该卷;false 表示需要手动打开卷。 makefs = "ext4" # 指定要创建的文件系统类型,本示例为 ext4。 integrity = true # true 表示启用数据完整性支持;false 表示关闭数据完整性支持。 # 密钥配置(通过 Trustee KBS 获取) [encrypt.kbs] kbs_url = "http://<trustee-ip>:8081/api" # 将<trustee-ip>替换为Trustee 实例的公网 IP 地址 key_uri = "kbs:///default/local-resources/data0" # KBS 中存储 data0 卷密钥的资源 URI持久化卷(使用阿里云 KMS)
# 卷配置 dev = "/dev/nvme1n1p2" # 指定要使用的块设备,即云盘的空白分区,本示例中/dev/nvme1n1p2使用了数据盘的第一个分区。 volume = "data0" # 指定卷的名称,本示例命名为data0。 auto_open = false # true表示系统启动时会自动打开该卷;false表示需要手动打开卷。 makefs = "ext4" # 指定要创建的文件系统类型,本示例为ext4。 integrity = true # true表示启用数据完整性支持;false表示关闭数据完整性支持。 # 密钥配置 [encrypt.kms] # 指定密钥存储类型,这里选择密钥管理服务(KMS)类型。 secret_name = "confidential_cloud_disk_passphrase" # KMS实例中存储的凭据的名称,即之前示例中的confidential_cloud_disk_passphrase。 # 应用身份凭证内容文件(clientKey_****.json文件)中的内容 client_key = ''' { "KeyId": "KAAP.b183152a-c3bf-43ae-9399-a101607b****", "PrivateKeyData": "MIIJ0wIBAzCCCZ8GCSqGSIb3DQE****" } ''' client_key_password = "258372e962f5204ce648bc66243f****" # 凭证口令文件(clientKey_****_Password.txt文件)中的内容 kms_instance_id = "kst-bjj67d004a85ykq80****" # KMS实例ID # KMS实例CA证书文件(PrivateKmsCA_kst-******.pem文件)中的内容 kms_cert_pem = """ -----BEGIN CERTIFICATE----- MIIDuzCCAqOgAwIBAgIJALTKwWAjvbMiMA0GCSqGSIb3DQEBCwUAMH**** -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIID3zCCAsegAwIBAgIJAO8qnQyTy8/kMA0GCSqGSIb3DQEBCwUAMH**** -----END CERTIFICATE----- """查看卷状态。
sudo cryptpilot-crypt show data0可以看到
data0卷的配置信息:Initialized 列:显示该卷是否需要初始化,如果是临时卷则不需要初始化,如果是持久化卷则需要初始化。
Opened 列 : 显示该卷并未打开。

初始化卷
sudo cryptpilot-crypt init data0打开卷
sudo cryptpilot-crypt open data0检查卷对应的虚拟设备。
sudo file -Ls /dev/mapper/data0卷在被打开后,将建立一个虚拟块设备,其路径为:
/dev/mapper/<卷的名称>。
挂载文件系统并查看挂载结果。
将
data0卷挂载到/mnt/data0路径上。sudo mkdir -p /mnt/data0 sudo mount -t ext4 /dev/mapper/data0 /mnt/data0查看挂载结果。
mount | grep data0 ls -la /mnt/data0/回显结果如下所示,表示卷被成功挂载,且里面是一个空的ext4文件系统。

关闭卷。
重要本示例中使用的是一次性密钥(OTP)模型,卷被关闭后,其中存储的机密数据将完全丢失。
关闭卷之前请停止读写该卷的业务进程,并取消卷上的文件系统挂载,确保该卷没有被占用。
取消挂载。
sudo umount /mnt/data0关闭卷。
sudo cryptpilot-crypt close data0
步骤四:配置实例启动时自动打开卷
修改配置文件。
对于需要自动打开的卷,修改其配置文件中的
auto_open字段的值为true。
(条件可选)对于持久化的卷,需要先手动运行
sudo cryptpilot-crypt init <卷名称>初始化后,才能在实例启动时自动打开卷。启动并设置开机自启动cryptpilot服务。
重要每次修改cryptpilot配置后,都需要启动并设置开机自启动cryptpilot服务,才能确保自动打开卷功能生效。
sudo systemctl enable --now cryptpilot.service重启实例。
查看卷状态。
sudo cryptpilot-crypt show回显如下所示,表示卷被自动打开。

附录:密钥获取方式
CryptPilot 通过 Provider 机制对接不同的密钥来源,将"如何加解密磁盘"和"密钥从哪儿取"解耦。本节集中介绍 OTP、Trustee(KBS)、阿里云 KMS 和外部程序(exec)四种方式,供前面机密系统盘与机密数据盘章节引用。
密钥获取方式 | provider类型 | 持久化能力 | 是否需要远程证明 | 典型场景 |
OTP(一次性密钥) |
| 否(关机即丢失) | 否 | 临时数据盘、swap 分区 |
Trustee |
| 是 | 是(基于 TEE 远程证明放行密钥) | 自建密钥后端 + 强可信计算需求 |
阿里云 KMS |
| 是 | 否 | 希望采用云上托管的密钥管理能力 |
exec(外部程序) |
| 取决于外部程序 | 取决于外部程序 | 高级用户自定义密钥获取流程 |
在前文的卷配置示例中,您可以根据实际选型,将 [encrypt.xxx] 段替换为本节介绍的某一种 Provider 配置。一次性密钥(OTP)
适用范围
机密数据盘——临时卷:每次重新打开卷时都将生成不同的随机密钥,关机后卷中数据完全丢失。适用于临时数据盘或交换分区(swap)。
不适用于机密系统盘以及任何需要在关机后保留数据的持久化卷。
配置示例
在卷的 toml 配置中加入:
[encrypt.otp]无需任何额外参数,CryptPilot 在打开卷时会自动生成一个安全的临时密钥对卷进行初始化与解密。
信任管理服务(Trustee)
Trustee是一个开源的信任管理服务,由远程证明服务(AS)、参考值服务(RVPS)和密钥管理服务(KBS)组成。在该方案中,加密密钥存放在 KBS 中,CryptPilot 打开卷时通过 KBS 拉取密钥;KBS 会根据预设策略对实例发起远程证明,证明通过后才放行密钥。
Trustee 既适用于机密系统盘(强可信计算场景下作为推荐密钥后端),也适用于机密数据盘的持久化卷。
步骤一:部署 Trustee 服务
在受信任的环境中(例如一台单独的 ECS 实例),安装 Trustee 软件包:
sudo yum install -y trustee(可选)配置 HTTPS 访问。如需通过 HTTPS 访问,编辑
/etc/trustee/gateway.yml,填入您的 TLS 证书配置:server: insecure_http: false tls: cert_file: "<https证书.pem文件路径>" key_file: "<https证书私钥文件路径>" # 其它配置...在 Alibaba Cloud Linux 3 实例上,可以通过 systemd 启动 Trustee 服务:
sudo systemctl restart trusteeTrustee 正常运行后,会在本机监听 8081 端口。
步骤二:配置远程证明验证策略
Trustee 会对机密实例中的 TEE 硬件环境、文件系统、程序、配置等进行检查并给出检查结果。您需要根据安全等级要求配置 /opt/trustee/kbs/policy.rego 中的放行策略。
机密系统盘场景(推荐:严格策略):要求远程证明四个维度(硬件、配置、可执行文件、文件系统)的可信值均
<= 32。具体策略与参考值的生成方式参见前文机密系统盘使用流程中的「步骤三:制作机密系统盘镜像」(在Trustee服务中注册参考值)。机密数据盘场景(最简策略:仅校验硬件):为简化使用,可仅检查四个维度中的硬件维度,即检测是否为合法的 TEE 硬件环境。将
/opt/trustee/kbs/policy.rego修改为如下默认配置:
步骤三:上传卷加密密钥到 KBS
创建密钥存储目录(KBS 默认使用
/opt/trustee/kbs/repository/default/):sudo mkdir -p /opt/trustee/kbs/repository/default/local-resources/生成加密密钥
sudo yum install -y openssl openssl rand -base64 40
将之前生成的随机密钥写入本地资源文件,例如对名为
data0的卷:sudo sh -c 'echo -n "<data0卷加密密钥>" > /opt/trustee/kbs/repository/default/local-resources/data0'其中
<data0卷加密密钥>请替换为前面生成的随机密钥。对应的 KBS 资源标识为kbs:///default/local-resources/data0,后续在 CryptPilot 卷配置中通过该 URI 引用。
步骤四:在卷配置中引用 KBS
[encrypt.kbs]
# Trustee 实例的 HTTP(S) URL
kbs_url = "http://<trustee-ip>:8081/api"
# 在 KBS 中的资源 URI,格式 `kbs:///<repo>/<type>/<tag>`
key_uri = "kbs:///default/local-resources/data0"
# (可选)KBS HTTPS 访问的根证书,PEM 格式;不指定则使用系统根 CA
kbs_root_cert = """
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
"""步骤五:在机密实例中安装远程证明依赖
为了使能机密实例中的远程证明能力并访问 Trustee 获取密钥,需要确保在机密实例中安装了对应硬件的 attestation-agent组件:
yum install -y attestation-agent
systemctl enable attestation-agent
systemctl start attestation-agent阿里云 KMS
阿里云 KMS 是云上的密钥管理服务,适合希望将密钥托管在阿里云、无需自建密钥后端的场景。在该方案中,加密密钥以"通用凭据"的形式存放在 KMS 中,CryptPilot 在打开卷时通过 KMS 实例获取该密钥。
步骤一:创建阿里云KMS实例,并创建一个通用凭据
机密云盘对所创建KMS实例的密钥管理类型没有限制,您可以按照安全需求按需选择。本文示例选择软件密钥管理类型的KMS实例。
该KMS实例须与ECS实例在同一专有网络(VPC)中。
凭据名称:根据实例填写,本示例为
confidential_cloud_disk_passphrase。设置凭据值:选择纯文本,输入上一步生成的随机密钥。
加密主密钥:选择上一步创建的软件密钥。

请确保已经获得以下内容:
应用身份凭证内容(ClientKeyContent):文件名默认为clientKey_****.json。
凭证口令(ClientKeyPassword):文件名默认为clientKey_****_Password.txt。
KMS实例CA证书:文件名默认为PrivateKmsCA_kst-******.pem。
步骤二:在卷配置中引用 KMS
以下配置文件中的配置信息,请根据实际情况修改。
[encrypt.kms]
# KMS 实例 ID
kms_instance_id = "kst-bjj67d004a85ykq80****"
# KMS 实例中通用凭据的名称
secret_name = "confidential_cloud_disk_passphrase"
# 应用身份凭证文件 clientKey_****.json 的内容
client_key = '''
{
"KeyId": "KAAP.XXXXXXXXX",
"PrivateKeyData": "XXXXXXXXX"
}'''
# 凭证口令文件 clientKey_****_Password.txt 的内容
client_key_password = "258372e962f5204ce648bc66243f****"
# KMS 实例 CA 证书 PrivateKmsCA_kst-******.pem 的内容
kms_cert_pem = """
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
"""外部程序(exec)
exec Provider 允许 CryptPilot 在打开卷时调用任意外部程序,并将该程序的标准输出作为卷的解密密钥。该方式 面向高级用户,可用于自定义密钥获取流程,例如对接企业内部的 HSM、Vault、自研 KMS、远程下发服务等。
由于密钥获取的安全性完全取决于外部程序及其运行环境,请确保该程序自身具备充分的访问控制与可信来源。
配置示例
下面的示例使用 echo 程序产生一个固定密码,仅作配置形式演示——生产环境中请勿使用固定密码:
[rootfs]
delta_location = "disk"
[rootfs.encrypt.exec]
command = "echo"
args = ["-n", "AAAaaawewe222"]
[delta]
integrity = true
[delta.encrypt.exec]
command = "echo"
args = ["-n", "AAAaaawewe222"]CryptPilot 在打开卷时会执行 command 指定的程序(带 args 参数),并将其 标准输出 作为卷的解密密钥使用。












