VM を安全に起動する

セキュアブートは、すべてのブート コンポーネントのデジタル署名を検証し、署名検証が失敗した場合にブートプロセスを停止することで、システムが正規のソフトウェアのみを実行することを保証します。

Google Distributed Cloud(GDC)エアギャップは、Unified Extensible Firmware Interface(UEFI)ファームウェアを使用して、ソフトウェアの署名に使用される証明書と鍵を管理します。

UEFI ファームウェアは、ソフトウェア メーカーがシステム ファームウェア、システム ブートローダー、読み込むバイナリへの署名に使用する鍵が保存された証明書を安全に管理します。UEFI のドキュメントについては、https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf をご覧ください。

ブートごとに、UEFI ファームウェアは、各ブート コンポーネントの電子署名を、承認された鍵のセキュアストアと照合します。正しく署名されていないか、まったく署名されていないブート コンポーネントは実行を許可されません。セキュアブートを有効にするには、VM の bootloader タイプを uefi に設定する必要があります。

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 CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。

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

Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。

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

  2. これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して MANAGEMENT_API_SERVER を置き換えます。

権限とアクセス権をリクエストする

このページに記載されているタスクを行うには、プロジェクトの VirtualMachine 管理者のロールが必要です。VM が存在するプロジェクトの名前空間にプロジェクト VirtualMachine 管理者(project-vm-admin)ロールがあることを確認する手順に沿って操作します。

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

VM のセキュアブートを有効にします。プロジェクトの Namespace(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 を有効にします。次の手順は、プロジェクトの Namespace(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 をサポートしていることを確認します。