大語言模型(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的機器 | |
啟動用戶端安全代理,通過加密通道訪問已部署的模型服務。 | 用戶端環境 |
步驟一:準備加密模型
本小節使用加密工具處理模型資料,並將其上傳到Object Storage Service中,為後續的密態分發做準備。
執行環境:為實現安全隔離,需準備一台臨時ECS執行個體用於下載、加密和上傳模型。建議與OSS Bucket處於相同地區,以便通過內網高速上傳加密後的模型資料。
模型檔案較大,過程耗時較長。如需快速體驗方案,跳過本小節,可選擇加密模型樣本檔案進行試用,直接進入步驟二:部署Trustee遠程證明服務。
1.下載模型
在模型正式上雲部署之前,您需要先對模型進行加密,然後將其上傳到雲端儲存。解密模型的密鑰將由遠程證明服務控制的KMS(Key Management Service)負責託管。請在本地或可信環境中執行模型的加密操作。以部署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 -yAnolisOS 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)進行託管。
在本方案中,使用
0Bn4Q1wwY9fN3P作為加密模型使用的密鑰,金鑰產製原料將儲存在cachefs-password檔案中。您也可以自訂密鑰。在實際中,建議使用隨機產生的強密鑰。cat << EOF > ~/cachefs-password 0Bn4Q1wwY9fN3P 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,並將加密模型上傳到阿里雲OSSObject Storage Service,以便後續從異構執行個體拉取並部署。
以Object Storage Service為例,參考控制台快速入門建立一個儲存空間(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.2Trustee會自動啟動並預設監聽連接埠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的子目錄)並寫入金鑰產製原料。將
<模型解密密鑰>替換為真實的密鑰字串,本樣本為0Bn4Q1wwY9fN3P。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下的虛擬交換器。
擴縮容模式:保持預設配置,不開啟自動Auto Scaling。
執行個體規格: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控制台。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
單擊建立,按照頁面提示安裝最新版本的ACK-CAI。
安裝完成後,可在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中,並已使用指定方式加密。