Shielded VM インスタンスの整合性モニタリング

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

始める前に

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

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

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

Metrics Explorer を使用してモニタリング対象リソースの指標を表示する方法は次のとおりです。

  1. Google Cloud Console で [モニタリング] を選択するか、次のボタンを使用します。
    [モニタリング] に移動
  2. ナビゲーション パネルに [Metrics Explorer] が表示されている場合は、[Metrics Explorer] をクリックします。それ以外の場合は、[リソース] を選択して [Metrics Explorer] を選択します。
  3. [Metric] タブが選択されていることを確認します。
  4. [Find resource type and metric] のボックスを使用して、リソースと指標をメニューから選択するか、リソースと指標の名前を入力します。次の情報を使用して、このテキスト ボックスのフィールドに入力します。
    1. [Resource] には、gce_instance を選択または入力します。
    2. [Metric] には、次のいずれかの指標を選択します。
      • [Early Boot Validation]: 前回のブート シーケンスのアーリーブート部分の合否ステータスが示されます。アーリーブートとは、UEFI ファームウェアが起動してから、制御がブートローダーに渡されるまでのブート シーケンスです。
      • [Late Boot Validation]: 前回のブート シーケンスのレイトブート部分の合否ステータスが示されます。レイトブートとは、制御がブートローダーに渡されてから起動が完了するまでのブート シーケンスです。これには、オペレーティング システム カーネルの読み込みが含まれます。
  5. [Filter]、[Group By]、[Aggregation] の各メニューを使用して、データの表示方法を変更します。たとえば、リソースラベルや指標ラベルごとにグループ化できます。詳細については、指標の選択 - 追加構成をご覧ください。

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

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

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

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

整合性検証イベントに対するレスポンスの自動化

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

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

  1. [VM インスタンス] ページに移動
  2. インスタンス ID をクリックして、[VM インスタンスの詳細] ページを開きます。
  3. [ログ] で、[Stackdriver 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 インスタンスが実行中でなければなりません。

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

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

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

gcloud

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

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

gcloud compute instances update my-instance \
    --shielded-learn-integrity-policy

API

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

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

PATCH https://compute.googleapis.com/compute/alpha/projects/my-project/zones/us-central1-b/instances/my-instance/setShieldedInstanceIntegrityPolicy?key={YOUR_API_KEY}
{
  "updateAutoLearnPolicy": true
}

次のステップ