1. 概要
Confidential Virtual Machine(CVM)は、ハードウェアベースのメモリ暗号化と整合性保護を使用する Compute Engine 仮想マシンの一種です。これにより、使用中のデータやアプリケーションがメモリ内で読み取りまたは変更されるのを防ぐことができます。この Codelab では、CVM で Intel TDX 証明書引用を生成し、デモンストレーション目的でローカルで検証する方法について説明します。また、CVM の Google Cloud ホストとインスタンスの来歴も確認します。
この Codelab では、次の手順について説明します。
- Intel TDX Confidential VM を設定する
- TDX 証明書引用を取得する
- TDX 証明書引用とノンスを検証する
- GCE ファームウェア(OVMF)の整合性を検証する
- GCE TDX ホストとインスタンスの来歴を検証する
学習内容
go-tdx-guestツールを使用して CVM で TDX 証明書引用を取得する方法- 引用の信頼性、鮮度(ノンス)、GCE ファームウェアの整合性(OVMF)を検証する方法
- Google Cloud ホストとインスタンスの来歴(
PPIDレジストリ ルックアップとPZIDインスタンス バインディング)を検証する方法
必要なもの
- Google Cloud Platform プロジェクト
- Google Compute Engine と Confidential VM に関する基本的な知識
2. 設定と要件
必要な API を有効にするには、Google Cloud コンソールまたはローカル開発環境で次のコマンドを実行します。
gcloud auth login
gcloud services enable \
cloudapis.googleapis.com \
cloudshell.googleapis.com \
confidentialcomputing.googleapis.com \
compute.googleapis.com
3. CVM を設定して TDX 引用を取得する
このステップでは、TDX CVM を作成し、ハードウェアから TDX 証明書引用を取得します。
- Google Cloud コンソールまたはローカル開発環境に移動します。次のように CVM を作成します。
gcloud config set project <project-id>
gcloud compute instances create tdx-cvm-attestation-codelab \
--machine-type=c3-standard-4 \
--zone=us-central1-c \
--confidential-compute-type=TDX \
--maintenance-policy=TERMINATE \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--scopes https://www.googleapis.com/auth/cloud-platform
<project-id> は、プロジェクトの一意の識別子に置き換えます。
- CVM に接続します。
gcloud compute ssh --zone us-central1-c tdx-cvm-attestation-codelab
- CVM に Go 環境を設定します。
wget https://go.dev/dl/go1.24.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.24.0.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin
go-tdx-guestツールをインストールします。
リポジトリのクローンを作成し、TDX 引用を生成する attest ツールをビルドします。
git clone https://github.com/google/go-tdx-guest.git cd go-tdx-guest/tools/attest go build
- TDX 証明書引用を取得します。
attest ツールを使用して引用を生成します。ノンス(64 バイトの REPORT_DATA)を渡し、出力を quote.bin に保存します。
nonce=$(head -c 64 /dev/urandom | xxd -p | tr -d '\n' | head -c 128) sudo ./attest -in $nonce -inform hex -outform bin -out quote.bin
TDX 引用が quote.bin に保存されました。
4. TDX 証明書引用を検証する
Intel TDX 引用(quote.bin)を生成したので、go-tdx-guest リポジトリで提供されている check
ツールを使用して検証できます。このツールは、Intel の仕様に照らして引用をチェックし、Intel のプロビジョニング証明書サービス(PCS)からダウンロードした関連資料に対して検証し、ノンスなどのポリシー制約を検証してリプレイ攻撃を防ぎます。
checkツール ディレクトリに移動してビルドします。
cd ~/go-tdx-guest/tools/check go build
- ツールを実行して、暗号署名とノンスの両方 を検証します。
-get_collateral=trueフラグを使用して、必要な TEE 証明書を Intel の PCS からダウンロードします。-check_crl=trueフラグを使用して証明書の取り消しを確認し、-report_dataフラグを使用してノンスの鮮度を検証します。
./check -in ~/go-tdx-guest/tools/attest/quote.bin -inform bin \
-get_collateral=true -check_crl=true \
-report_data $nonce
引用が暗号的に有効で、ノンスが一致する場合、ツールは次のような成功メッセージをログに記録し、コード 0 で終了します。
INFO : TDX Quote verified successfully
5. GCE ファームウェア(OVMF)の整合性を検証する
Intel のコラテラルはハードウェアを検証しますが、仮想マシンが正規の変更されていない Google Compute Engine(GCE)ファームウェアを実行していることは検証しません。
Google は、すべての公式 GCE UEFI(OVMF)ファームウェア リリースに対して、署名付きの起動保証 (ゴールデン リファレンス整合性測定(RIM)を含む)を公開 Google Cloud Storage(GCS)バケットに公開しています。
このステップでは、Google の公開 gce-tcb-verifier ツールを使用して、GCS からファームウェア保証を自動的に取得し、Google
の署名を検証して、CVM のファームウェア測定(MRTD)を検証します。
1. GCE TCB 検証ツールをビルドする
- GitHub から公開
gce-tcb-verifierリポジトリのクローンを作成します。
cd ~ git clone https://github.com/google/gce-tcb-verifier.git
- CLI ツール ディレクトリに移動してビルドします。
cd gce-tcb-verifier/gcetcbendorsement/cli go build -o gcetcbendorsement
- ビルドしたツールを PATH に追加すると便利です。
export PATH=$PATH:$(pwd)
2. GCE ファームウェア保証に対して引用を検証する
gcetcbendorsement ツールを実行して、証明書引用を検証します。検証に成功するとツールはサイレントに成功するため、コマンドを && echo "Validation Succeeded!" と連結して、成功をわかりやすく明示的に確認できます。
gcetcbendorsement tdx validate ~/go-tdx-guest/tools/attest/quote.bin && echo "Validation Succeeded!"
出力:
Validation Succeeded!
バックグラウンドで行われていること
- 抽出: ツールは
quote.binを解析し、TD 引用本文からファームウェア測定(MRTD)を抽出します。 - 取得:
MRTDを使用して GCS URL を作成し、Google の公開バケット(gs://gce_tcb_integrity)から対応するVMLaunchEndorsementをダウンロードします。 - 署名の検証: Google の公開ルート CA 証明書(
https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt)を取得し、ダウンロードした保証に対する Google の署名を暗号的に検証します。 - 測定の検証: 引用内の TDX ハードウェアによって署名された
MRTDを、Google の署名付き保証のゴールデン リファレンス測定と比較します。
すべてのチェックに合格すると、コマンドはコード 0 でサイレントに終了します(または、連結されたエコーで Validation Succeeded!
と出力します)。これにより、VM が Google 推奨の正規のファームウェアを実行していることが証明されます。
6. GCE TDX ホストとインスタンスの来歴を検証する
証明書とファームウェアの検証により、VM が Google 推奨の UEFI ファームウェアを搭載した正規の Intel TDX ハードウェアで実行されていることが確認されますが、GCE TDX 来歴検証 では、証明書引用を次の 2 つの重要な方法で Google Cloud インフラストラクチャに直接接続します。
- ホストの来歴: 引用の PCK 証明書からプラットフォームの一意のPPID(Platform Provisioning ID)を抽出して、VM を実行している物理 Google Cloud ホストマシンを識別します。次に、ホスト プラットフォームのレジストリ レコードを Google Cloud Storage(
confidential-host-registry)から取得します。このレコードには、物理ゾーンと、Google Cloud がホストの証明書を最後にプロビジョニングした日時が記録されます。 - インスタンスの来歴(PZID バインディング): Google Cloud は、特定の VM の ID(
ProjectNumber、Zone、InstanceID)を TDX 引用のMR_OWNERレジスタに暗号的にバインドします。このバインディングを検証することで、引用が インスタンスに排他的に属していることを確認し、異なる VM またはプロジェクト間での引用のリプレイ攻撃や置換攻撃を防ぐことができます。
gceprovenance CLI ツール(go-tdx-guest
リポジトリにもあります)は、引用の信頼性、鮮度チャレンジ、ホスト レジストリ レコード、インスタンス PZID
バインディングを 1 つのコマンドでチェックする、完全な来歴検証を自動化します。
gceprovenanceディレクトリに移動してツールをビルドします。
cd ~/go-tdx-guest/tools/gceprovenance go build
verifyコマンドを使用して、完全な来歴検証を実行します。引用ファイル(quote.bin)と、先ほど生成したノンスチャレンジ($nonce)を渡します。
./gceprovenance verify -quote ~/go-tdx-guest/tools/attest/quote.bin -challenge $nonce
- すべてのチェックが成功すると、ツールは次のような検証レポートを出力します。
GCE TDX provenance verification: OK Instance: projects/123456789012/zones/us-central1-c/instances/987654321098765 Checks Quote verification: OK REPORT_DATA challenge: OK Host registry document: found PZID binding: OK PPID: 0123456789abcdef0123456789abcdef Quote: tdx_quote.bin Host registry: host_registry.json
バックグラウンドで行われていること
- 引用とチャレンジ: ツールは、引用の署名チェーンを Intel のルート証明書に対して検証し、引用の
REPORT_DATAが$nonceチャレンジと一致することを確認します。 - ホストの来歴(
PPID): リーフ PCK 証明書から 32 文字の 16 進数PPIDを抽出し、GCS(https://storage.googleapis.com/confidential-host-registry/)からホスト レジストリ JSON ドキュメントをダウンロードします。 - インスタンスの来歴(
PZID): ローカル GCE メタデータ サーバーにインスタンスの数値プロジェクト ID、ゾーン、インスタンス ID をクエリし、正規の PZID JSON ペイロード({"instanceId":...,"numericalProjectId":...,"zone":...})を作成して、その SHA-384 ダイジェストを計算し、引用のMR_OWNERと一致することを確認します。
- 取得したホスト レジストリ ドキュメントを調べます。
デフォルトでは、verify コマンドは取得したホスト レジストリ JSON ドキュメントを host_registry.json
に保存します。これを調べて、ホスト プラットフォームのメタデータを表示できます。
cat host_registry.json
出力例:
{
"zone": "us-central1",
"timestamp": "2026-02-17T11:25:12Z"
}
このメタデータは、ホストマシンのプロパティを表しています。
zone: ホストマシンが存在する物理的な Google Cloud リージョン/ゾーン。timestamp: このホストマシンのハードウェア証明書が Google Cloud によって最後にプロビジョニングおよび検証された UTC の日時。
7. クリーンアップ
クラウド コンソールまたはローカル開発環境で次のコマンドを実行します。
# Delete the CVM instance gcloud compute instances delete tdx-cvm-attestation-codelab --zone=us-central1-c
8. 次のステップ
詳しくは、Confidential VMs と Compute Engine をご覧ください。