GKE の監査ログを表示する

このページでは、Cloud Audit Logs でデプロイ ステータスとポリシーの適用に関する情報を確認する方法について説明します。

このページで使用されている Cloud Audit Logs のユーザー インターフェースの用語について詳しくは、ログの表示をご覧ください。

相互に関連する Google Cloud プロダクトに対する Binary Authorization ポリシーの適用など、アプリケーションのセキュリティ ポスチャーを 1 つのダッシュボードで評価できます。詳細については、セキュリティ モニタリングをご覧ください。

概要

Binary Authorization を使用してコンテナ イメージを Google Kubernetes Engine(GKE)にデプロイすると、デプロイに関する詳細が Google Cloud Observability の監査ログに書き込まれます。これらの監査ログエントリには、適用ステータスのメッセージが含まれます。これらのログエントリは、Google Cloud コンソールまたはコマンドラインの gcloud logging read コマンドで確認できます。

このガイドの後半の検索では、Cloud Audit Logs にアクセスして、表示するイベントを含むプロジェクトを選択します。

Cloud Audit Logs にアクセスするには、以下の手順を行います。

  1. Google Cloud コンソールで、Google Cloud Observability の [ロギング] > [Logs](ログ エクスプローラ)ページに移動します。

    [ログ エクスプローラ] に移動

  2. Cloud Audit Logs を表示する Google Cloud プロジェクトを選択します。

適用ステータスのメッセージ

GKE は、次の適用条件のメッセージを監査ログに書き込みます。

  • ブロックされたデプロイ: Binary Authorization ポリシーによりデプロイがブロックされました。
  • ブレークグラス イベント: ブレークグラス メカニズムにより、デプロイがポリシー チェックを回避しました。詳しくは、ブレークグラスを使用するをご覧ください。
  • フェイル オープン: Binary Authorization バックエンドが使用できなかったため、デプロイが許可されました。
  • ドライラン: Binary Authorization ポリシーでドライラン モードが設定されていたため、ポリシー違反のあるデプロイが許可されました。

Cloud Audit Logs 内のブロックされたデプロイ イベント

Binary Authorization ポリシーに違反しているコンテナ イメージがブロックされている場合は、Cloud Audit Logs でブロックされたデプロイ イベントを特定できます。

ブロックされたデプロイ イベントを Cloud Audit Logs でクエリする

このセクションでは、ブロックされたデプロイ イベントを Cloud Audit Logs でクエリする方法について説明します。

ログ エクスプローラ

ブロックされたデプロイ イベントを Cloud Audit Logs のログ エクスプローラに表示するには、次の手順を行います。

  1. [ログ エクスプローラ] ページに移動します。

  2. 次のクエリを検索クエリボックスに入力します。

    resource.type="k8s_cluster"
    logName:"cloudaudit.googleapis.com%2Factivity"
    (protoPayload.methodName="io.k8s.core.v1.pods.create" OR
     protoPayload.methodName="io.k8s.core.v1.pods.update")
    protoPayload.response.status="Failure"
    (protoPayload.response.reason="VIOLATES_POLICY" OR
    protoPayload.response.reason="Forbidden")
    NOT "kube-system"
    NOT "istio-system"
    

  3. 時間範囲セレクタで期間を選択します。

gcloud

Google Cloud CLI を使用して、Cloud Audit Logs で過去 1 週間のポリシー違反イベントを表示するには、次のコマンドを実行します。

gcloud logging read --order="desc" --freshness=7d \
  'resource.type="k8s_cluster"
   logName:"cloudaudit.googleapis.com%2Factivity"
   (protoPayload.methodName="io.k8s.core.v1.pods.create" OR
    protoPayload.methodName="io.k8s.core.v1.pods.update")
   protoPayload.response.status="Failure"
   (protoPayload.response.reason="VIOLATES_POLICY" OR
   protoPayload.response.reason="Forbidden")
   NOT "kube-system"
   NOT "istio-system"'

Cloud Audit Logs のブレークグラス イベント

Binary Authorization では、Pod 仕様のブレークグラス ラベルを使用してポリシーをオーバーライドできます。イメージがブレークグラスでデプロイされると、Binary Authorization は Cloud Audit Logs にブレークグラス イベントを記録します。次のセクションでは、これらのイベントに対してクエリを実行する方法について説明します。

ブレークグラスが指定された Pod を Cloud Audit Logs でクエリする

ログ エクスプローラ

