全部產品
Search
文件中心

Platform For AI:安全加密推理服務

更新時間:Nov 26, 2025

EAS支援配置安全加密環境,允許加密後的模型進行安全部署和推理。該方式提供了多層次的安全保障,確保資料和模型在整個生命週期中的安全性。適用於對敏感性資料要求較高的情境,例如金融服務、政府、企業級應用等。本文將詳細介紹準備加密模型、進行加密部署以及推理的完整流程。

使用流程

本方案主要採用以下流程進行安全加密部署和推理:

  1. 準備加密模型

    • 加密模型:使用Gocryptfs或Sam對模型進行加密,並將加密後的模型上傳到資料來源中(例如Object Storage Service),方便後續在EAS中進行掛載部署。

    • 儲存解密密鑰:目前,EAS支援阿里雲託管的自建Trustee遠程證明服務。在阿里雲ACK Serverless中部署Trustee遠程證明服務,用於對模型部署環境和推理環境進行安全驗證,並使用阿里雲Key Management Service作為解密密鑰的儲存後端。

  2. 步驟二:使用PAI-EAS部署加密模型

    在使用PAI-EAS部署加密模型時,系統會自動連接Trustee遠程證明服務對部署環境進行驗證。驗證通過後,使用KMS中的密鑰解密並掛載模型,然後將其部署為EAS服務。

  3. 步驟三:調用服務進行安全推理

    部署完成後,使用者可以串連推理服務發起推理請求。

步驟一:準備加密模型

在模型正式上雲部署之前,您需要先對模型進行加密,然後將其上傳到雲端儲存。解密模型的密鑰將由遠程證明服務控制的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加密

  1. 單擊下載Sam加密模組壓縮包RAI_SAM_SDK_2.1.0-20240731.tgz,然後執行以下命令解壓壓縮包。

    # 解壓Sam加密模組
    tar xvf RAI_SAM_SDK_2.1.0-20240731.tgz
  2. 使用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>目錄中。image

方案二:執行Gocryptfs加密

  1. 安裝用於加密模型的工具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
  2. 建立Gocryptfs密鑰檔案,作為模型加密的密鑰。在後續步驟中,您需要將該密鑰上傳到遠程證明服務(Trustee)進行託管。

    在本方案中,使用0Bn4Q1wwY9fN3P作為加密模型使用的密鑰,金鑰產製原料將儲存在cachefs-password檔案中。您也可以自訂密鑰。在實際中,建議使用隨機產生的強密鑰。

    cat << EOF > ~/cachefs-password
    0Bn4Q1wwY9fN3P
    EOF
  3. 使用已建立的金鑰組模型進行加密。

    1. 配置明文模型的路徑。

      說明

      在此處配置您剛才下載的明文模型所在路徑,如果您有其他模型,請將其替換為目標模型的實際路徑。

      PLAINTEXT_MODEL_PATH=~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/
    2. 使用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加密方式,模型檔案的檔案名稱將全部變成加密後的亂碼。image

4.搭建遠程證明服務和上傳密鑰

將用於解密模型的密鑰託管在遠程證明服務中。遠程證明服務是使用者管理的驗證服務,負責對模型和推理服務的運行環境做驗證。只有當確認EAS模型部署環境的可信度符合預期條件時,才會注入模型解密密鑰實現模型解密掛載。

目前,EAS支援阿里雲託管的自建Trustee遠程證明服務。您可以使用阿里雲ACK Serverless來部署遠程證明服務,對模型部署環境和推理環境進行驗證。同時,利用阿里雲KMS為模型解密密鑰提供專業的安全保障。具體操作步驟如下:

