GKE の監査ログを表示する

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

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

単一のダッシュボード上で、相互依存する Google Cloud プロダクト全体にわたる Binary Authorization ポリシーの適用など、アプリケーションのセキュリティ体制を評価できます。詳細については、セキュリティ モニタリングをご覧ください。

概要

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

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

Cloud 監査ログへの一般的なアクセス権の場合は、以下の手順を行います。

  1. Cloud Console で Google Cloud のオペレーション スイートの [Logging] > [ログ](ログ エクスプローラ)ページに移動します。

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

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

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

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

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

Cloud 監査ログ内のブロックされたデプロイ イベント

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

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

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

ログ エクスプローラ

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

  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

gcloud コマンドライン ツールを使用して、過去 1 週間のポリシー違反イベントを Cloud 監査ログで表示するには、次のコマンドを実行します。

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 監査ログのブレークグラス イベント

Binary Authorization では、podspec のブレークグラス ラベルを使用してポリシーをオーバーライドできます。

Cloud 監査ログからブレークグラスを指定した Pod をクエリで取得する

ログ エクスプローラ

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

  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 ツールを使用して 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" AND
  "image-policy.k8s.io/break-glass"'

Cloud 監査ログのフェイル オープン イベント

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

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

Cloud 監査ログのフェイル オープン イベントをクエリする

ログ エクスプローラ

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

  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 ツールを使用して Cloud 監査ログで過去 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 監査ログのドライラン イベント

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

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

Cloud 監査ログのドライラン イベントをクエリする

ログ エクスプローラ

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 ツールを使用して Cloud 監査ログで過去 1 週間のドライラン デプロイ イベントを表示するには、次のコマンドを実行します。

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