EAS支援配置安全加密環境,允許加密後的模型進行安全部署和推理。該方式提供了多層次的安全保障,確保資料和模型在整個生命週期中的安全性。適用於對敏感性資料要求較高的情境,例如金融服務、政府、企業級應用等。本文將詳細介紹準備加密模型、進行加密部署以及推理的完整流程。
使用流程
本方案主要採用以下流程進行安全加密部署和推理:
加密模型:使用Gocryptfs或Sam對模型進行加密,並將加密後的模型上傳到資料來源中(例如Object Storage Service),方便後續在EAS中進行掛載部署。
儲存解密密鑰:目前,EAS支援阿里雲託管的自建Trustee遠程證明服務。在阿里雲ACK Serverless中部署Trustee遠程證明服務,用於對模型部署環境和推理環境進行安全驗證,並使用阿里雲Key Management Service作為解密密鑰的儲存後端。
在使用PAI-EAS部署加密模型時,系統會自動連接Trustee遠程證明服務對部署環境進行驗證。驗證通過後,使用KMS中的密鑰解密並掛載模型,然後將其部署為EAS服務。
部署完成後,使用者可以串連推理服務發起推理請求。
步驟一:準備加密模型
在模型正式上雲部署之前,您需要先對模型進行加密,然後將其上傳到雲端儲存。解密模型的密鑰將由遠程證明服務控制的KMS(Key Management Service)負責託管。請在本地或可信環境中執行模型的加密操作。以部署Qwen2.5-3B-Instruct大模型為例,提供如下指導。
1.準備模型(可選)
如果您已有自己的模型,請跳過本章節,直接進入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.模型加密
PAI-EAS支援如下兩種加密方式,本方案以Sam為例。
Gocryptfs:基於AES256-GCM,符合開源Gocryptfs標準的加密模式。
Sam:阿里雲可信AI模型加密格式,保護模型機密性和License內容不被篡改和非法使用。
方案一:執行Sam加密
單擊下載Sam加密模組壓縮包RAI_SAM_SDK_2.1.0-20240731.tgz,然後執行以下命令解壓壓縮包。
# 解壓Sam加密模組 tar xvf RAI_SAM_SDK_2.1.0-20240731.tgz使用Sam加密模組加密模型。
# 進入Sam加密模組的加密目錄 cd RAI_SAM_SDK_2.1.0-20240731/tools # 加密模型 ./do_content_packager.sh <模型目錄> <清除金鑰> <密鑰ID>其中:
<模型目錄>:待加密模型所在的目錄,可以使用相對路徑或絕對路徑,例如
~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/。<清除金鑰>:自訂的加密金鑰,有效長度為4 ~ 128位元組,例如
0Bn4Q1wwY9fN3P。清除金鑰是需要上傳到遠程證明服務(Trustee)的模型解密密鑰。<密鑰ID>:自訂的密鑰標識,有效長度為8 ~ 48位元組,例如
LD_Demo_0001。
加密結束後,模型將以密文形式儲存在當前路徑的
<密鑰ID>目錄中。
方案二:執行Gocryptfs加密
安裝用於加密模型的工具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.上傳模型
EAS支援將加密模型儲存在多種儲存後端,並在部署服務時,通過掛載的方式將解密後的模型載入到服務執行個體中。更多資訊請參考儲存掛載。
以Object Storage Service為例,參考控制台快速入門建立一個儲存空間(Bucket)和一個名為qwen-encrypted的目錄(例如oss://examplebucket/qwen-encrypted/)。因模型檔案較大,推薦使用ossbrowser將加密模型上傳到該目錄。
若需使用命令列工具ossutil,建議分區上傳。
以Sam加密為例,密文模型上傳後的結果如下圖所示。若採用Gocryptfs加密方式,模型檔案的檔案名稱將全部變成加密後的亂碼。
4.搭建遠程證明服務和上傳密鑰
將用於解密模型的密鑰託管在遠程證明服務中。遠程證明服務是使用者管理的驗證服務,負責對模型和推理服務的運行環境做驗證。只有當確認EAS模型部署環境的可信度符合預期條件時,才會注入模型解密密鑰實現模型解密掛載。
目前,EAS支援阿里雲託管的自建Trustee遠程證明服務。您可以使用阿里雲ACK Serverless來部署遠程證明服務,對模型部署環境和推理環境進行驗證。同時,利用阿里雲KMS為模型解密密鑰提供專業的安全保障。具體操作步驟如下:
ACK叢集的地區不必與EAS部署服務的目標地區相同。
阿里雲KMS執行個體必須和準備部署的阿里雲Trustee遠程證明服務所在的ACK叢集處於相同地區。
在建立KMS執行個體和ACK叢集之前,請先建立專用網路和2個交換器。具體操作,請參見建立和管理專用網路。
首先建立一個阿里雲KMS執行個體作為金鑰儲存區後端。
前往Key Management Service控制台,在左側導覽列選擇,然後在軟體密鑰管理頁簽建立並啟動執行個體。在啟動執行個體時,請選擇與ACK叢集相同的專用網路。具體操作,請參見購買和啟用KMS執行個體。
等待大約10分鐘,即可啟動完畢。
執行個體啟動完成後,在左側導覽列選擇,然後在密鑰管理頁面為該執行個體建立一個使用者主要金鑰。具體操作,請參見步驟一:建立軟體密鑰。
在左側導覽列選擇,然後在存取點頁面為該執行個體建立應用存取點。其中範圍選擇已建立的KMS執行個體。更多配置說明,請參見方式一:快速建立。
應用存取點建立成功後,瀏覽器會自動下載ClientKey***.zip檔案,該zip檔案解壓後包含:
應用身份憑證內容(ClientKeyContent):檔案名稱預設為
clientKey_****.json。憑證口令(ClientKeyPassword):檔案名稱預設為
clientKey_****_Password.txt。
在頁面,單擊KMS執行個體名稱,然後在基礎資訊地區,單擊執行個體CA認證後的下載,匯出KMS執行個體的密鑰憑證檔案
PrivateKmsCA_***.pem。
建立ACK服務叢集並安裝csi-provisioner組件。
前往建立叢集頁面,建立ACK Serverless叢集,其中關鍵參數配置說明如下,更多配置說明,請參見建立叢集。
叢集配置:配置以下參數,完成後單擊下一步:組件配置。
關鍵配置
描述
專用網路
選擇使用已有,並勾選為專用網路配置SNAT,否則無法拉取Trustee鏡像。
交換器
請確保在已有專用網路中建立至少兩個虛擬交換器,否則無法暴露公網ALB。
組件配置:配置以下參數,完成後單擊下一步:確認配置。
關鍵配置
描述
服務發現
選擇CoreNDS。
Ingress
選擇ALB Ingress,ALB雲原生網關執行個體來源選擇建立,並選擇兩個虛擬交換器。
確認配置:確認配置資訊和使用須知,然後單擊建立叢集。
叢集建立成功後,安裝csi-provisioner(託管)組件。具體操作,請參見管理組件。
在ACK叢集中部署Trustee遠程證明服務。
首先通過公網或內網串連叢集。具體操作,請參見串連叢集。
將已下載的KMS執行個體的應用身份憑證(
clientKey_****.json)、憑證口令(clientKey_****_Password.txt)和CA認證(PrivateKmsCA_***.pem),上傳到串連ACK Serverless叢集的環境中,並執行以下命令部署Trustee遠程證明服務,使用阿里雲KMS作為金鑰儲存區後端。# 安裝外掛程式 helm plugin install https://github.com/AliyunContainerService/helm-acr helm repo add trustee acr://trustee-chart.cn-hangzhou.cr.aliyuncs.com/trustee/trustee helm repo update export DEPLOY_RELEASE_NAME=trustee export DEPLOY_NAMESPACE=default export TRUSTEE_CHART_VERSION=1.0.0 # 設定ACK叢集所在的地區資訊,比如cn-hangzhou export REGION_ID=cn-hangzhou # 剛才匯出的KMS執行個體相關資訊 # 替換為您的KMS執行個體ID export KMS_INSTANCE_ID=kst-hzz66a0*******e16pckc # 替換為您的KMS執行個體應用身份憑證所在路徑 export KMS_CLIENT_KEY_FILE=/path/to/clientKey_KAAP.***.json # 替換為您的KMS執行個體憑證口令所在路徑 export KMS_PASSWORD_FILE=/path/to/clientKey_KAAP.***_Password.txt # 替換為您的KMS執行個體CA認證所在路徑 export KMS_CERT_FILE=/path/to/PrivateKmsCA_kst-***.pem helm install ${DEPLOY_RELEASE_NAME} trustee/trustee \ --version ${TRUSTEE_CHART_VERSION} \ --set regionId=${REGION_ID} \ --set kbs.aliyunKms.enabled=true \ --set kbs.aliyunKms.kmsIntanceId=${KMS_INSTANCE_ID} \ --set-file kbs.aliyunKms.clientKey=${KMS_CLIENT_KEY_FILE} \ --set-file kbs.aliyunKms.password=${KMS_PASSWORD_FILE} \ --set-file kbs.aliyunKms.certPem=${KMS_CERT_FILE} \ --namespace ${DEPLOY_NAMESPACE}說明執行代碼中第一條安裝外掛程式命令(
helm plugin install...)可能需要較長時間。如果安裝失敗,可以先通過helm plugin uninstall cm-push命令卸載該外掛程式,然後重新執行外掛程式安裝命令。返回結果樣本為:
NAME: trustee LAST DEPLOYED: Tue Feb 25 18:55:33 2025 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None在串連ACK Serverless叢集的環境中執行如下命令,來擷取Trustee的訪問地址。
export TRUSTEE_URL=http://$(kubectl get AlbConfig alb -o jsonpath='{.status.loadBalancer.dnsname}')/${DEPLOY_RELEASE_NAME} echo ${TRUSTEE_URL}返回結果樣本為
http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/trustee。在串連ACK Serverless叢集的環境中執行以下命令,測試Trustee服務的連通性。
cat << EOF | curl -k -X POST ${TRUSTEE_URL}/kbs/v0/auth -H 'Content-Type: application/json' -d @- { "version":"0.1.0", "tee": "tdx", "extra-params": "foo" } EOF若Trustee服務運行狀態正常,預期輸出如下:
{"nonce":"PIDUjUxQdBMIXz***********IEysXFfUKgSwk=","extra-params":""}
配置Trustee網路白名單。
說明本項配置的目的是允許PAI-EAS模型部署環境主動訪問遠程證明服務,進行環境安全性檢查。
前往阿里雲ALB負載平衡控制台,建立存取控制策略組,並將訪問Trustee許可權的地址/位址區段添加為IP條目。具體操作,請參見存取控制。其中,需要添加的位址區段如下:
部署EAS服務時綁定的專用網路的公網IP地址。
推理用戶端的出口IP地址。
使用如下命令獲得叢集上Trustee執行個體使用的ALBServer Load Balancer執行個體ID。
kubectl get ing --namespace ${DEPLOY_NAMESPACE} kbs-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' | cut -d'.' -f1 | sed 's/[^a-zA-Z0-9-]//g'預期輸出如下結果:
alb-llcdzbw0qivhk0****在阿里雲ALB負載平衡控制台左側導覽列,選擇,在叢集所在地區下搜尋上一步獲得的ALB執行個體,並單擊執行個體ID進入執行個體詳情頁面。然後在頁面最下方執行個體屬性地區,單擊關閉配置修改保護。
切換到監聽頁面,單擊目標監聽執行個體存取控制列下的啟用,並配置白名單為上述步驟建立的存取控制策略組。
建立憑據來儲存模型解密密鑰。
Trustee託管的模型解密密鑰實際上儲存在KMS中,只有在遠程證明服務驗證目標環境後,密鑰才能被訪問。
前往Key Management Service控制台,在左側導覽列選擇,然後在通用憑據頁簽,單擊建立憑據。其中關鍵配置說明如下:
憑據名稱:自訂憑據名稱,用於索引該密鑰,例如
model-decryption-key。設定憑據值:填寫加密模型時使用的密鑰。例如0Bn4Q1wwY9fN3P,您的密鑰以實際為準。
加密主要金鑰:選擇上述步驟建立的主要金鑰。
步驟二:使用PAI-EAS部署加密模型
登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS。
在模型線上服務(EAS)頁面,單擊部署服務,然後在自訂模型部署地區,單擊自訂部署。
在自訂部署頁面,配置以下關鍵參數,其他參數配置說明,請參見自訂部署。
參數
描述
環境資訊
部署方式
選擇鏡像部署。
鏡像配置
選擇鏡像。在本方案樣本情境中,選擇官方鏡像>chat-llm-webui:3.0-vllm。
儲存掛載
單擊+OSS按鈕,並配置以下參數:
Uri:請選擇模型密文所在的目錄。例如
oss://examplebucket/qwen-encrypted/,您的路徑以實際為準。掛載路徑:配置為模型明文掛載的目錄,例如
/mnt/model。
運行命令
配置樣本為
python webui/webui_server.py --port=8000 --model-path=/mnt/model --backend=vllm。請注意,--model-path需要與掛載路徑保持一致,用於讀取解密後的模型。連接埠號碼
本方案將連接埠號碼配置為8000。
環境變數
可添加環境變數,用於Trustee遠程證明服務驗證使用。本方案添加環境變數為:鍵
eas-test:值123。資源部署
部署資源
本方案資源規格選擇ml.gu7i.c32m188.1-gu30。
專用網路
Virtual Private Cloud
配置專用網路並設定專用網路的SNAT公網出口IP,為EAS開通公網訪問,以便能訪問遠程證明服務,並進行環境安全性檢查。
交換器
安全性群組名稱
服務功能
配置安全加密環境
開啟配置安全加密環境開關,並配置以下參數:
檔案加密方式:模型加密時使用的加密方式。支援Sam和Gocryptfs。本方案選擇Sam。
系統信任管理服務地址:部署的Trustee服務地址。例如
http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/trustee。解密密鑰的KBS URI:使用的模型解密密鑰的KBS URI,格式為
kbs:///default/aliyun/<密鑰的憑據名稱>。請將<密鑰的憑據名稱>替換為上述步驟已建立的憑據名稱。
最終得到的JSON配置樣本如下:
參數配置完成後,單擊部署。
當服務狀態為運行中時,表明服務已成功部署。此時,您可以在叢集列表頁面單擊目的地組群名稱,然後在容器組頁面按照下圖操作指引,查看
attestation-service-*容器日誌。日誌中會顯示Trustee遠程證明服務是否已對模型部署環境進行了驗證,並詳細展示執行環境資訊等。
步驟三:調用服務進行安全推理
1.查看服務訪問地址
在推理服務頁簽,單擊目標服務名稱進入概覽頁面,在基本資料地區單擊查看調用資訊。

2.調用EAS服務
您可以執行如下cURL命令,向推理服務發起推理請求。
curl <Service_URL> \
-H "Content-type: application/json" \
--data-binary @openai_chat_body.json \
-v \
-H "Connection: close" \
-H "Authorization: <Token>"其中
<Service_URL>:配置為EAS服務訪問地址。
<Token>:配置為EAS服務Token。
openai_chat_body.json為原始推理請求,請求內容樣本如下:
{ "max_new_tokens": 4096, "use_stream_chat": false, "prompt": "What is the capital of Canada?", "system_prompt": "Act like you are a knowledgeable assistant who can provide information on geography and related topics.", "history": [ [ "Can you tell me what's the capital of France?", "The capital of France is Paris." ] ], "temperature": 0.8, "top_k": 10, "top_p": 0.8, "do_sample": true, "use_cache": true }
返回結果樣本如下:
{
"response": "The capital of Canada is Ottawa.",
"history": [
[
"Can you tell me what's the capital of France?",
"The capital of France is Paris."
],
[
"What is the capital of Canada?",
"The capital of Canada is Ottawa."
]
]
}