重要
  • ACK叢集的地區不必與EAS部署服務的目標地區相同。

  • 阿里雲KMS執行個體必須和準備部署的阿里雲Trustee遠程證明服務所在的ACK叢集處於相同地區

  • 在建立KMS執行個體和ACK叢集之前,請先建立專用網路和2個交換器。具體操作,請參見建立和管理專用網路

  1. 首先建立一個阿里雲KMS執行個體作為金鑰儲存區後端。

    1. 前往Key Management Service控制台,在左側導覽列選擇資源 > 執行個體管理,然後在軟體密鑰管理頁簽建立並啟動執行個體。在啟動執行個體時,請選擇與ACK叢集相同的專用網路。具體操作,請參見購買和啟用KMS執行個體

      等待大約10分鐘,即可啟動完畢。

    2. 執行個體啟動完成後,在左側導覽列選擇資源 > 密鑰管理,然後在密鑰管理頁面為該執行個體建立一個使用者主要金鑰。具體操作,請參見步驟一:建立軟體密鑰

    3. 在左側導覽列選擇應用接入 > 存取點,然後在存取點頁面為該執行個體建立應用存取點。其中範圍選擇已建立的KMS執行個體。更多配置說明,請參見方式一:快速建立

      應用存取點建立成功後,瀏覽器會自動下載ClientKey***.zip檔案,該zip檔案解壓後包含:

      • 應用身份憑證內容(ClientKeyContent):檔案名稱預設為clientKey_****.json

      • 憑證口令(ClientKeyPassword):檔案名稱預設為clientKey_****_Password.txt

    4. 資源 > 執行個體管理頁面,單擊KMS執行個體名稱,然後在基礎資訊地區,單擊執行個體CA認證後的下載,匯出KMS執行個體的密鑰憑證檔案PrivateKmsCA_***.pem

  2. 建立ACK服務叢集並安裝csi-provisioner組件。

    1. 前往建立叢集頁面,建立ACK Serverless叢集,其中關鍵參數配置說明如下,更多配置說明,請參見建立叢集

      1. 叢集配置:配置以下參數,完成後單擊下一步:組件配置

        關鍵配置

        描述

        專用網路

        選擇使用已有,並勾選為專用網路配置SNAT,否則無法拉取Trustee鏡像。

        交換器

        請確保在已有專用網路中建立至少兩個虛擬交換器,否則無法暴露公網ALB。

      2. 組件配置:配置以下參數,完成後單擊下一步:確認配置

        關鍵配置

        描述

        服務發現

        選擇CoreNDS

        Ingress

        選擇ALB Ingress,ALB雲原生網關執行個體來源選擇建立,並選擇兩個虛擬交換器。

      3. 確認配置:確認配置資訊和使用須知,然後單擊建立叢集

    2. 叢集建立成功後,安裝csi-provisioner(託管)組件。具體操作,請參見管理組件

  3. 在ACK叢集中部署Trustee遠程證明服務。

    1. 首先通過公網或內網串連叢集。具體操作,請參見串連叢集

    2. 將已下載的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
    3. 在串連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

    4. 在串連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":""}
  4. 配置Trustee網路白名單。

    說明

    本項配置的目的是允許PAI-EAS模型部署環境主動訪問遠程證明服務,進行環境安全性檢查。

    1. 前往阿里雲ALB負載平衡控制台,建立存取控制策略組,並將訪問Trustee許可權的地址/位址區段添加為IP條目。具體操作,請參見存取控制。其中,需要添加的位址區段如下:

      • 部署EAS服務時綁定的專用網路的公網IP地址。

      • 推理用戶端的出口IP地址。

    2. 使用如下命令獲得叢集上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****
    3. 阿里雲ALB負載平衡控制台左側導覽列,選擇應用型負載平衡ALB > 執行個體,在叢集所在地區下搜尋上一步獲得的ALB執行個體,並單擊執行個體ID進入執行個體詳情頁面。然後在頁面最下方執行個體屬性地區,單擊關閉配置修改保護

    4. 切換到監聽頁面,單擊目標監聽執行個體存取控制列下的啟用,並配置白名單為上述步驟建立的存取控制策略組。

  5. 建立憑據來儲存模型解密密鑰。

    Trustee託管的模型解密密鑰實際上儲存在KMS中,只有在遠程證明服務驗證目標環境後,密鑰才能被訪問。

    前往Key Management Service控制台,在左側導覽列選擇資源 > 憑據管理,然後在通用憑據頁簽,單擊建立憑據。其中關鍵配置說明如下:

    • 憑據名稱:自訂憑據名稱,用於索引該密鑰,例如model-decryption-key

    • 設定憑據值:填寫加密模型時使用的密鑰。例如0Bn4Q1wwY9fN3P,您的密鑰以實際為準。

    • 加密主要金鑰:選擇上述步驟建立的主要金鑰。

