Shielded VM の完全性モニタリング

このトピックでは、Cloud Monitoring を使用して整合性モニタリングを有効化している Shielded VM インスタンス起動時の整合性をモニタリングし、整合性検証の失敗の原因を特定して、整合性ポリシー ベースラインを更新する方法を説明します。

Monitoring を使用して VM 起動時の整合性をモニタリングする

Cloud Monitoring を使用して、整合性検証イベントを表示し、アラートを設定します。また、Cloud Logging を使用して、これらのイベントの詳細を確認します。

整合性検証イベントを表示する

Metrics Explorer を使用してモニタリング対象リソースの指標を表示するには、次の操作を行います。

  1. Google Cloud コンソールで、[Metrics Explorer] ページに移動します。

    Metrics Explorer に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。

  2. [指標] 要素の [指標を選択] メニューを開いてフィルタバーに「Boot Validation」と入力し、サブメニューを使用して特定のリソースタイプと指標を選択します。
    1. [有効なリソース] メニューで、[VM インスタンス] を選択します。
    2. [有効な指標カテゴリ] メニューで、[インスタンス] を選択します。
    3. [有効な指標] メニューで、[Early Boot Validation] または [Late Boot Validation] を選択します。
      • [Early Boot Validation]: 前回のブート シーケンスのアーリーブート部分の合否ステータスが示されます。アーリーブートとは、UEFI ファームウェアが起動してから、制御がブートローダーに渡されるまでのブート シーケンスです。
      • [Late Boot Validation]: 前回のブート シーケンスのレイトブート部分の合否ステータスが示されます。レイトブートとは、制御がブートローダーに渡されてから起動が完了するまでのブート シーケンスです。これには、オペレーティング システム カーネルの読み込みが含まれます。
    4. [適用] をクリックします。
  3. 表示から時系列を削除するには、[フィルタ] 要素を使用します。

  4. 時系列を結合するには、[集計] 要素のメニューを使用します。たとえば、ゾーンに基づいて VM の CPU 使用率を表示するには、最初のメニューを [平均] に設定し、2 番目のメニューを [ゾーン] に設定します。

    [集計] 要素の最初のメニューが [未集計] に設定されている場合は、すべての時系列が表示されます。[集計] 要素のデフォルト設定は、選択した指標タイプによって決まります。

  5. 割り当てと、1 日に 1 つのサンプルを報告するその他の指標については、次の操作を行います。
    1. [表示] ペインで、[ウィジェット タイプ] を [積み上げ棒グラフ] に設定します。
    2. 期間は 1 週間以上で設定します。

整合性検証イベントに基づくアラートを設定する

VM インスタンスでブート検証失敗が発生した場合に通知を受け取るには、[Early Boot Validation] 指標と [Late Boot Validation] 指標の値に基づくアラートを設定します。アラートについては、アラートの概要をご覧ください。

整合性検証イベントの詳細を表示する

  1. [VM インスタンス] ページに移動
  2. インスタンス ID をクリックして、[VM インスタンスの詳細] ページを開きます。
  3. [ログ] で [Cloud Logging] をクリックします。
  4. 確認する earlyBootReportEvent または lateBootReportEvent のログエントリを見つけます。
  5. ログエントリ > jsonPayload > earlyBootReportEvent または lateBootReportEvent を必要に応じて展開します。そのセクション内にある policyEvaluationPassed 要素が、ブート シーケンスの該当する部分が整合性ポリシー ベースラインに対する検証に合格したかどうかを識別します。
  6. actualMeasurements セクションを展開します。その中にある番号付きの要素を展開して、前回のブート シーケンスで保存されたプラットフォーム構成レジスタ(PCR)値を確認します。PCR 値は、番号付きの要素内の value 要素に保存されています。PCR 値は、前回のブート シーケンスで使用されたブート コンポーネントとコンポーネント読み込み順を識別します。この PCR 値が整合性ポリシー ベースラインと比較されて、VM インスタンスのブート シーケンスに変更があったかどうかが判別されます。PCR の意味について詳しくは、整合性モニタリング イベントをご覧ください。
  7. policyMeasurements セクションを展開して、整合性ポリシー ベースライン用に保存された PCR 値を確認します。

