Shielded VM

は、

Shielded VM は Compute Engine VM インスタンスの検証可能な整合性を提供するので、インスタンスがブートレベルまたはカーネルレベルのマルウェアルートキットによって改ざんされていないことを確認できます。Shielded VM の検証可能な整合性は、Secure Boot仮想トラステッド プラットフォーム モジュール(vTPM)対応のメジャーブート、および整合性モニタリングを使用して実現されています。

Shielded VM は、Shielded Cloud イニシアチブの最初の成果です。Shielded Cloud イニシアチブは、検証可能な整合性を提供し、vTPM シールドやシーリングなどのデータ漏洩防止機能を提供することにより、Google Cloud Platform(GCP)全体にさらに安全な基盤を提供することを目的としています。

セキュアブート

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

Shielded VM インスタンスは、Google の認証局を使用して署名および検証済みのファームウェアを実行し、インスタンスのファームウェアが変更されていないことを確認して、セキュアブートの信頼のルートを確立します。セキュアブートは、ソフトウェア メーカーがシステム ファームウェア、システム ブートローダー、読み込むバイナリへの署名に使用する鍵が安全に保存された、Unified Extensible Firmware Interface(UEFI)2.3.1 ファームウェアを使用します。ブート シーケンスの中で、UEFI ファームウェアは各ブート コンポーネントのデジタル署名を承認済みの鍵のデータベースで検証します。正しく署名されていないか、まったく署名されていないブート コンポーネントは実行を許可されません。

この場合、VM インスタンスは GCP Console にエラー状態を表示し、VM インスタンスのシリアル コンソール ログに、UEFI: Failed to load imageStatus: Security Violation という文字列を含むエントリと、失敗したブート オプションの説明が記録されます。障害のトラブルシューティングを行うには、シールドされた VM オプションの変更の手順に従ってセキュアブートを無効にすることで、VM インスタンスを起動し、問題を診断して解決してから、セキュアブートを再び有効にします。

仮想トラステッド プラットフォーム モジュール(vTPM)

vTPM は仮想化されたトラステッド プラットフォーム モジュールです。システムへのアクセスの認証に使用する鍵や証明書などのオブジェクトの保護に使用できる、専用のコンピュータ チップです。Shielded VM vTPM は、Trusted Computing Group(TPM)ライブラリ仕様 2.0 と完全互換で、FIPS 140-2 L1 検証済みの BoringSSL を使用します。

Shielded VM vTPM は、整合性ポリシー ベースラインと呼ばれる既知の正常なブート ベースラインの作成に必要な測定を行うことで、メジャーブートを可能にします。整合性ポリシーのベースラインは、その後の VM ブートの測定値との比較に使用して、何かが変更されていないか判断されます。

また、vTPM を使用してシールドやシーリングによって機密保護することもできます。そのために vTPM を使用する方法については、Go 言語の GitHub にある Go-TPM プロジェクトの例をご覧ください。

シールドを有効にするには、vTPM のエンドースメント鍵証明書を取得してください。その証明書を使用してデータを暗号化すると、vTPM だけがそれを読み取り、vTPM が行う署名を検証できるようなります。詳細については、vTPM のエンドースメント鍵証明書の取得をご覧ください。

メジャーブート

メジャーブート中にコンポーネントが読み込まれると、各コンポーネント(ファームウェア、ブートローダー、カーネルなど)のハッシュが作成され、そのハッシュが結合されて、読み込み済みのコンポーネントのハッシュを使って再びハッシュ化されます。それを次に示します。

メジャーブート プロセス。

この情報は、読み込まれたコンポーネントと、その読み込み順序の両方を識別します。

VM インスタンスを初めて起動したときに、メジャーブートはこの測定の最初のセットから整合性ポリシー ベースラインを作成し、そのデータを安全に保存します。その後 VM インスタンスが起動するたびに、この測定値が再度取得され、次回の再起動まで安全なメモリに保存されます。この 2 セットの測定値を持つことで整合性モニタリングが可能になり、VM インスタンスのブート シーケンスが変更されたかどうかの判断に使用できます。

整合性モニタリング

整合性モニタリングは、VM インスタンスの状態を理解し、決定を下すために役立ちます。

整合性モニタリングはメジャーブートで作成された測定値を利用します。メジャーブートでは、プラットフォーム構成レジスタ(PCR)を使用して、整合性ポリシー ベースライン(既知の正常なブート シーケンス)と最新のブート シーケンスの両方における、コンポーネントとコンポーネントの読み込み順序に関する情報が格納されます。