Cloud Audit Logs のログ エクスプローラでブレークグラス イベントを表示する方法は次のとおりです。

  1. [ログ エクスプローラ] ページに移動します。

  2. 次のクエリを検索クエリボックスに入力します。

    resource.type="k8s_cluster"
    logName:"cloudaudit.googleapis.com%2Factivity"
    (protoPayload.methodName="io.k8s.core.v1.pods.create" OR
    protoPayload.methodName="io.k8s.core.v1.pods.update")
    "image-policy.k8s.io/break-glass"
    
  3. 時間範囲セレクタで期間を選択します。

gcloud

gcloud CLI を使用して Cloud Audit Logs で過去 1 週間のブレークグラス イベントを表示するには、次のコマンドを実行します。

gcloud logging read --order="desc" --freshness=7d \
  'resource.type="k8s_cluster" AND
  logName:"cloudaudit.googleapis.com%2Factivity" AND
  (protoPayload.methodName="io.k8s.core.v1.pods.create" OR
    protoPayload.methodName="io.k8s.core.v1.pods.update") AND
  "image-policy.k8s.io/break-glass"'

Cloud Audit Logs のフェイル オープン イベント

コンテナ イメージのデプロイが試行され、Binary Authorization の適用が利用できないかタイムアウトになり、コンテナ イメージのデプロイが許可されると、フェイル オープンが発生します。

この場合、検証結果は不明で、ログエントリが記録されます。

Cloud Audit Logs でフェイル オープン イベントをクエリする

ログ エクスプローラ

Cloud Audit Logs のログ エクスプローラでフェイル オープン イベントを表示する方法は次のとおりです。

  1. [ログ エクスプローラ] ページに移動します。

  2. 次のクエリを検索クエリボックスに入力します。

    resource.type="k8s_cluster"
    logName:"cloudaudit.googleapis.com%2Factivity"
    (protoPayload.methodName="io.k8s.core.v1.pods.create" OR
     protoPayload.methodName="io.k8s.core.v1.pods.update")
    ("image-policy.k8s.io/failed-open" OR
     "imagepolicywebhook.image-policy.k8s.io/failed-open" OR
     "failed-open.validating.webhook.admission.k8s.io")
    
  3. 時間範囲セレクタで期間を選択します。

gcloud

gcloud CLI を使用して Cloud Audit Logs で過去 1 週間のフェイル オープン イベントを表示するには、次のコマンドを実行します。

gcloud logging read --order="desc" --freshness=7d \
  'resource.type="k8s_cluster"
   logName:"cloudaudit.googleapis.com%2Factivity"
   (protoPayload.methodName="io.k8s.core.v1.pods.create" OR
    protoPayload.methodName="io.k8s.core.v1.pods.update")
   ("image-policy.k8s.io/failed-open" OR
    "imagepolicywebhook.image-policy.k8s.io/failed-open" OR
    "failed-open.validating.webhook.admission.k8s.io")'

Cloud Audit Logs のドライラン イベント

ドライラン モードは、ポリシーの適用モードの一つです。非遵守のイメージをデプロイできますが、デプロイに関する詳細が監査ログに書き込まれます。ドライラン モードでは、ポリシーを有効にする前に本番環境でテストを行うことができます。

ポリシーで必要なチェックにコンテナ イメージが合格しなかったが、ドライラン モードでのデプロイが許可されている場合は、Cloud Audit Logs に imagepolicywebhook.image-policy.k8s.io/dry-run: "true" が含まれます。

Cloud Audit Logs でドライラン イベントをクエリする

ログ エクスプローラ

Cloud Audit Logs ログ エクスプローラでドライラン イベントを表示する手順は次のとおりです。

  1. [ログ エクスプローラ] ページに移動します。

  2. 次のクエリを検索クエリボックスに入力します。

    resource.type="k8s_cluster"
    logName:"cloudaudit.googleapis.com%2Factivity"
    (protoPayload.methodName="io.k8s.core.v1.pods.create" OR
     protoPayload.methodName="io.k8s.core.v1.pods.update")
    labels."imagepolicywebhook.image-policy.k8s.io/dry-run"="true"
    
  3. 時間範囲セレクタで期間を選択します。

gcloud

gcloud CLI を使用して Cloud Audit Logs で過去 1 週間のドライラン デプロイ イベントを表示するには、次のコマンドを実行します。

gcloud logging read --order="desc" --freshness=7d \
  'labels."imagepolicywebhook.image-policy.k8s.io/dry-run"="true"'