完全性検証イベントに対するレスポンスを自動化する

Cloud Run 関数などの別のサービスに Cloud Logging のログをエクスポートして処理することで、ブート検証イベントに対するレスポンスを自動化できます。詳細については、ルーティングとストレージの概要完全性検証の失敗に対するレスポンスの自動化をご覧ください。

起動時の整合性検証の失敗原因を特定する

  1. [VM インスタンス] ページに移動
  2. インスタンス ID をクリックして、[VM インスタンスの詳細] ページを開きます。
  3. [ログ] で [Cloud Logging] をクリックします。
  4. 最新の earlyBootReportEvent ログエントリと lateBootReportEvent ログエントリを見つけて、どちらのエントリで policyEvaluationPassed 値が false になっているかを確認します。
  5. ログエントリ > jsonPayload > earlyBootReportEvent または lateBootReportEvent を必要に応じて展開します。
  6. actualMeasurements セクションと policyMeasurements セクションを展開します。それぞれのセクション内にある番号付きの要素を展開して、前回のブート シーケンスと整合性ポリシー ベースラインのそれぞれで保存されたプラットフォーム構成レジスタ(PCR)値を確認します。PCR 値は、前回のブート シーケンスと整合性ポリシー ベースラインで使用されている、ブート コンポーネントとコンポーネント読み込み順を識別します。
  7. actualMeasurements セクションと policyMeasurements セクションの PCR 値を比較して、前回のブート シーケンスと整合性ポリシー ベースラインとの間の差異がどこにあるのかを判断します。どちらの比較であっても、異なる値を示したものが検証を失敗させた原因です。これらのセクション内の要素の番号が PCR の番号に対応していることはほとんどないという点に注意してください。また、actualMeasurementspolicyMeasurements で同じように番号が付けられている要素が、異なる PCR を表す場合があります。たとえば Windows と Linux のアーリーブート シーケンスでは、actualMeasurements 内の要素 3policyMeasurements 内の要素 2 はどちらも PCR7 を表します。

  8. 整合性モニタリング イベントを確認して、変更された PCR が表す内容を判断し、それが予想される変更かどうかを調査します。

整合性ポリシー ベースラインの更新

初期の整合性ポリシー ベースラインは、インスタンスの作成時に、暗黙的に信頼されているブートイメージから導出されます。ベースラインを更新すると、現在のインスタンス構成を使用して整合性ポリシー ベースラインが更新されます。ベースラインを更新するときは、VM インスタンスが実行中でなければなりません。

インスタンス構成で、予定されていたブート固有の変更(カーネルの更新、ドライバのインストールなど)を行った後、ベースラインを更新しないと、整合性検証が失敗することになります。予期しない整合性検証エラーが発生した場合は、エラーの理由を調査し、必要に応じてインスタンスを停止するよう準備してください。

整合性ポリシー ベースラインを更新するには、setShieldedInstanceIntegrityPolicy 権限が必要です。

整合性ポリシー ベースラインを更新する手順は次のとおりです。

gcloud

VM インスタンスの整合性ポリシー ベースラインを更新するには、compute instances update コマンドと --shielded-learn-integrity-policy フラグを使用します。

次の例では、my-instance VM インスタンスの整合性ポリシー ベースラインをリセットします。

gcloud compute instances update INSTANCE_NAME \
    --zone=ZONE \
    --shielded-learn-integrity-policy

次のように置き換えます。

  • INSTANCE_NAME: VM の名前。
  • ZONE: VM が存在するゾーン。

API

VM インスタンスの整合性ポリシー ベースラインを更新するには、setShieldedInstanceIntegrityPolicy メソッドを使用し、リクエスト本文のアイテムとして updateAutoLearnPolicy を指定します。

次の例では、VM インスタンスの整合性ポリシー ベースラインをリセットします。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/setShieldedInstanceIntegrityPolicy?key=YOUR_API_KEY
{
  "updateAutoLearnPolicy": true
}

次のように置き換えます。

  • PROJECT_ID: VM が存在するプロジェクトのプロジェクト ID。
  • INSTANCE_NAME: VM の名前。
  • ZONE: VM が存在するゾーン。
  • YOUR_API_KEY: API にアクセスできる API キー。

次のステップ