インテル TDX VM インスタンスが Google Cloud で実行されていることを確認する

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 を使用してリモートで来歴を検証するには、次の手順を行います。

  1. go-tdx-guest GitHub リポジトリのクローンをリモート検証ツールに作成します。

    git clone https://github.com/google/go-tdx-guest.git
    
  2. ゲスト オペレーティング システムによっては、go-tdx-guest でツールをビルドするために、いくつかの Go 依存関係をインストールする必要があります。この操作を行う方法は、オペレーティング システムによって異なります。たとえば、次のコマンドは Ubuntu に必要な依存関係をインストールします。

    sudo apt update
    sudo apt install golang-go build-essential
    
  3. gceprovenance ツールをビルドします。

    go build -C go-tdx-guest/tools/gceprovenance .
    
  4. インテル TDX Confidential VM インスタンスが引用符にバインドする必要がある 64 バイトのチャレンジを生成します。

    head -c 64 /dev/urandom > challenge.bin
    
  5. 検証する Intel TDX Confidential VM インスタンスにチャレンジ ファイルを送信します。

  6. インテル 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 フィールドに書き込まれます。

  7. 結果の outblob ファイルから未加工の引用符バイトを取得し、report0 ディレクトリをクリーンアップします。

    sudo cat /sys/kernel/config/tsm/report/report0/outblob > quote.bin
    sudo rmdir /sys/kernel/config/tsm/report/report0
    
  8. ローカル メタデータ サーバーにクエリを実行して、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")
    
  9. 引用バイナリ(quote.bin)、プロジェクト番号、インスタンス ID、ゾーンをリモート検証ツールに送信します。

  10. リモート検証ツールで、チャレンジを 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 リポジトリをご覧ください。