大規模言語モデル (LLM) の推論には、機密データとコアモデル資産が含まれます。信頼できない環境で LLM を実行すると、データとモデルが漏洩するリスクがあります。Container Service for Kubernetes (ACK) が提供する機密 AI ソリューションである ACK Confidential AI (ACK-CAI) は、Intel TDX や GPU 信頼できる実行環境 (TEE) などのハードウェア機密コンピューティング技術を統合し、モデル推論にエンドツーエンドのセキュリティを提供します。
ACK-CAI を使用して、ACK ヘテロジニアス機密コンピューティングクラスターに vLLM モデル推論サービスをデプロイできます。これにより、モデルとデータのセキュアな隔離と暗号化保護が保証されます。利点は次のとおりです。
-
ハードウェアレベルのセキュリティ隔離:Intel® TDX と NVIDIA GPU TEE テクノロジーを使用して、ハードウェアレベルの信頼できる実行環境 (TEE) を構築します。これにより、計算中のモデルとデータの機密性と完全性が保証されます。
-
信頼できる鍵配布:リモートアテステーションメカニズムを使用して、ランタイム環境を厳密に検証します。検証が成功すると、専用の Trustee サービスがモデル復号鍵を信頼できる環境に配布します。
-
エンドツーエンドのデータ暗号化:Trusted Network Gateway (TNG) を使用して、クライアントとサーバー間の暗号化チャネルを確立します。これにより、送信中の推論リクエストと応答データのセキュリティが保護されます。
-
アプリケーションへの非侵入型:Kubernetes Webhook に基づいて、セキュリティコンポーネントを Pod に自動的に挿入します。ビジネスコードやイメージを変更することなく、アノテーションを使用してアプリケーションのセキュリティ機能を有効にするだけです。
仕組み
ACK-CAI は、Trustiflux という名前の一連の Sidecar コンテナを動的に挿入することにより、アプリケーション Pod に透明な機密コンピューティング機能を提供します。そのコアセキュリティメカニズムはリモートアテステーションに依存しており、モデルとデータが信頼できる環境でのみアクセスされることを保証します。
プロセスと環境ガイド
セキュアな vLLM 推論サービスのデプロイとアクセスには、以下の段階が含まれます。
|
ステップ |
目的 |
環境 |
|
推論モデルを暗号化し、Object Storage Service (OSS) にアップロードして、静的な状態でのセキュアなストレージを確保します。 |
専用のデータ準備サーバー |
|
|
専用の Trustee 検証サービスを信頼のルートとしてデプロイし、環境の検証と鍵の配布を行います。 |
専用の Trustee サーバー |
|
|
機密コンピューティングタスク用の Kubernetes ノードを作成し、設定します。 |
|
|
|
クラスターに CAI コンポーネントをインストールし、アプリケーションにセキュリティ機能を動的に挿入します。 |
ACK コンソール |
|
|
Helm を使用して vLLM サービスをクラスターにデプロイし、アノテーションを介して機密コンピューティング保護を有効にします。 |
kubectl と Helm が設定され、API サーバーに接続されているマシン |
|
|
クライアントセキュリティエージェントを起動し、暗号化チャネルを通じてデプロイされたモデルサービスにアクセスします。 |
クライアント環境 |
ステップ 1:暗号化モデルの準備
このセクションでは、暗号化ツールを使用してモデルデータを処理し、Object Storage Service (OSS) にアップロードして、後続の暗号化配布に備えます。
実行環境:セキュアな隔離を実現するために、モデルのダウンロード、暗号化、アップロードを行うための一時的な Elastic Compute Service (ECS) インスタンスを準備します。プライベートネットワーク経由で暗号化モデルデータを高速にアップロードするために、ECS インスタンスが OSS バケット と同じリージョンにあることを推奨します。
モデルファイルはサイズが大きく、プロセスに時間がかかります。ソリューションを迅速に体験するには、このセクションをスキップしてください。暗号化モデルのサンプルファイル を試用し、直接 ステップ 2:Trustee リモートアテステーションサービスのデプロイ に進むことができます。
1. モデルのダウンロード
モデルをクラウドにデプロイする前に、暗号化してクラウドストレージにアップロードします。復号鍵は KMS によって管理され、リモートアテステーションサービスによって制御されます。モデルの暗号化は、ローカルまたは信頼できる環境で実行してください。この例では、Qwen2.5-3B-Instruct LLM を使用します。
すでにモデルをお持ちの場合は、このセクションをスキップして 2. モデルの暗号化 に進んでください。
Qwen2.5-3B-Instruct モデルには Python 3.9 以降が必要です。ModelScope ツールを使用してモデルをダウンロードするには、ターミナルで次のコマンドを実行します。
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 のみがサポートされています。次のいずれかのインストール方法を選択できます。
方法 1:(推奨) 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方法 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 リモートアテステーションサービスにアップロードする必要があります。
このトピックでは、モデルの暗号化に
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. モデルのアップロード
ヘテロジニアスインスタンスをデプロイするのと同じリージョンに OSS バケットを準備します。暗号化されたモデルを Alibaba Cloud OSS にアップロードします。これにより、後でヘテロジニアスインスタンスからモデルをプルしてデプロイできます。
OSS を例にとると、qwen-encrypted という名前のバケットとディレクトリを作成できます。例えば、oss://examplebucket/qwen-encrypted/ のようになります。詳細については、「コンソールのクイックスタート」をご参照ください。モデルファイルはサイズが大きいため、ossbrowser を使用して暗号化モデルをこのディレクトリにアップロードすることを推奨します。
ステップ 2:Trustee リモートアテステーションサービスのデプロイ
ゼロトラストの原則に従い、どの機密コンピューティング環境も、モデル復号鍵などの機密データへのアクセス権限を得る前に検証に合格する必要があります。このステップでは、モデルと推論サービスのランタイム環境を検証するための専用の Trustee サービスをデプロイします。これにより、環境が信頼できると確認された場合にのみモデル復号鍵が挿入され、クライアント側が推論リクエストを開始する際に環境の信頼性が検証されます。
実行環境:ACK クラスターの外部にデプロイされた専用のスタンドアロンサーバー。例えば、ECS インスタンスやオンプレミスのプライベートサーバーなど。
1. デプロイソリューションの選択
セキュリティの分離と信頼の独立性の原則に基づき、Trustee は ACK ヘテロジニアス機密コンピューティングクラスターの外部にあるスタンドアロンサーバーにデプロイする必要があります。信頼レベルの要件に応じて、2 つの推奨ソリューションがあります。
信頼レベル:クラウドサービスプロバイダーが Trustee デプロイ環境に対して持つソフトウェアとハードウェアの制御度が高いほど、信頼レベルは低くなります。これは、Trustee サービスがリモートアテステーションの信頼のルートとして機能し、クラウド内の機密コンピューティング/信頼できるコンピューティングリソースを配布するためです。厳格な信頼モデルでは、Trustee のオーナーはデプロイ環境のすべてのソフトウェアとハードウェアを完全に制御し、それが顧客管理の信頼できる環境で実行されることを保証する必要があります。
-
ECS インスタンス
ACK クラスターと同じ VPC 内に追加の ECS インスタンスを作成し、Trustee サービスを専門に実行します。これにより、Alibaba Cloud プライベートネットワークを介した効率的で安全な通信が可能になり、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 とサービスポート番号を使用して、URL としてネットワーク経由で直接アクセスできます。例:
http://<trustee-ip>:8081/api。ここで、
<trustee-ip>は Trustee がデプロイされているサーバーの IP アドレスです。本番環境で Trustee を使用する場合は、セキュリティを強化するために 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という名前のサブディレクトリを作成)、キーの内容を書き込みます。<model decryption key>を実際のキー文字列に置き換えます。この例では0Bn4Q1wwY9fN3Pを使用します。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 システムで対応するキー IDkbs:///default/aliyun/model-decryption-keyを持ちます。
ステップ 3:ACK 機密コンピューティングクラスターの設定
このセクションでは、機密コンピューティングタスクを実行するためのハードウェアレベルのセキュリティ隔離機能を備えた基盤インフラストラクチャを構築します。これには、ACK クラスターの作成と、Intel TDX および NVIDIA TEE 機能を備えた ecs.gn8v-tee インスタンスをワーカーノードとして追加することが含まれます。
実行環境:ECS、ACK コンソール (クラスター、ノードプール、ECS インスタンスの作成用)、および作成された ecs.gn8v-tee インスタンスのシェル環境 (ドライバーのインストール用)。
-
中国 (北京) リージョンに ACK マネージドクラスター Pro 版 を作成します。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
-
クラスターのノードプールを作成して、機密コンピューティングインスタンスを管理します。詳細については、「ノードプールの作成と管理」をご参照ください。
-
vSwitch:中国 (北京) ゾーン L の vSwitch を選択します。
-
スケーリングモード:デフォルト設定を維持します。自動弾性スケーリングを有効にしないでください。
-
インスタンスタイプ:ecs.gn8v-tee.4xlarge 以上。
-
オペレーティングシステム:Alibaba Cloud Linux 3.2104 LTS 64 ビット。
-
システムディスク:100 GiB 以上。
-
想定ノード数:ノードプールの初期ノード数。デフォルト設定の 0 を維持します。
-
ノードラベル (Labels):NVIDIA ドライバーのバージョンを指定するためにラベル (キー:
ack.aliyun.com/nvidia-driver-version、値:550.144.03) を追加します。
-
-
EGS 機密コンピューティングインスタンスをクラスターノードとして作成します。詳細については、「インスタンスのカスタム購入」をご参照ください。
-
リージョン:中国 (北京)。
-
ネットワークとゾーン:クラスター VPC と一致する VPC、ゾーン L。
-
インスタンスタイプ:ecs.gn8v-tee.4xlarge 以上。
gn8v-tee インスタンスタイプは、CPU と GPU の機密コンピューティング機能がデフォルトで有効になっています。追加で機密仮想マシンを選択する必要はありません。
-
イメージ:Alibaba Cloud Linux 3.2104 LTS 64 ビット。
-
-
作成した EGS インスタンスにログインし、NVIDIA ドライバーと CUDA ツールキットをインストールします。詳細については、「ステップ 1:NVIDIA ドライバーと CUDA ツールキットのインストール」をご参照ください。
-
EGS インスタンスを以前に作成したノードプールに追加します。方法として手動追加を選択します。詳細については、「既存ノードの追加」をご参照ください。
ステップ 4:ACK-CAI コンポーネントのデプロイ
ACK-CAI コンポーネントに基づいて、クラスター内のアプリケーションに非侵入型の機密コンピューティング機能を有効にします。このコンポーネントには、Pod のアノテーションに基づいて Sidecar コンテナを自動的に挿入する Webhook コントローラーが含まれています。これらの Sidecar コンテナは、リモートアテステーション、モデル復号、およびセキュアな通信を提供します。
実行環境:ACK コンソール。
Container Service for Kubernetes コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
デプロイ をクリックし、画面の指示に従って最新バージョンの ACK-CAI をインストールします。
インストールが完了したら、Helm チャートリストでデプロイステータスを確認します。
ステップ 5:vLLM モデル推論サービスのデプロイ
基本的な環境とセキュリティコンポーネントの準備が整ったら、このセクションでは Helm を使用して vLLM サービスをデプロイします。特定のアノテーションを追加して、アプリケーションが ACK-CAI によるセキュリティ強化を必要とすることを宣言します。
実行環境:kubectl と Helm が設定され、クラスターにアクセスできるマシン。ワークベンチまたは CloudShell で直接使用します。
-
空の Helm チャートディレクトリを作成します。
mkdir -p ack-cai-vllm-demo cd ack-cai-vllm-demo -
vLLM サービスをデプロイするための 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 AK ID に置き換えます akSecret: "xxxxx" # Alibaba Cloud AK Secret に置き換えます -
vLLM サービスをデプロイします。
helm install vllm . -n default -
CAI コンポーネントの Sidecar コンテナが Pod に正常に挿入されたか確認します。
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
ステップ 6:推論サービスへのセキュアなアクセス
サーバー側のセキュリティ保護に加えて、クライアントからサーバーへのエンドツーエンドの暗号化通信リンクを確立します。これにより、送信中の推論データのセキュリティが保証されます。このセクションでは、クライアントで 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 はこれらのパラメーターを解析し、必要なセキュリティコンポーネント (AA、CDH など) を Pod に動的に挿入および設定します。これにより、透明な暗号化/復号、リモートアテステーション、信頼できるネットワークなどの機能が実現されます。
以下は、完全な 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 のリモートアテステーションサポートを有効にするかどうか。デフォルトは |
|
|
任意 |
特定の HTTP ポートのトラフィックに対して TNG が TLS 暗号化を実行するように設定します。これはオブジェクトの配列を受け入れ、各オブジェクトはポート暗号化ルールを表します。
ここで:
|
暗号化モデルのサンプルファイル
以下に、テストに利用できる暗号化モデルとその関連設定情報を提供します。これらのモデルは、公開読み取り可能な OSS バケットに保存され、指定された方法で暗号化されています。