整合性モニタリングは、最新のブート測定値と整合性ポリシー ベースラインとを比較し、一致したかどうかに応じて合格 / 失敗の結果のペアを返します。ペアの 1 つは初期ブート シーケンス、もう 1 つは後期ブート シーケンスに対するものです。初期ブートは、UEFI ファームウェアが起動されるところから、UEFI ファームウェアからブートローダーに制御が渡されるまでのブート シーケンスです。後期ブートは、ブートローダーからオペレーティング システムのカーネルに制御が渡されるまでのブート シーケンスです。最新のブート シーケンスのいずれかの部分がベースラインと一致しない場合は、整合性検証に失敗します。

その VM インスタンスでシステムの更新を適用したなど、失敗が予想される場合は、整合性ポリシー ベースラインを更新する必要があります。整合性ポリシー ベースラインを更新すると、ベースラインは最新のブート シーケンスから取得された測定値に設定されます。予想されなかった場合は、その VM インスタンスを停止し、失敗の原因を調査する必要があります。

Stackdriver Monitoring では整合性レポートを表示し、整合性失敗のアラートを設定できます。整合性モニタリングの結果の詳細は、Stackdriver Logging で確認できます。詳細については、Shielded VM インスタンスの整合性をモニタリングするをご覧ください。

整合性モニタリング イベント

Shielded VM は、次の種類のイベントのログエントリを作成します。

  • clearTPMEvent: vTPM がクリアされているかどうかを識別します。クリアされると、vTPM に格納されたすべてのシークレットが削除されます。Shielded VM にはまったく影響がないため、仮想トラステッド プラットフォーム モジュール(VTPM)に説明があるように、vTPM を使用して機密データをシールドする場合にのみ注意してください。
  • earlyBootReportEvent: 初期ブート シーケンスの整合性チェックに合格したかどうかを識別します。また、その判定のため比較されたベースラインと最新のブート シーケンスによる PCR 値の詳細を提供します。
  • lateBootReportEvent: 後期ブート シーケンスの整合性チェックに合格したかどうかを識別します。また、その判定のために比較されたベースラインと最新のブート シーケンスによる PCR 値の詳細を提供します。
  • setShieldedVmIntegrityPolicy: 整合性ポリシーのベースラインを更新するたびに記録されます。
  • shutdownEvent: VM インスタンスが停止するたびに記録されます。
  • startupEvent: VM インスタンスが開始されるたびに記録されます。このイベントの情報にある bootCounter 値は、このインスタンスが再起動された回数を示しています。
  • updateShieldedVmConfig: Shielded VM オプションの 1 つを有効または無効にするたびに記録されます。

ログに表示される一般的なイベントの進行状況は startupEventearlyBootReportEventlateBootReportEvent、最後は shutdownEvent で同じ bootCounter 値を持ち、同じ VM インスタンスのブート シーケンスであることが示されます。

VM インスタンスで予想される整合性問題の対策として整合性ポリシー ベースラインを更新すると、新しい整合性ポリシー ベースラインの測定値を示す earlyBootReportEvent および lateBootReportEvent イベントが追加されます。次の例は、予想されるシーケンスを示しています。

  • startupEvent
  • earlyBootReportEvent。元のベースラインと最新のブート シーケンスを比較(合格)
  • lateBootReportEvent。元のベースラインと最新のブート シーケンスを比較(失敗)
  • setShieldedVmIntegrityPolicy整合性ポリシーのベースラインを更新するときに、ベースラインを最新のブート シーケンスから取得した測定値に設定
  • earlyBootReportEvent。新しいベースラインと最新のブート シーケンスを比較(合格)
  • lateBootReportEvent。新しいベースラインと最新のブート シーケンスを比較(合格)

Windows

earlyBootReportEvent