步驟二:使用PAI-EAS部署加密模型

  1. 登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS

  2. 模型線上服務(EAS)頁面,單擊部署服務,然後在自訂模型部署地區,單擊自訂部署

  3. 自訂部署頁面,配置以下關鍵參數,其他參數配置說明,請參見自訂部署

    參數

    描述

    環境資訊

    部署方式

    選擇鏡像部署

    鏡像配置

    選擇鏡像。在本方案樣本情境中,選擇官方鏡像>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開通公網訪問,以便能訪問遠程證明服務,並進行環境安全性檢查。

    交換器

    安全性群組名稱

    服務功能

    配置安全加密環境

    開啟配置安全加密環境開關,並配置以下參數:

    • 檔案加密方式:模型加密時使用的加密方式。支援SamGocryptfs。本方案選擇Sam。

    • 系統信任管理服務地址:部署的Trustee服務地址。例如http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/trustee

    • 解密密鑰的KBS URI:使用的模型解密密鑰的KBS URI,格式為kbs:///default/aliyun/<密鑰的憑據名稱>。請將<密鑰的憑據名稱>替換為上述步驟已建立的憑據名稱。

    最終得到的JSON配置樣本如下:

    單擊此處查看JSON配置

    {
        "cloud": {
            "computing": {
                "instances": [
                    {
                        "type": "ecs.gn7i-c8g1.2xlarge"
                    }
                ]
            },
            "networking": {
                "security_group_id": "sg-2vcbmhs3puagy23k****",
                "vpc_id": "vpc-2vctxcm4qncgriz0j****",
                "vswitch_id": "vsw-2vc0tdylfux849zb7****"
            }
        },
        "confidential": {
            "decryption_key": "kbs:///default/aliyun/model-decryption-key",
            "trustee_endpoint": "http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/trustee"
        },
        "containers": [
            {
                "env": [
                    {
                        "name": "eas-test",
                        "value": "1234"
                    }
                ],
                "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/chat-llm-webui:3.0.5-vllm",
                "port": 8000,
                "script": "python webui/webui_server.py --port=8000 --model-path=--model-path=/mnt/data/model --backend=vllm"
            }
        ],
        "metadata": {
            "cpu": 8,
            "gpu": 1,
            "instance": 1,
            "memory": 30000,
            "name": "xynnn_eas_test_gpu"
        },
        "storage": [
            {
                "encryption": {
                    "method": "sam"
                },
                "mount_path": "/mnt/data/model",
                "oss": {
                    "path": "oss://examplebucket/qwen-encrypted/"
                },
                "properties": {
                    "resource_type": "model"
                }
            }
        ]
    }
  4. 參數配置完成後,單擊部署

    服務狀態為運行中時,表明服務已成功部署。此時,您可以在叢集列表頁面單擊目的地組群名稱,然後在容器組頁面按照下圖操作指引,查看attestation-service-*容器日誌。日誌中會顯示Trustee遠程證明服務是否已對模型部署環境進行了驗證,並詳細展示執行環境資訊等。image

步驟三:調用服務進行安全推理

1.查看服務訪問地址

推理服務頁簽,單擊目標服務名稱進入概覽頁面,在基本資料地區單擊查看調用資訊

image

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."
        ]
    ]
}