VM を安全に起動する

このドキュメントでは、Google Distributed Cloud(GDC)エアギャップ アプライアンスの仮想マシン(VM)インスタンスでセキュアブートまたは仮想トラステッド プラットフォーム モジュール(vTPM)を有効にする方法について説明します。

このドキュメントは、GDC エアギャップ アプライアンス環境の VM でセキュアブートと vTPM を構成するプラットフォーム管理者またはアプリケーション オペレーター グループの開発者を対象としています。

セキュアブートについて

セキュアブートは、すべてのブート コンポーネントのデジタル署名を検証し、検証が失敗した場合はプロセスを停止することで、システムが正規のソフトウェアのみを実行するようにする機能です。Unified Extensible Firmware Interface(UEFI)ファームウェアを使用して、メーカーがシステム ファームウェア、ブートローダー、読み込まれたバイナリへの署名に使用する証明書と鍵を管理します。

ブートごとに、UEFI ファームウェアは、保存されている承認済みの鍵に対して各コンポーネントのデジタル署名を検証し、署名されていないコンポーネントや不適切に署名されたコンポーネントをブロックします。 VM インスタンスでセキュアブートを有効にするには、VM の bootloader タイプを uefi に設定する必要があります。

UEFI の公式ドキュメントについては、 https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf をご覧ください。

仮想トラステッド プラットフォーム モジュールについて

vTPM は、システム アクセスの認証に使用される鍵と証明書を保護する専用の仮想コンピュータ チップです。vTPM の詳細については、https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/ をご覧ください。

また、vTPM を使用してシールドやシーリングによって機密保護することもできます。シールされたストレージの詳細については、https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGEをご覧ください。そのために vTPM を使用する方法については、Go 言語の GitHub にある Go-TPM プロジェクトの例(https://github.com/google/go-tpm)をご覧ください。

始める前に

gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、ダウンロード、インストール、 構成していることを確認してください。gdcloud CLIGDC エアギャップ アプライアンスのすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。

kubeconfig ファイルのパスを取得する

Management API サーバーに対してコマンドを実行するには、次のリソースが必要です。

  1. Management API サーバー名を確認するか、プラットフォーム管理者(PA)にサーバー名を確認します。

  2. Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。

  3. パスを使用して、この手順の MANAGEMENT_API_SERVER{"</var>"}} を置き換えます。

IAM ロールをリクエストする

VM でセキュアブートまたは vTPM を有効にするには、プロジェクト IAM 管理者に連絡して、プロジェクト仮想マシン管理者 (project-vm-admin)ロールをリクエストします。

すべての VM ロールは、VM が存在するプロジェクトの名前空間にバインドする必要があります。 手順に沿ってアクセス権 を確認してください。

セキュアブートを有効にする

VM のセキュアブートを有効にします。プロジェクトの名前空間(PROJECT_NAMESPACE)にある VM_NAME という VM の場合は、次の手順を使用します。

  1. VM カスタム リソースを更新して、セキュアブートを有効にします:

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
     shieldConfig:
       bootType: uefi
       enableSecureBoot: true
    '
    
  2. VM が実行中の場合は、 VM を再起動するの手順に沿って再起動します。

  3. セキュアブートが有効になっていることを確認します。VM への SSH 接続を確立し、 次のコマンドを実行します。

    mokutil --sb-state
    

    セキュアブートが正常に有効になっている場合、コマンドは SecureBoot enabled を返します。

    mokutil ツールでセキュアブートが有効になっていないことが報告された場合は、 セキュアブート構成のトラブルシューティングの手順に沿って操作してください。

セキュアブート構成のトラブルシューティング

  1. エディタで VM カスタム リソースを開きます。

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. 「次のコマンドを実行する」の spec フィールドに示されているように、フィールドまたは値が欠落していないか確認します。これらは必須です。

  3. 欠落している場合や誤っている場合は、spec を編集して欠落している フィールドを追加し、誤った値を修正します。

  4. ファイルを保存します。

  5. VM を再起動するの手順に沿って操作します。

上記の手順で問題が解決しない場合は、VM のオペレーティング システム(OS)に対応するドキュメントを確認して、OS バージョンがセキュアブートをサポートしていることを確認してください。

仮想トラステッド プラットフォーム モジュール(vTPM)を有効にする

VM の vTPM を有効にします。プロジェクトの名前空間(PROJECT_NAMESPACE)にある VM_NAME という VM の場合は、次の手順を使用します。

  1. VM カスタム リソースを更新して、vTPM を有効にします:

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
       shieldConfig:
          enableVtpm: true
    '
    
  2. VM が実行中の場合は、 VM を再起動するの手順に沿って再起動します。

  3. vTPM が有効になっていることを確認します。VM への SSH 接続を確立し、 次のコマンドを実行します:

    dmesg | grep -i tpm
    

    vTPM が正常に有効になっている場合、コマンドは ACPI テーブルの一部として TPM モジュールを返します。出力は次のようになります。

    [    7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)
    

    ACPI tables に TPM モジュールが表示されない場合は、セクション vTPM 構成のトラブルシューティングの手順に沿って操作してください。

vTPM 構成のトラブルシューティング

  1. エディタで VM カスタム リソースを開きます。

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. 次のコマンドを実行するの spec フィールドに示されているように、フィールドまたは値が欠落していないか確認します。これらは必須です。

  3. 欠落している場合や誤っている場合は、spec を編集して欠落している フィールドを追加し、誤った値を修正します。

  4. ファイルを保存します。

  5. VM を再起動するの手順に沿って操作します。

上記の手順で問題が解決しない場合は、VM のオペレーティング システム(OS)に対応するドキュメントを確認して、OS バージョンが vTPM をサポートしていることを確認してください。