earlyBootReportEvent の重要な情報は earlyBootReportEvent セクションにあり、以下のセクションと要素が含まれます。

  • actualMeasurements: 最新のブート シーケンスのプラットフォーム構成レジスタ(PCR)の値が含まれます。PCR 値は、最新のブート シーケンスで使用されたブート コンポーネントとコンポーネント読み込み順を識別します。この PCR 値が整合性ポリシー ベースライン(値は policyMeasurements セクションで取得)と比較されて、VM インスタンスのブート シーケンスが変化したかどうか判別されます。actualMeasurements セクションには、次の要素が含まれます。

    • 0: PCR0 の値が含まれ、値にはファームウェア コンポーネントに関する情報が含まれます。この PCR は実装されず、代わりに静的な値が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 1: PCR4 の値が含まれ、値には UEFI ブート マネージャー コードとブート試行に関する情報が含まれます。
    • 2: PCR5 の値が含まれ、値にはディスクの GUID パーティション テーブルに関する情報が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 3: PCR7 の値が含まれ、値にはインスタンスのセキュアブート ポリシーに関する情報が含まれます。
  • policyEvaluationPassed: ブート シーケンスのそのセクションが整合性ポリシー ベースラインでの検証に合格したかどうかを識別します。

  • policyMeasurements: 整合性ポリシー ベースラインの PCR 値が含まれます。policyMeasurements セクションには、次の要素が含まれます。

    • 0: PCR0 の値が含まれ、値にはファームウェア コンポーネントに関する情報が含まれます。この PCR は実装されず、代わりに静的な値が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 1: PCR4 の値が含まれ、値には UEFI ブート マネージャー コードとブート試行に関する情報が含まれます。
    • 2: PCR7 の値が含まれ、値にはインスタンスのセキュアブート ポリシーに関する情報が含まれます。

earlyBootReportEvent の PCR 値を使用してブート整合性検証の失敗を診断する方法については、起動時の整合性検証の失敗原因を特定するをご覧ください。

lateBootReportEvent

lateBootReportEvent の重要な情報は lateBootReportEvent セクションにあり、以下のセクションと要素が含まれます。

  • actualMeasurements: 最新のブート シーケンスのプラットフォーム構成レジスタ(PCR)の値が含まれます。PCR 値は、最新のブート シーケンスで使用されたブート コンポーネントとコンポーネント読み込み順を識別します。この PCR 値が整合性ポリシー ベースライン(値は policyMeasurements セクションで取得)と比較されて、VM インスタンスのブート シーケンスが変化したかどうか判別されます。actualMeasurements セクションには、次の要素が含まれます。

    • 0: PCR0 の値が含まれ、値にはファームウェア コンポーネントに関する情報が含まれます。この PCR は実装されず、代わりに静的な値が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 1: PCR4 の値が含まれ、値には UEFI ブート マネージャー コードとブート試行に関する情報が含まれます。
    • 2: PCR5 の値が含まれ、値にはディスクの GUID パーティション テーブルに関する情報が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 3: PCR7 の値が含まれ、値にはインスタンスのセキュアブート ポリシーに関する情報が含まれます。
    • 4: PCR11 の値が含まれ、値には BitLocker ドライブ暗号化アクセス制御に関する情報が含まれます。
    • 5: PCR12 の値が含まれ、値にはデータイベントに関する情報が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 6: PCR13 の値が含まれ、値には Windows のカーネルとブートドライバに関する情報が含まれます。
    • 7: PCR14 の値が含まれ、値には Windows のブート権限に関する情報が含まれます。
  • policyEvaluationPassed: ブート シーケンスのそのセクションが整合性ポリシー ベースラインでの検証に合格したかどうかを識別します。

  • policyMeasurements: 整合性ポリシー ベースラインの PCR 値が含まれます。policyMeasurements セクションには、次の要素が含まれます。

    • 0: PCR0 の値が含まれ、値にはファームウェア コンポーネントに関する情報が含まれます。この PCR は実装されず、代わりに静的な値が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 1: PCR4 の値が含まれ、値には UEFI ブート マネージャー コードとブート試行に関する情報が含まれます。
    • 2: PCR7 の値が含まれ、値にはインスタンスのセキュアブート ポリシーに関する情報が含まれます。
    • 3: PCR11 の値が含まれ、値には BitLocker ドライブ暗号化アクセス制御に関する情報が含まれます。
    • 4: PCR13 の値が含まれ、値には Windows のカーネルとブートドライバに関する情報が含まれます。
    • 5: PCR14 の値が含まれ、値には Windows のブート権限に関する情報が含まれます。

lateBootReportEvent の PCR 値を使用してブート整合性検証の失敗を診断する方法については、起動時の整合性検証の失敗原因を特定するをご覧ください。

Linux

earlyBootReportEvent

