1. 概要
この Codelab では、Prompt Encryption SDK を使用して、Google Cloud の高信頼実行環境(TEE)で提供されるモデルと安全に通信する方法について説明します。
学習内容
- クライアントとリモート推論サーバーの間に、暗号で検証された暗号化チャネルを確立します。
- Attested TLS を使用したサーバーの ID(ソフトウェア ハッシュ、ハードウェア モデル、起動構成)の検証。
- 検証済みのエンクレーブに到達するまでプロンプトを暗号化することで、データ主権を確保します。
- Prompt Encryption SDK を使用して、Confidential Space で実行されている vLLM を操作する。
必要なもの
- 課金が有効な Google Cloud プロジェクトが用意されていること。
- Google Cloud SDK(gcloud)がインストールされ、認証されている。
- Python 3.10 以降の環境。
- Gemma モデルをダウンロードするための Hugging Face トークン。
- VPC ファイアウォールと外部 IP アドレスの割り当てに精通している。
- SDK をローカルでビルドするには、_ekm.c C 拡張機能をコンパイルする必要があります。Python C ヘッダーがインストールされていない場合、このステップは失敗します。この問題を解決するには、python3-dev をインストールします(Debian/Ubuntu の場合は sudo apt-get install python3-dev など)。
2. Cloud リソースの設定
始める前に、必要な API を有効にして、環境を構成していることを確認してください。
1. 必要な API を有効にする:
gcloud services enable compute.googleapis.com \
confidentialcomputing.googleapis.com \
logging.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
2. Docker を構成します。
gcloud auth configure-docker gcr.io
3. Hugging Face トークンを設定する:
export HF_TOKEN="your_token"
4. リポジトリのクローンを作成する:
git clone https://github.com/google/prompt-encryption-sdk && cd prompt-encryption-sdk
3. シナリオ
使用するサービス:
- クライアント: ローカルの Python 環境または標準 VM。
- サーバー: Confidential Space(TDX/SEV-SNP)内でオープンソース モデル(Gemma など)をサービングする vLLM インスタンス。
- SDK: prompt_encryption_sdk Python ライブラリ。
4. ステップ 0: サーバーのセットアップ
クライアントが検証を行う前に、Confidential Space で実行されているサーバーが必要です。提供された bash スクリプトがプロビジョニングを処理します。
./codelabs/setup.sh --project-id <PROJECT_ID>
setup.sh スクリプトは次の処理を行います。
- 必要な API(Compute、Confidential Computing、Logging、Artifact Registry、Cloud Build)を有効にします。
- Docker イメージをビルドして push します(vLLM を Attested TLS ミドルウェアでラップします)。
- 必要な権限を持つサービス アカウントをプロビジョニングします。
- Confidential VM(H100 GPU と TDX が有効になっている A3 インスタンス)を作成します。
- ネットワーキングとロード バランシング(パススルー ネットワーク ロードバランサ)を構成します。
- 出力を(イメージ ハッシュとロードバランサの IP)ローカル ファイルに保存します。
5. ステップ 1: 証明書付きクライアントを実行する
サーバーが安全に実行されているので、証明された接続を確立します。
python3 -m venv venv
source venv/bin/activate
pip install -r examples/requirements.txt
pip install -e .
./codelabs/run_client.sh <PROJECT_ID>
run_client.sh スクリプトは、デプロイの詳細を読み取り、ConfidentialSDKClient を使用して Python リクエストを実行します。証明書が失敗した場合、AttestationError が発生し、プロンプトは送信されません。
6. ステップ 2: クリーンアップ
料金が発生しないように、終了したらリソースをクリーンアップします。
./codelabs/cleanup.sh --project-id <PROJECT_ID>
7. 仕組み
http.post の実行中に何が起こるか
- TCP/TLS: 標準接続が確立されました。
- ハンドシェイクのインターセプト: SDK は本文を送信する前に一時停止します。
- AttestConnection RPC: SDK がサーバーに nonce を送信します。
- 見積もり生成: サーバーが TEE ハードウェアの見積もりをリクエストします。
- 検証: SDK は引用符の署名とポリシーを検証します。
- バインド: SDK は、チャネルの「エクスポートされた鍵マテリアル」が引用符でバインドされたセッションと一致することを確認します。
- データ送信: すべてのチェックに合格した場合にのみ、本文が送信されます。
8. トラブルシューティング
- Attestation Failed: ポリシーの image_hash がコンテナと一致することを確認します。
- Connection Refused: サーバーにアクセス可能で、ポート 8000 が開いていることを確認します。
- タイムアウト: TEE 引用符の生成には時間がかかることがあります。タイムアウトが十分であることを確認してください。
9. 完了
Prompt Encryption SDK の Codelab は終了です。クライアントと TEE ベースの推論サーバーの間に、暗号的に検証された暗号化チャネルを確立する方法を学びました。
次のステップ
- 高度な AttestationPolicy 構成について説明します。
- SDK を既存のプロダクション アプリケーションに統合します。
- Confidential Space と TEE ハードウェア モデルの詳細を確認する。