Intel TDX Confidential VM インスタンスが Google Cloudで実行されていることを確認するには、そのprovenanceを確立する必要があります。来歴の確立には、次のチェックが含まれます。
引用符の検証とチャレンジ バインディング: 埋め込みの Intel ルート証明書を使用して Intel TDX 引用符の信頼性を検証し、必要に応じて、引用符の
REPORT_DATAフィールドの想定されるチャレンジに対して鮮度を検証します。ホストの出所検証: 引用符の埋め込み PCK 証明書からプラットフォーム プロビジョニング ID(PPID)を抽出します。PPID を使用して、Cloud Storage バケットからホスト レジストリ JSON ドキュメントを取得し、来歴を検証します。
インスタンスの出所検証: Confidential VM インスタンスのプロジェクト番号、ゾーン、インスタンス ID(PZID)を使用して SHA-384 ダイジェストを計算し、そのダイジェストが Intel TDX 引用符の
MR_OWNERフィールド値と一致することを確認します。
来歴をリモートで検証する
gceprovenance ツールを使用して、Intel TDX マシンの出所を特定することをおすすめします。このツールは、必要な値の抽出とプロビナンス ドキュメントの取得を自動化します。
gceprovenance を使用してリモートで来歴を検証するには、次の手順を行います。
go-tdx-guestGitHub リポジトリのクローンをリモート検証ツールに作成します。git clone https://github.com/google/go-tdx-guest.gitゲスト オペレーティング システムによっては、
go-tdx-guestでツールをビルドするために、いくつかの Go 依存関係をインストールする必要があります。この操作を行う方法は、オペレーティング システムによって異なります。たとえば、次のコマンドは Ubuntu に必要な依存関係をインストールします。sudo apt update sudo apt install golang-go build-essentialgceprovenanceツールをビルドします。go build -C go-tdx-guest/tools/gceprovenance .インテル TDX Confidential VM インスタンスが引用符にバインドする必要がある 64 バイトのチャレンジを生成します。
head -c 64 /dev/urandom > challenge.bin検証する Intel TDX Confidential VM インスタンスにチャレンジ ファイルを送信します。
インテル TDX Confidential VM インスタンスで、チャレンジ ファイルを入力(
inblob)として/sys/kernel/config/tsm/report/の Linux ConfigFS に渡します。sudo mkdir -p /sys/kernel/config/tsm/report/report0 sudo sh -c 'cat challenge.bin > /sys/kernel/config/tsm/report/report0/inblob'チャレンジは、システムによって見積もりの
REPORT_DATAフィールドに書き込まれます。結果の
outblobファイルから未加工の引用符バイトを取得し、report0ディレクトリをクリーンアップします。sudo cat /sys/kernel/config/tsm/report/report0/outblob > quote.bin sudo rmdir /sys/kernel/config/tsm/report/report0ローカル メタデータ サーバーにクエリを実行して、Confidential VM インスタンスのインスタンス ID、プロジェクト番号、ゾーンを取得します。
PROJECT_NUMBER=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id" -H "Metadata-Flavor: Google") INSTANCE_ID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/id" -H "Metadata-Flavor: Google") ZONE_PATH=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google") ZONE=$(basename "$ZONE_PATH")引用バイナリ(
quote.bin)、プロジェクト番号、インスタンス ID、ゾーンをリモート検証ツールに送信します。リモート検証ツールで、チャレンジを 128 文字の 16 進文字列に変換し、
gceprovenanceに渡します。次に、ツールは見積もりの署名と出所バインディングを確認します。CHALLENGE_HEX=$(hexdump -v -e '/1 "%02x"' challenge.bin) ./go-tdx-guest/tools/gceprovenance/gceprovenance verify \ -quote PATH_TO_QUOTE \ -instance projects/PROJECT_NUMBER/zones/ZONE/instances/INSTANCE_ID \ -challenge $CHALLENGE_HEX次のフィールドを入力します。
PATH_TO_QUOTE: 指定された見積もりファイルへのパス。PROJECT_NUMBER: 指定されたプロジェクト番号。ZONE: 指定されたゾーン。INSTANCE_ID: 指定された Confidential VM インスタンス ID。
成功したレスポンスは次のようになります。
GCE TDX provenance verification: OK Instance Zone: ZONE Project: PROJECT_NUMBER Instance ID: INSTANCE_ID Checks Quote verification: OK REPORT_DATA challenge: OK Host registry document: found PZID binding: OK PPID: PPID Quote: tdx_quote.bin Host registry: host_registry.json
他の gceprovenance コマンドについては、GitHub リポジトリをご覧ください。