大语言模型(LLM)推理涉及敏感数据和核心模型资产,在非可信环境中运行时会面临数据和模型泄露风险。ACK提供的机密AI解决方案(ACK Confidential AI,简称ACK-CAI),通过整合Intel TDX和GPU TEE等硬件机密计算技术,为模型推理提供端到端的安全保障。
基于ACK-CAI,可在ACK异构机密计算集群中部署vLLM模型推理服务,实现模型和数据的安全隔离与加密保护。优势如下。
硬件级安全隔离:利用Intel® TDX与NVIDIA GPU TEE技术构建硬件级可信执行环境(TEE),保障计算中模型与数据的机密性和完整性。
可信的密钥分发:通过远程证明机制严格校验运行环境。验证通过后,独立的Trustee服务才向可信环境分发模型解密密钥。
端到端数据加密:通过可信网关(TNG)建立客户端到服务端的加密信道,保护推理请求与响应数据在传输过程中的安全。
对应用无侵入:基于Kubernetes Webhook自动为Pod注入安全组件,仅需通过Annotation即可为应用开启安全能力,无需修改业务代码或镜像。
工作原理
ACK-CAI通过动态注入一组名为Trustiflux的Sidecar容器,为业务Pod提供透明的机密计算能力。其核心安全机制基于远程证明,确保模型和数据仅在可信的环境中被访问。
流程与环境指引
部署并访问一个安全的vLLM推理服务,主要分为以下阶段。
步骤 | 目的 | 环境 |
将推理模型加密,并上传至OSS,确保静态存储安全。 | 一台独立的数据准备服务器 | |
部署独立的Trustee验证服务,作为信任根来校验环境并分发密钥。 | 一台独立的Trustee服务器 | |
创建并配置运行机密计算任务的Kubernetes节点。 |
| |
在集群中安装CAI组件,为应用动态注入安全能力。 | ACK控制台 | |
通过Helm将vLLM服务部署到集群,通过Annotation开启机密计算保护。 | 已配置kubectl和helm,连接API Server的机器 | |
启动客户端安全代理,通过加密通道访问已部署的模型服务。 | 客户端环境 |
步骤一:准备加密模型
本小节使用加密工具处理模型数据,并将其上传到对象存储OSS中,为后续的密态分发做准备。
执行环境:为实现安全隔离,需准备一台临时ECS实例用于下载、加密和上传模型。建议与OSS Bucket处于相同地域,以便通过内网高速上传加密后的模型数据。
模型文件较大,过程耗时较长。如需快速体验方案,跳过本小节,可选择加密模型示例文件进行试用,直接进入步骤二:部署Trustee远程证明服务。
1.下载模型
在模型正式上云部署之前,您需要先对模型进行加密,然后将其上传到云存储。解密模型的密钥将由远程证明服务控制的KMS(密钥管理服务)负责托管。请在本地或可信环境中执行模型的加密操作。以部署Qwen2.5-3B-Instruct大模型为例,提供如下指导。
如果您已经拥有自己的模型,请跳过本章节,直接进入2.加密模型章节。
以使用modelscope工具下载Qwen2.5-3B-Instruct模型为例(需要 Python 3.9 或更高版本),在终端中执行如下命令下载模型。
pip3 install modelscope importlib-metadata
modelscope download --model Qwen/Qwen2.5-3B-Instruct
成功执行命令后,模型将被下载到~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/
目录下。
2.加密模型
目前支持使用Gocryptfs加密模式(基于AES256-GCM开源标准)对模型进行加密。
安装用于加密模型的工具Gocryptfs (目前只支持使用默认参数进行加密的Gocryptfs v2.4.0 版本)。您可以选择以下任意一种方式进行安装:
方式一:(推荐)从yum源安装
如果您使用Alinux3或者AnolisOS 23操作系统,可以直接利用yum源安装gocryptfs。
Alinux 3
sudo yum install gocryptfs -y
AnolisOS 23
sudo yum install anolis-epao-release -y sudo yum install gocryptfs -y
方式二:直接下载预编译binary
# 下载预编译Gocryptfs压缩包 wget https://github.jobcher.com/gh/https://github.com/rfjakob/gocryptfs/releases/download/v2.4.0/gocryptfs_v2.4.0_linux-static_amd64.tar.gz # 解压并安装 tar xf gocryptfs_v2.4.0_linux-static_amd64.tar.gz sudo install -m 0755 ./gocryptfs /usr/local/bin
创建Gocryptfs密钥文件,作为模型加密的密钥。在后续步骤中,您需要将该密钥上传到远程证明服务(Trustee)进行托管。
在本方案中,使用
alibaba@1688
作为加密模型使用的密钥,密钥内容将存储在cachefs-password
文件中。您也可以自定义密钥。在实际中,建议使用随机生成的强密钥。cat << EOF > ~/cachefs-password alibaba@1688 EOF
使用已创建的密钥对模型进行加密。
配置明文模型的路径。
说明在此处配置您刚才下载的明文模型所在路径,如果您有其他模型,请将其替换为目标模型的实际路径。
PLAINTEXT_MODEL_PATH=~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/
使用Gocryptfs对模型目录树进行加密。
加密完成后,模型将以密文形式存储在
./cipher
目录中。mkdir -p ~/mount cd ~/mount mkdir -p cipher plain # 安装Gocryptfs运行时依赖 sudo yum install -y fuse # initialize gocryptfs cat ~/cachefs-password | gocryptfs -init cipher # mount to plain cat ~/cachefs-password | gocryptfs cipher plain # move AI model to ~/mount/plain cp -r ${PLAINTEXT_MODEL_PATH} ~/mount/plain
3.上传模型
您需要准备一个与即将部署的异构实例相同地域的OSS Bucket,并将加密模型上传到阿里云OSS对象存储,以便后续从异构实例拉取并部署。
以对象存储OSS为例,参考控制台快速入门创建一个存储空间(Bucket)和一个名为qwen-encrypted
的目录(例如oss://examplebucket/qwen-encrypted/
)。因模型文件较大,推荐使用ossbrowser将加密模型上传到该目录。
步骤二:部署Trustee远程证明服务
遵循零信任原则,任何机密计算环境在获得访问敏感数据(如模型解密密钥)的权限前,都必须通过验证。此步骤将部署独立的Trustee服务,以对模型及推理服务的运行环境进行验证,确保仅在确认环境可信时才会注入模型解密密钥,以及在客户端侧发起推理请求时验证确认环境可信。
执行环境:一台专用的、部署在ACK集群之外的独立服务器,如ECS实例或云下自有服务器。
1. 选择部署方案
基于安全隔离和信任独立原则,Trustee必须部署在ACK异构机密计算集群之外的独立服务器上。根据对信任等级的不同要求,有两种推荐方案:
信任等级:云服务提供商对Trustee部署环境的软硬件控制程度越高,则信任等级越低。这是因为Trustee服务作为远程证明和分发云上机密计算/可信计算资源的信任根,严格的信任模型下,其部署所在环境的全部软硬件需要由Trustee拥有者全权控制,保证其运行在客户可控受信任的环境中。
ECS实例
可在与ACK集群相同的VPC内,额外创建一台的ECS实例来专门运行Trustee服务。既能通过阿里云内网进行高效、安全的通信,又能保证Trustee服务与机密计算环境在逻辑和物理上的完全隔离。
云下自有服务器
在对于安全要求极高的场景下,可将Trustee部署在自有的数据中心或本地服务器上,通过专线或VPN与云上VPC网络打通。可确保信任根的软硬件环境完全由您掌握,不受云厂商的影响。
使用前,请确保服务器已开通公网, 且已放行8081端口。
2. 部署Trustee服务
Trustee 已被打包为 RPM 格式,并收录于 Alibaba Cloud Linux 3.x 及 Anolis(8.x及以上) 的官方 YUM 源中。可使用系统包管理工具进行安装,其服务在安装后将由 systemd 自动托管与启动。
在准备好的服务器上执行以下命令,使用YUM源安装并启动Trustee。
yum install trustee-1.5.2
Trustee会自动启动并默认监听端口8081。以部署环境IP加上服务端口号,即
http://<trustee-ip>:8081/api
,可作为URL直接进行网络访问。其中,
<trustee-ip>
为部署了Trustee服务器IP。如需在生产环境中使用,建议额外为Trustee配置HTTPS访问,以增强安全性。
运行如下命令,检查服务组件健康状态。
可执行
sudo yum install -y jq
安装jq工具。# 将<trustee-ip>替换为Trustee服务器IP curl http://<trustee-ip>:8081/api/services-health | jq
预期输出中,若所有服务状态均为
ok
,则表示服务正常。{ "gateway": { "status": "ok", "timestamp": "2025-08-26T13:46:13+08:00" }, "kbs": { "status": "ok", "timestamp": "2025-08-26T13:46:13+08:00" }, "as": { "status": "ok", "timestamp": "2025-08-26T13:46:13+08:00" }, "rvps": { "status": "ok", "timestamp": "2025-08-26T13:46:13+08:00" } }
3. 导入模型解密密钥到Trustee实例
Trustee服务部署后,必须为其提供模型解密密钥。此密钥是后续进行远程证明和向推理服务安全分发密钥的基础。
Trustee通过将本地文件路径映射为资源ID来管理密钥。以下操作将在默认的密钥存储目录下创建并导入一个模型解密密钥。
执行以下命令,创建密钥目录(在本地目录
/opt/trustee/kbs/repository/default/
创建名为aliyun
的子目录)并写入密钥内容。将
<模型解密密钥>
替换为真实的密钥字符串,本示例为alibaba@1688
。sudo mkdir -p /opt/trustee/kbs/repository/default/aliyun/ sudo sh -c 'echo -n "<模型解密密钥>" > /opt/trustee/kbs/repository/default/aliyun/model-decryption-key'
验证密钥ID。
完成上述操作后,存储在文件路径
.../aliyun/model-decryption-key
的密钥,其在Trustee系统中的密钥ID将对应为:kbs:///default/aliyun/model-decryption-key
。
步骤三:配置ACK机密计算集群
本小节为运行机密计算任务搭建一个具备硬件级安全隔离能力的底层基础设施:创建一个ACK集群,并为其添加具备Intel TDX和NVIDIA TEE能力的ecs.gn8v-tee实例作为工作节点。
执行环境:ECS、ACK控制台(用于创建集群、节点池和ECS实例)以及创建好的 ecs.gn8v-tee实例的Shell环境(用于安装驱动)。
已在华北2(北京)地域创建一个ACK托管集群Pro版,请参见创建ACK托管集群。
为集群创建一个节点池,用于管理机密计算实例,请参见创建和管理节点池。
交换机:选择华北2(北京)可用区L下的虚拟交换机。
扩缩容模式:保持默认配置,不开启自动弹性伸缩。
实例规格:ecs.gn8v-tee.4xlarge及以上规格。
操作系统:Alibaba Cloud Linux 3.2104 LTS 64位。
系统盘:100GiB以上。
期望节点数:节点池初始节点数量,保持默认配置,为0。
节点标签(Labels):添加标签(键:
ack.aliyun.com/nvidia-driver-version
,值:550.144.03
),指定NVIDIA驱动版本。
创建EGS机密计算实例作为集群节点,请参见自定义购买实例。
地域:华北2(北京)。
网络和可用区:VPC与集群VPC保持一致,可用区L。
实例规格:ecs.gn8v-tee.4xlarge及以上规格。
gn8v-tee规格已默认开启CPU和GPU机密计算特性,无需额外选中机密虚拟机。
镜像:Alibaba Cloud Linux 3.2104 LTS 64位。
登录已创建的EGS实例,安装NVIDIA驱动和CUDA工具包,请参见步骤一:安装NVIDIA驱动和CUDA工具包。
将EGS实例添加到此前创建的节点池中,选择添加方式为手动添加,请参见添加已有节点。
步骤四:部署ACK-CAI组件
基于ACK-CAI组件,可在集群中启用对应用无侵入的机密计算能力。该组件包含一个Webhook控制器,能够根据Pod的Annotation,自动为其注入实现远程证明、模型解密和安全通信所需的Sidecar容器。
执行环境:ACK控制台。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击创建,按照页面提示安装最新版本的ACK-CAI。
请在Helm Chart YAML中修改
tag
为1.1.1
。安装完成后,可在Helm Chart列表查看部署状态。
步骤五:部署vLLM模型推理服务
在基础环境和安全组件就绪后,本小节使用Helm部署vLLM服务,并通过添加特定Annotation来声明该应用需要由ACK-CAI进行安全增强。
执行环境:一台已配置好kubectl和helm且能访问集群的机器。可直接使用在Workbench或CloudShell。
创建一个空的Helm Chart目录。
mkdir -p ack-cai-vllm-demo cd ack-cai-vllm-demo
初始化一个部署vLLM服务的Helm Chart。
此Helm Chart将vLLM推理服务强制调度到机密计算GPU节点上,通过CSI插件将OSS作为模型存储。
编辑values.yaml文件,填入环境信息。
请将<trustee-ip>替换为Trustee地址,并替换实际的OSS参数信息。
caiOptions: | { "cipher-text-volume": "pvc-oss", "model-decryption-key-id" : "kbs:///default/aliyun/model-decryption-key", "trustee-address": "http://<trustee-ip>:8081/api" } oss: bucket: "conf-ai" # 替换为存放模型密文的OSS Bucket名称 path: "/qwen2.5-3b-gocryptfs/" # 替换为模型密文文件在OSS Bucket内的路径 url: "https://oss-cn-beijing-internal.aliyuncs.com" # 替换为OSS Endpoint akId: "xxxxx" # 替换为阿里云AK ID akSecret: "xxxxx" # 替换为阿里云AK Secret
部署vLLM服务。
helm install vllm . -n default
检查Pod中是否成功注入了CAI组件的Sidecar容器。
kubectl get pod cai-vllm -n default -o jsonpath='{range .status.initContainerStatuses[*]}{.name}{"\t"}{range .state.running}Running{end}{.state.*.reason}{"\n"}{end}{range .status.containerStatuses[*]}{.name}{"\t"}{range .state.running}Running{end}{.state.*.reason}{"\n"}{end}'
预期输出中,展示如下5个容器,表明注入成功。等待容器均由
PodInitializing
变为Running
时表明服务启动完成。cai-sidecar-attestation-agent Running cai-sidecar-confidential-data-hub Running cai-sidecar-tng Running cai-sidecar-cachefs Running inference-service Running
获取并记录vLLM服务的访问地址。
kubectl get service cai-vllm-svc -o jsonpath='http://{.status.loadBalancer.ingress[0].ip}:{.spec.ports[0].port}{"\n"}'
预期输出中将返回一个类似格式的URL(
<vllm-ip>:<port>
):http://182.XX.XX.225:8080
步骤六:安全访问推理服务
除服务端安全防护外,还需建立从客户端到服务端的端到端加密通信链路,保障推理数据在传输过程中的安全。此小节在客户端启动一个TNG安全网关,创建一个本地代理,自动加密所有发往vLLM服务的请求,并解密收到的响应。
执行环境:客户端环境,即任何需要调用vLLM推理服务的机器。
在客户端中启动TNG网关,建立安全通信通道。
TNG网关会在客户端创建一个本地代理,用于加密发往服务端的请求。
请将<IP>替换为Trustee地址。
docker run -d \ --network=host \ confidential-ai-registry.cn-shanghai.cr.aliyuncs.com/product/tng:2.2.4 \ tng launch --config-content ' { "add_ingress": [ { "http_proxy": { "proxy_listen": { "host": "0.0.0.0", "port": 41000 } }, "encap_in_http": {}, "verify": { "as_addr": "http://<trustee-ip>:8081/api/attestation-service/", "policy_ids": [ "default" ] } } ] } '
通过TNG代理访问vLLM服务。
将
<vllm-ip>:<port>
替换为此前获取的vLLM服务的访问地址。# 设置http_proxy环境变量 export http_proxy=http://127.0.0.1:41000 # 发送curl请求 curl http://<vllm-ip>:<port>/v1/completions \ -H "Content-type: application/json" \ -d '{ "model": "qwen2.5-3b-instruct", "prompt": "San Francisco is a", "max_tokens": 7, "temperature": 0 }'
参考信息
caiOptions
配置说明
caiOptions
会接收一个JSON格式的配置对象,ACK CAI的Admission Webhook会解析这些参数,并据此向Pod中动态注入和配置必要的安全组件(如AA、CDH等),从而实现透明加解密、远程证明和可信网络等功能。
以下是一个完整的 caiOptions
配置示例。
{
"cipher-text-volume": "pvc-oss",
"model-decryption-key-id": "kbs:///default/aliyun/model-decryption-key",
"trustee-address": "http://<trustee-ip>:8081/api",
"aa-version": "1.3.1",
"cdh-version": "1.3.1",
"tng-version": "2.2.4",
"cachefs-version": "1.0.7-2.6.1",
"tdx-ra-enable": true,
"gpu-ra-enable": true,
"tng-http-secure-ports": [
{
"port": 8080
}
]
}
配置项详细说明:
配置项 | 是否可选 | 说明 |
| 必选 | 指定存储模型密文的PVC名称。ACK-CAI将自动在可信环境中解密此PVC挂载的数据。 |
| 必选 | 模型解密密钥的KBS URI,格式为 |
| 必选 | Trustee服务的地址,用于远程证明和密钥获取。 |
| 可选 | Attestation Agent(AA)组件的版本。 |
| 可选 | Confidential Data Hub(CDH)组件的版本。 |
| 可选 | Trusted Network Gateway(TNG)组件的版本。 |
| 可选 | Cachefs组件的版本。 |
| 可选 | 是否开启对CPU(TDX机密实例)的远程证明支持,默认为 |
| 可选 | 是否开启对GPU的远程证明支持,默认为 |
| 可选 | 配置TNG对特定HTTP端口的流量进行TLS加密。接收一个对象数组,每个对象代表一条端口加密规则。
其中:
|
加密模型示例文件
以下提供了可用于测试的加密模型及其相关配置信息。这些模型存储在公共读的OSS Bucket中,并已使用指定方式加密。