Kubernetes 監査ロギングを使用する

このドキュメントでは、GKE on Bare Metal に対して Cloud Audit Logs を使用する方法について説明します。GKE on Bare Metal は、クラスタの Kubernetes API サーバーに対して行われた呼び出しを時系列で記録する Kubernetes Audit Logging を使用します。監査ログは、不審な API リクエストの調査や統計情報の収集に役立ちます。GKE On-Prem API の監査ロギングについては、Cloud API 監査ロギングをご覧ください。

Cloud Audit Logs について

監査ログは、Google Cloud プロジェクトの Cloud Audit Logs に書き込まれます。Cloud Audit Logs への書き込みには、ディスクへの書き込みや、オンプレミス ロギング システムでのログ取得を上回るいくつかの利点があります。

  • すべての GKE クラスタの監査ログを一元化できます。
  • Cloud Audit Logs に書き込まれるログエントリは不変です。
  • Cloud Audit Logs エントリは 400 日間保持されます。
  • Cloud Audit Logs の機能については、GDCV for Bare Metal の料金に含まれています。
  • GKE on Bare Metal では、ログをディスクまたは Cloud Audit Logs に書き込むように構成できます。

ディスクベースの監査ロギング

Cloud Audit Logs が明示的に無効になっている場合、GKE on Bare Metal の監査ログは永続ディスクに書き込まれるため、クラスタの再起動やアップグレードによってログが消えることはありません。GKE on Bare Metal は、最大 1 GiB の監査ログエントリを保持します。

コントロール プレーンのノードにログインして、ディスクベースの監査ログにアクセスします。ログは /var/log/apiserver/ ディレクトリにあります。

Cloud Audit Logs

ユーザー クラスタの作成時に指定したプロジェクトとロケーションを使用して、すべての Kubernetes API サーバーから Google Cloud に管理アクティビティ監査ログエントリが送信されます。ログエントリをバッファリングして Cloud Audit Logs に書き込むために、GKE on Bare Metal は、コントロール プレーン ノードで実行される audit-proxy デーモンセットをデプロイします。

制限事項

GKE on Bare Metal の Cloud Audit Logs には、次の制限事項があります。

  • データアクセス ロギングはサポートされていません。
  • Kubernetes 監査ポリシーの変更はサポートされていません。
  • Cloud Audit Logs は、ネットワークの長い停止に対処できません。ログエントリを Google Cloud にエクスポートできない場合は、10 GiB のディスク バッファのキャッシュに保存されます。対象のバッファに空き容量がなくなると、最も古いエントリが破棄されます。

Cloud Audit Logs のサービス アカウントの作成

GKE on Bare Metal で Cloud Logging と Cloud Monitoring を使用する前に、まず以下の構成を行う必要があります。

  1. Google Cloud プロジェクト内に Cloud Monitoring Workspace を作成します(まだ作成していない場合)。

    Google Cloud コンソールで次のボタンをクリックし、ワークフローを実行します。

    [モニタリング] に移動

  2. 次のボタンをクリックして必要な API を有効にします。

    Anthos Audit API の有効化

    Stackdriver API の有効化

    Monitoring API の有効化

    Logging API の有効化

  3. Stackdriver エージェントが使用するサービス アカウントに次の IAM ロールを割り当てます。

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor

Cloud Audit Logs へのアクセス

Console

  1. Google Cloud コンソールで、[ロギング] メニューの [ログ エクスプローラ] ページに移動します。

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

    [以前のログビューア] ページが表示された場合は、[アップグレード] プルダウン メニューから [新しいログ エクスプローラにアップグレード] を選択します。

  2. [クエリ] をクリックして、クエリを送信するフィールドにアクセスします。

  3. フィールドに次のクエリを入力します。

    resource.type="k8s_cluster"
    logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

  4. [クエリを実行] をクリックして、このプロジェクトにログインするように構成された GKE on Bare Metal クラスタからのすべての監査ログを表示します。

gcloud

プロジェクトの管理アクティビティ ログで k8s_cluster リソースタイプに該当するログエントリの最初の 2 つを一覧表示します。

gcloud logging read \
    'logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" \
    AND resource.type="k8s_cluster" \
    AND protoPayload.serviceName="anthosgke.googleapis.com" ' \
    --limit 2 \
    --freshness 300d

PROJECT_ID を実際のプロジェクト ID に置き換えます。

出力には 2 つのログエントリが表示されます。各ログエントリについて、logName フィールドは projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity 値を持ち、protoPayload.serviceNameanthosgke.googleapis.com と等しくなる点に注意してください。

監査ポリシー

Kubernetes 監査ポリシーでは、イベントをログエントリとして記録するルールを定義し、ログエントリに含めるデータを指定します。このポリシーを変更して Cloud Audit Logs の動作を変更することはできません。