暗号化されたモデルをデプロイし、コンフィデンシャルコンピューティング環境で推論を実行することで、モデルの機密性を保護します。
仕組み
コンフィデンシャル推論には、次の 3 つのステップが含まれます。
モデルの暗号化:Gocryptfs または Sam を使用してモデルを暗号化します。暗号化されたモデルを Object Storage Service (OSS) などのデータソースにアップロードし、デプロイ時に Elastic Algorithm Service (EAS) がマウントできるようにします。
復号鍵の保存:リモート認証サービスは、復号鍵のストレージバックエンドとして Key Management Service (KMS) を使用します。ACK Serverless にリモート認証サービスをデプロイし、デプロイ環境と推論環境を認証します。
デプロイ中、EAS は Trustee リモート認証サービスに接続して環境を検証します。認証が成功すると、EAS はモデルを復号、マウント、デプロイします。
ステップ 3:サービスを呼び出してコンフィデンシャル推論を実行
デプロイ後、推論リクエストをサービスに送信します。
ステップ 1:暗号化されたモデルの準備
リモート認証サービスは、KMS によって管理される復号鍵へのアクセスを制御します。モデルの暗号化は、ローカルまたは他の信頼できる環境で実行してください。この例では、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. モデルの暗号化
2 つの暗号化方式が利用可能です。この例では Sam を使用します。
Gocryptfs:オープンソースの Gocryptfs 標準と互換性のある AES-256-GCM 暗号化。
Sam:不正使用やライセンス改ざんを防止する Alibaba Cloud の信頼できる AI モデル暗号化フォーマット。
Sam 暗号化
Sam 暗号化モジュールパッケージ RAI_SAM_SDK_2.1.0-20240731.tgz をダウンロードして展開します。
# Sam 暗号化モジュールを展開 tar xvf RAI_SAM_SDK_2.1.0-20240731.tgzモデルを暗号化します。
# Sam 暗号化モジュールの暗号化ディレクトリに移動 cd RAI_SAM_SDK_2.1.0-20240731/tools # モデルを暗号化 ./do_content_packager.sh <model_directory> <plaintext_key> <key_ID>パラメーター:
<model_directory>:暗号化するモデルのディレクトリ。相対パスまたは絶対パスがサポートされています。例:
~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/。<plaintext_key>:カスタム暗号鍵、4〜128 バイト。例:
0Bn4Q1wwY9fN3P。このキーは後で Trustee リモート認証サービスにアップロードします。<key_ID>:カスタムキー識別子、8〜48 バイト。例:
LD_Demo_0001。
暗号化後、暗号化されたモデルは現在のパスの
<key_ID>ディレクトリに格納されます。
Gocryptfs 暗号化
デフォルトの暗号化パラメーターで Gocryptfs v2.4.0 をインストールします。v2.4.0 のみがサポートされています。
yum によるインストール
Alinux 3 または AnolisOS 23 を使用している場合は、yum リポジトリから Gocryptfs をインストールします。
Alinux 3
sudo yum install gocryptfs -yAnolisOS 23
sudo yum install anolis-epao-release -y sudo yum install gocryptfs -yバイナリのダウンロード
# 事前にコンパイルされた 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 # gocryptfs を初期化 cat ~/cachefs-password | gocryptfs -init cipher # plain にマウント cat ~/cachefs-password | gocryptfs cipher plain # AI モデルを ~/mount/plain に移動 cp -r ${PLAINTEXT_MODEL_PATH}/. ~/mount/plain
3. モデルのアップロード
暗号化されたモデルには、さまざまなストレージバックエンドがサポートされています。EAS は、デプロイ中に復号されたモデルをサービスインスタンスにマウントします。詳細については、「ストレージのマウント」をご参照ください。
この例では、OSS を使用します。「コンソールクイックスタート」の指示に従って、バケットと qwen-encrypted という名前のディレクトリを作成します。例:oss://examplebucket/qwen-encrypted/。大規模なモデルファイルの場合は、ossbrowser を使用して、暗号化されたモデルをディレクトリにアップロードします。
ossutil コマンドラインツールを使用する場合は、マルチパートアップロードを使用してください。
以下に、アップロードされた Sam で暗号化されたモデルを示します。Gocryptfs を使用すると、ファイル名も暗号化され、文字化けして表示されます。
4. 認証サービスの設定とキーのアップロード
リモート認証サービスは復号鍵をホストし、EAS のデプロイ環境が信頼性検証に合格した場合にのみ鍵を解放します。
自己管理型の Trustee リモート認証サービスを ACK Serverless にデプロイします。KMS を使用して復号鍵を安全に保存します。
ACK Serverless クラスターは、EAS サービスと同じリージョンにある必要はありません。
KMS インスタンスは、Trustee リモート認証サービスがデプロイされている ACK Serverless クラスターと同じリージョンにある必要があります。
KMS インスタンスと ACK クラスターを作成する前に、VPC と 2 つの vSwitch を作成します。詳細については、「VPC の作成と管理」をご参照ください。
キーストレージバックエンドとして KMS インスタンスを作成します。
KMS コンソールに移動します。左側のナビゲーションウィンドウで、を選択します。[ソフトウェアキー管理] タブで、インスタンスを作成して有効化します。インスタンスを有効化する際、ACK クラスターと同じ Virtual Private Cloud (VPC) を選択します。詳細については、「KMS インスタンスの購入と有効化」をご参照ください。
有効化には約 10 分かかります。
インスタンスが有効になった後、左側のナビゲーションウィンドウで、を選択します。[キー] ページで、インスタンス用のカスタマーマスターキー (CMK) を作成します。詳細については、「ステップ 1:ソフトウェアキーの作成」をご参照ください。
左側のナビゲーションウィンドウで、 を選択します。アプリケーションアクセス タブで、インスタンスのアプリケーションアクセスポイントを作成します。[スコープ] には、作成した KMS インスタンスを選択します。構成の詳細については、「方法 1: クイック作成」をご参照ください。
アプリケーションアクセスポイントが作成されると、ブラウザが自動的に ClientKey*.zip ファイルをダウンロードします。このファイルには以下が含まれます:
Credential (ClientKeyContent):デフォルトのファイル名は
clientKey_****.jsonです。認証情報パスワード (ClientKeyPassword):デフォルトのファイル名は
clientKey_****_Password.txtです。
ページに移動して、KMS インスタンスの名前をクリックします。Details ページで、ダウンロード の横にある Instance CA Certificate をクリックすると、公開鍵証明書ファイル
PrivateKmsCA_***.pemがエクスポートされます。
ACK Serverless クラスターを作成し、csi-provisioner コンポーネントをインストールします。
[クラスターの作成] ページに移動して、ACK Serverless クラスターを作成します。詳細については、「クラスターの作成」をご参照ください。主要なパラメーター:
クラスター設定:以下のパラメーターを設定し、[次へ:コンポーネント設定] をクリックします。
パラメーター
説明
VPC
[既存を使用] を選択し、VPC 用の SNAT を自動的に設定するチェックボックスをオンにします。これは Trustee イメージをプルするために必要です。
vSwitch
VPC 内に少なくとも 2 つの vSwitch が存在することを確認してください。そうでない場合、パブリック ALB を公開できません。
コンポーネント設定:以下のパラメーターを設定し、[次へ:設定の確認] をクリックします。
パラメーター
説明
サービスディスカバリー
CoreDNS を選択します。
Ingress
ALB Ingress を選択します。ALB クラウドネイティブゲートウェイインスタンスのソースには [新規] を選択し、2 つの vSwitch を選択します。
設定の確認:設定情報と利用規約を確認し、Kubernetes クラスターの作成をクリックします。
クラスターが作成された後、csi-provisioner (マネージド) コンポーネントをインストールします。詳細については、「コンポーネントの管理」をご参照ください。
ACK クラスターに Trustee リモート認証サービスをデプロイします。
パブリックネットワークまたは内部ネットワーク経由でクラスターに接続します。詳細については、「クラスターへの接続」をご参照ください。
ダウンロードした KMS アプリケーション ID 認証情報 (
clientKey_****.json)、認証情報パスワード (clientKey_****_Password.txt)、および CA 証明書 (PrivateKmsCA_***.pem) を Alibaba Cloud ACK Serverless クラスターに接続された環境にアップロードします。次に、以下のコマンドを実行して、Alibaba Cloud KMS をキーストレージバックエンドとして Trustee リモート認証サービスをデプロイします。# プラグインをインストール 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.7.6 # ACK クラスターのリージョンを設定 (例:cn-hangzhou) export REGION_ID=cn-hangzhou # エクスポートした KMS インスタンスの情報 # ご利用の KMS インスタンス ID に置き換えてください export KMS_INSTANCE_ID=kst-hzz66a0*******e16pckc # ご利用の KMS インスタンスのアプリケーション ID 認証情報へのパスに置き換えてください 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: NoneTrustee サービスエンドポイントを取得します。
export TRUSTEE_URL=http://$(kubectl get AlbConfig alb-$DEPLOY_RELEASE_NAME -o jsonpath='{.status.loadBalancer.dnsname}')/api echo ${TRUSTEE_URL}出力例:
http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/api。Trustee サービスの接続性をテストします。
cat << EOF | curl -k -X POST ${TRUSTEE_URL}/kbs/v0/auth -H 'Content-Type: application/json' -d @- { "version":"0.4.0", "tee": "tdx", "extra-params": "foo" } EOF接続が成功すると、次のような出力が返されます。
{"nonce":"PIDUjUxQdBMIXz***********IEysXFfUKgSwk=","extra-params":""}
Trustee のネットワークホワイトリストを設定します。
説明これにより、EAS のデプロイ環境が Trustee にアクセスできるようになります。
ALB コンソールに移動し、アクセス制御ポリシーグループを作成し、Trustee へのアクセスが必要な IP アドレスまたはアドレス範囲を追加します。詳細については、「アクセス制御」をご参照ください。次のアドレス範囲を追加します。
EAS サービスがデプロイされている VPC のパブリック IP アドレス。
推論クライアントの送信元 IP アドレス。
次のコマンドを実行して、Trustee インスタンスが使用する ALB インスタンス ID を取得します。
kubectl get ing --namespace ${DEPLOY_NAMESPACE} frontend-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 に保存します。鍵は認証が成功した後にのみ解放されます。
KMS コンソールに移動します。左側のナビゲーションウィンドウで、を選択します。Generic Secretsタブで、資格情報の作成をクリックします。主要なパラメーターは以下の通りです:
シークレット名:キーをインデックスするためのカスタム名。例:
model-decryption-key。シークレット値:モデルの暗号化に使用したキーを入力します。例:0Bn4Q1wwY9fN3P。実際のキーを使用してください。
暗号鍵:作成した CMK を選択します。
Trustee 管理 UI にログインして、キーのアクセス履歴を表示します。
Trustee フロントエンド管理 UI のアドレスを取得します。
kubectl get AlbConfig alb-$DEPLOY_RELEASE_NAME -o jsonpath='{.status.loadBalancer.dnsname}'ブラウザでアドレスにアクセスします。
Trustee フロントエンド管理 UI にログインするための秘密鍵を取得します。
kubectl get secret kbs-auth-keypair -o jsonpath="{.data.private\.key}" | base64 -dUI にキーを貼り付けてログインします。
Trustee Gateway 管理プラットフォームで、左側のナビゲーションウィンドウの [監査ログ] をクリックします。次に、[リソース監査インターフェイス] をクリックして、モデルの復号鍵のアクセス履歴を表示します。
ステップ 2:暗号化されたモデルのデプロイ
-
PAI コンソールにログインします。ページの上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
Inference Service ページで、Deploy Service をクリックします。Custom Model Deployment セクションで、Custom Deployment をクリックします。
以下のパラメーターを設定します。その他のパラメーターについては、「カスタムデプロイ」をご参照ください。
パラメーター
説明
Environment Information
Deployment Method
Image-based Deploymentを選択します。
Image Configuration
イメージを選択します。この例では、Alibaba Cloud Image > [chat-llm-webui:3.0-vllm] を選択します。
Storage Mount
OSS を選択し、以下のパラメーターを設定します:
Uri:暗号化されたモデルが保存されているディレクトリを選択します。例:
oss://examplebucket/qwen-encrypted/。実際のパスを使用してください。Mount Path:プレーンテキストモデルがマウントされるディレクトリ。例:
/mnt/model。
Command to Run
例:
python webui/webui_server.py --port=8000 --model-path=/mnt/model --backend=vllm。--model-pathの値は、復号されたモデルが読み取れるように、マウントパスと同じでなければなりません。Port Number
8000 に設定します。
Environment Variables
Trustee 認証用の環境変数を追加します。この例では、キーが
eas-test、値が1234の環境変数が追加されます。Resource Information
Deployment
この例では、インスタンスタイプは ml.gu7i.c32m188.1-gu30 です。
Network Information
VPC
VPC を設定し、VPC の SNAT パブリック IP アドレスを設定します。EAS がリモート認証サービスに到達するためには、パブリックネットワークアクセスが必要です。
vSwitch
Security Group Name
Features
Configure Secure Encryption Environment
Configure Secure Encryption Environment を有効にし、次のパラメーターを設定してください:
Encryption Method:モデルの暗号化に使用した方式。Sam と Gocryptfs の両方がサポートされています。この例では Sam を使用します。
System Trust Management Service Address:デプロイされた Trustee サービスのエンドポイント。例:
http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/trustee。KBS URI of Decryption Key:モデルの復号鍵の KBS URI。フォーマットは
kbs:///default/aliyun/<secret_name>です。<secret_name>を作成したシークレットの名前に置き換えます。
JSON 設定の例:
パラメーターを設定し、Deploy をクリックします。
[サービスステータス] が [実行中] と表示されたら、デプロイは完了です。認証を検証するには、Trustee 管理 UI でキーのアクセス履歴を確認します。

ステップ 3:コンフィデンシャル推論の実行
1. サービスエンドポイントの表示
Inference Service タブで、対象のサービス名をクリックして Overview ページを開きます。Overview エリアで、View Endpoint Information をクリックします。
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 サービスのトークン。
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."
]
]
}