大規模言語モデル (LLM) の推論には、機密データとコアモデル資産が含まれており、信頼できない環境で実行されると漏洩のリスクがあります。Container Service for Kubernetes (ACK) Confidential AI (ACK-CAI) は、Intel Trust Domain Extensions (TDX) や GPU Trusted Execution Environments (TEE) などのハードウェアベースのコンフィデンシャルコンピューティング技術を統合することにより、モデル推論にエンドツーエンドのセキュリティを提供します。
ACK-CAI を使用すると、vLLM 推論サービスを ACK 異種コンフィデンシャルコンピューティングクラスターにデプロイできます。これにより、モデルとデータに対して安全な分離と暗号化による保護が提供されます。主な利点は次のとおりです。
ハードウェアレベルのセキュリティ分離: Intel® TDX と NVIDIA GPU TEE を使用してハードウェアベースの TEE を構築し、計算中のモデルとデータの機密性と完全性を確保します。
信頼できる鍵配布: リモートアテステーションメカニズムを使用して、実行環境の完全性を厳密に検証します。検証が成功した後にのみ、別のトラスティサービスがモデル復号鍵を信頼できる環境にリリースします。
エンドツーエンドのデータ暗号化: Trusted Network Gateway (TNG) を介してクライアントからサーバーへの暗号化チャネルを確立し、送信中の推論リクエストとレスポンスを保護します。
アプリケーションへの非侵入: Kubernetes Webhook を使用して、セキュリティコンポーネントをポッドに自動的にインジェクトします。ビジネスコードやコンテナイメージを変更することなく、単純なアノテーションでアプリケーションのコンフィデンシャルコンピューティング機能を有効にできます。
仕組み
ACK-CAI は、Trustiflux と呼ばれる一連のサイドカーコンテナをアプリケーションポッドに動的にインジェクトすることにより、透明なコンフィデンシャルコンピューティング機能を有効にします。コアセキュリティメカニズムはリモートアテステーションに基づいており、モデルとデータが検証済みの信頼できる環境内でのみアクセスされることを保証します。
プロセスと環境ガイド
安全な vLLM 推論サービスのデプロイとアクセスには、以下の段階が含まれます。
ステップ | 目的 | 環境 |
推論モデルを暗号化し、Object Storage Service (OSS) にアップロードして、保存時の機密性を確保します。 | データ準備用の別のサーバー。 | |
環境の検証と鍵の配布のための信頼のルートとして機能するスタンドアロンの Trustee サービスをデプロイします。 | 別の Trustee サーバー。 | |
コンフィデンシャルコンピューティングタスクを実行するための Kubernetes ノードを作成および構成します。 |
| |
クラスターに CAI コンポーネントをインストールして、セキュリティ機能の動的インジェクションを有効にします。 | ACK コンソール | |
Helm を使用して vLLM サービスをクラスターにデプロイし、アノテーションでコンフィデンシャルコンピューティング保護を有効にします。 | kubectl と Helm が構成され、API サーバーに接続されているマシン。 | |
クライアント側のセキュリティプロキシを開始して、暗号化されたチャネルを介してデプロイされたモデルサービスにアクセスします。 | クライアント環境 |
ステップ 1: 暗号化モデルの準備
このステップでは、モデルデータを暗号化し、安全な配布の準備として OSS にアップロードする方法について説明します。
実行環境: セキュリティを確保するため、これらの手順は一時的な隔離された ECS インスタンスで実行してください。最適なパフォーマンスを得るには、このインスタンスを OSS バケット と同じリージョンに配置して、高速な内部ネットワークアップロードを活用することをお勧めします。
モデルファイルはサイズが大きく、このプロセスには時間がかかる場合があります。ソリューションを迅速にテストするには、このステップをスキップできます。サンプル暗号化モデルファイル を使用し、ステップ 2: 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. モデルの暗号化
このソリューションは、オープンソースの AES-256-GCM 標準に基づく gocryptfs 暗号化モードを使用したモデル暗号化をサポートしています。
Gocryptfs ツールをインストールします。現在、デフォルトパラメーターの Gocryptfs V2.4.0 のみがサポートされています。次のいずれかのインストール方法を選択してください。
方法 1: (推奨) 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方法 2: プリコンパイル済みバイナリの直接ダウンロード
# プリコンパイル済みの 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 # 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. モデルのアップロード
デプロイする異種インスタンスと同じリージョンにある OSS バケットを準備します。次に、暗号化されたモデルを OSS バケットにアップロードします。これにより、後続の操作のために異種インスタンスからモデルデータをプルしてデプロイできます。
「OSS コンソールを使用した開始」ガイドを参照して、ストレージスペース (バケット) と qwen-encrypted という名前のディレクトリ (例: oss://examplebucket/qwen-encrypted/) を作成します。モデルファイルのサイズが大きいため、ossbrowser を使用して暗号化モデルをこのディレクトリにアップロードすることをお勧めします。
ステップ 2: Trustee リモートアテステーションサービスのデプロイ
ゼロトラストの原則に従い、コンフィデンシャルコンピューティング環境は、モデル復号鍵などの機密データにアクセスする前に検証される必要があります。
このステップでデプロイするスタンドアロンの Trustee サービスは、この検証プロセスの中央機関として機能します。その役割は次のとおりです。
モデルと推論サービスの実行環境を検証します。
モデル復号鍵が検証済みの信頼できる環境にのみリリースされることを保証します。
クライアントが推論リクエストを開始する際にサービスの信頼性を確認できるようにします。
実行環境: ACK クラスターの外部にデプロイされた専用の別サーバー (ECS インスタンスやオンプレミスサーバーなど)。
1. デプロイソリューションの選択
必要な信頼レベルに基づいて、次のソリューションから選択します。
ECS インスタンス
同じ VPC 内の別の ECS インスタンスに Trustee サービスをデプロイすると、論理的な分離と、ACK クラスターとの高速で安全な内部ネットワーク通信の両方が提供されます。
オンプレミスサーバー
最大限のセキュリティを確保するために、Trustee サービスをデータセンターにデプロイし、専用回線または VPN を介して VPC に接続します。これにより、クラウドプロバイダーから独立して、信頼のルートのハードウェアおよびソフトウェア環境を完全に制御できます。
開始する前に、サーバーでインターネットアクセスが有効になっており、ポート 8081 が開いていることを確認してください。
2. Trustee サービスのデプロイ
公式 YUM リポジトリから Trustee RPM パッケージをインストールします (Alibaba Cloud Linux 3.x および Anolis 8.x+ で利用可能)。
yum install trustee-1.5.2サービスは自動的に開始され、ポート 8081 でリッスンします。URL
http://<trustee-ip>:8081/apiを使用してネットワーク経由で直接アクセスできます。<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 にマッピングすることで鍵を管理します。次の手順では、デフォルトのストレージフォルダにモデル復号鍵を作成してインポートします。
Trustee サーバーに復号鍵を保存するためのディレクトリとファイルを作成します。これにより、ローカルフォルダ
/opt/trustee/kbs/repository/default/にaliyunという名前のサブディレクトリが作成されます。<model-decryption-key>をステップ 1 で使用した鍵に置き換えてください。この例では、鍵はalibaba@1688です。sudo mkdir -p /opt/trustee/kbs/repository/default/aliyun/ sudo sh -c 'echo -n "<model-decryption-key>" > /opt/trustee/kbs/repository/default/aliyun/model-decryption-key'鍵 ID を確認します。
鍵は現在、ファイルパス
.../aliyun/model-decryption-keyに保存されており、Trustee システム内の鍵 ID はkbs:///default/aliyun/model-decryption-keyです。
ステップ 3: ACK コンフィデンシャルコンピューティングクラスターの構成
このステップでは、基盤となるインフラストラクチャを構築します。ワーカーノードとして Intel TDX と NVIDIA TEE の両方の機能を提供する ecs.gn8v-tee インスタンスを持つ ACK クラスターです。
実行環境: ECS および ACK コンソール (クラスター、ノードプール、ECS インスタンスの作成用)、および作成された ecs.gn8v-tee インスタンスのシェル環境 (ドライバーのインストール用)。中国 (北京) リージョンに「ACK マネージド Pro クラスターを作成する」をご参照ください。
コンフィデンシャルコンピューティングインスタンスを管理するために、クラスターの「ノードプールを作成する」をご参照ください。
vSwitch: 中国 (北京) リージョンのゾーン L にある vSwitch を選択します。
スケーリングモード: デフォルトの構成を維持します。自動スケーリングを有効にしないでください。
インスタンスタイプ:
ecs.gn8v-tee.4xlargeまたはそれ以上の仕様。オペレーティングシステム: Alibaba Cloud Linux 3.2104 LTS 64 ビット。
システムディスク: 100 GiB 以上。
期待されるノード数: ノードプールの初期ノード数。デフォルト構成の 0 を維持します。
ノードラベル: NVIDIA ドライバーのバージョンを指定するためにラベル (キー:
ack.aliyun.com/nvidia-driver-version, 値:550.144.03) を追加します。
クラスターノードとして機能する Elastic GPU Service (EGS) コンフィデンシャルコンピューティングインスタンスを作成します。詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。
リージョン: 中国 (北京)。
ネットワークとゾーン: VPC はクラスターの VPC と同じでなければなりません。この例では、ゾーン L のものを使用します。
インスタンス:
ecs.gn8v-tee.4xlargeまたはそれ以上の仕様。gn8v-teeインスタンスタイプは、CPU および GPU コンフィデンシャルコンピューティング機能がデフォルトで有効になっています。コンフィデンシャル VM を選択する必要はありません。イメージ: Alibaba Cloud Linux 3.2104 LTS 64 ビット。
作成した EGS インスタンスにログオンし、「NVIDIA ドライバーと CUDA ツールキットをインストールする」をご参照ください。
EGS インスタンスを作成したノードプールに追加します。インスタンスを追加する方法として [手動] を選択します。詳細については、「既存のノードを追加する」をご参照ください。
ステップ 4: ACK-CAI コンポーネントのデプロイ
ACK-CAI コンポーネントには、アノテーションに基づいて必要なサイドカーコンテナをポッドに自動的にインジェクトする Webhook コントローラーが含まれています。これらのサイドカーは、リモートアテステーション、モデル復号、および安全な通信を処理します。
実行環境: ACK コンソール。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[デプロイ] をクリックし、ack-cai の最新バージョンをインストールします。
[パラメーター] ステップで、YAML テンプレートの
tagを1.1.1に変更します。Helm チャートリストでデプロイステータスを表示できます。
ステップ 5: vLLM 推論サービスのデプロイ
Helm を使用して vLLM サービスをデプロイし、特定のアノテーションを追加してコンフィデンシャルコンピューティング保護を有効にします。
実行環境: kubectl と Helm が構成され、クラスターにアクセスできるマシン。Workbench または CloudShell を使用できます。
Helm チャート用の新しいフォルダを作成します。
mkdir -p ack-cai-vllm-demo cd ack-cai-vllm-demovLLM サービスをデプロイするための Helm チャートを初期化します。
この Helm チャートは、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 バケットの名前に置き換えます。 path: "/qwen2.5-3b-gocryptfs/" # OSS バケット内の暗号化モデルファイルへのパスに置き換えます。 url: "https://oss-cn-beijing-internal.aliyuncs.com" # OSS エンドポイントに置き換えます。 akId: "xxxxx" # Alibaba Cloud AccessKey ID に置き換えます。 akSecret: "xxxxx" # Alibaba Cloud AccessKey シークレットに置き換えます。Helm を使用して vLLM サービスをデプロイします。
helm install vllm . -n defaultCAI コンポーネントのサイドカーコンテナがポッドに正常にインジェクトされたことを確認します。
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 RunningvLLM サービスのエンドポイントを取得して記録します。
kubectl get service cai-vllm-svc -o jsonpath='http://{.status.loadBalancer.ingress[0].ip}:{.spec.ports[0].port}{"\n"}'期待される出力は、
<vllm-ip>:<port>の形式の URL です。http://182.XX.XX.225:8080
ステップ 6: 推論サービスへの安全なアクセス
エンドツーエンドのセキュリティを確保するには、TNG クライアントゲートウェイを使用してリクエストをプロキシする必要があります。プロキシは、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 アドミッション Webhook はこれらのパラメーターを解析し、それらを使用して 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 からマウントされたデータを信頼できる環境で自動的に復号します。 |
| はい | モデル復号鍵の Key Broker Service (KBS) URI。フォーマットは |
| はい | リモートアテステーションと鍵取得に使用される Trustee サービスのアドレス。 |
| いいえ | AA コンポーネントのバージョン。 |
| いいえ | CDH コンポーネントのバージョン。 |
| いいえ | TNG コンポーネントのバージョン。 |
| いいえ | Cachefs コンポーネントのバージョン。 |
| いいえ | CPU (TDX コンフィデンシャルインスタンス) のリモートアテステーションサポートを有効にするかどうかを指定します。デフォルト: |
| いいえ | GPU のリモートアテステーションサポートを有効にするかどうかを指定します。デフォルト: |
| いいえ | 特定の HTTP ポートのトラフィックを暗号化するために TNG が TLS を使用するように構成します。オブジェクトの配列を受け入れ、各オブジェクトはポート暗号化ルールを表します。
|
サンプル暗号化モデルファイル
テスト目的で、以下の公開されている暗号化モデルを使用できます。これらは OSS バケットに保存されており、指定された方法で暗号化されています。