earlyBootReportEvent の重要な情報は earlyBootReportEvent セクションにあり、以下のセクションと要素が含まれます。

  • actualMeasurements: 最新のブート シーケンスのプラットフォーム構成レジスタ(PCR)の値が含まれます。PCR 値は、最新のブート シーケンスで使用されたブート コンポーネントとコンポーネント読み込み順を識別します。この PCR 値が整合性ポリシー ベースライン(値は policyMeasurements セクションで取得)と比較されて、VM インスタンスのブート シーケンスが変化したかどうか判別されます。actualMeasurements セクションには、次の要素が含まれます。

    • 0: PCR0 の値が含まれ、値にはファームウェア コンポーネントに関する情報が含まれます。この PCR は実装されず、代わりに静的な値が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 1: PCR4 の値が含まれ、値にはオペレーティング システムの shim に関する情報が含まれます。
    • 2: PCR5 の値が含まれ、値にはディスクの GUID パーティション テーブルに関する情報が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 3: PCR7 の値が含まれ、値にはインスタンスのセキュアブート ポリシーに関する情報が含まれます。
  • policyEvaluationPassed: ブート シーケンスのそのセクションが整合性ポリシー ベースラインでの検証に合格したかどうかを識別します。

  • policyMeasurements: 整合性ポリシー ベースラインの PCR 値が含まれます。policyMeasurements セクションには、次の要素が含まれます。

    • 0: PCR0 の値が含まれ、値にはファームウェア コンポーネントに関する情報が含まれます。この PCR は実装されず、代わりに静的な値が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 1: PCR4 の値が含まれ、値にはオペレーティング システムの shim に関する情報が含まれます。
    • 2: PCR7 の値が含まれ、値にはインスタンスのセキュアブート ポリシーに関する情報が含まれます。

earlyBootReportEvent の PCR 値を使用してブート整合性検証の失敗を診断する方法については、起動時の整合性検証の失敗原因を特定するをご覧ください。

lateBootReportEvent

lateBootReportEvent の重要な情報は lateBootReportEvent セクションにあり、以下のセクションと要素が含まれます。

  • actualMeasurements: 最新のブート シーケンスのプラットフォーム構成レジスタ(PCR)の値が含まれます。PCR 値は、最新のブート シーケンスで使用されたブート コンポーネントとコンポーネント読み込み順を識別します。この PCR 値が整合性ポリシー ベースライン(値は policyMeasurements セクションで取得)と比較されて、VM インスタンスのブート シーケンスが変化したかどうか判別されます。actualMeasurements セクションには、次の要素が含まれます。

    • 0: PCR0 の値が含まれ、値にはファームウェア コンポーネントに関する情報が含まれます。この PCR は実装されず、代わりに静的な値が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 1: PCR4 の値が含まれ、値には第 2 段階ブートローダーとカーネルに関する情報が含まれます。
    • 2: PCR5 の値が含まれ、値にはディスクの GUID パーティション テーブルに関する情報が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 3: PCR7 の値が含まれ、値にはインスタンスのセキュアブート ポリシーに関する情報が含まれます。
  • policyEvaluationPassed: ブート シーケンスのそのセクションが整合性ポリシー ベースラインでの検証に合格したかどうかを識別します。

  • policyMeasurements: 整合性ポリシー ベースラインの PCR 値が含まれます。policyMeasurements セクションには、次の要素が含まれます。

    • 0: PCR0 の値が含まれ、値にはファームウェア コンポーネントに関する情報が含まれます。この PCR は実装されず、代わりに静的な値が含まれます。最新のブート シーケンスを整合性ポリシー ベースラインで検証するときには使用されません。
    • 1: PCR4 の値が含まれ、値には第 2 段階ブートローダーとカーネルに関する情報が含まれます。
    • 2: PCR7 の値が含まれ、値にはインスタンスのセキュアブート ポリシーに関する情報が含まれます。

lateBootReportEvent の PCR 値を使用してブート整合性検証の失敗を診断する方法については、起動時の整合性検証の失敗原因を特定するをご覧ください。

Cloud Identity and Access Management による承認

Shielded VM は承認に Cloud IAM を使用します。

Shielded VM のオペレーションでは、次の Compute Engine 権限が使用されます。

  • compute.instances.updateShieldedVmConfig: ユーザーが VM インスタンスの Shielded VM オプションを変更できます。
  • compute.instances.setShieldedVmIntegrityPolicy: ユーザーが VM インスタンスの整合性ポリシー ベースラインを更新できます。

Shielded VM の権限は、次の Compute Engine 役割に付与されます。

  • roles/compute.instanceAdmin.v1
  • roles/compute.securityAdmin

Shielded VM の権限をカスタム役割に付与することもできます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...