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

このドキュメントでは、Google Distributed Cloud で Cloud Audit Logs を使用する方法について説明します。Google Distributed Cloud では Kubernetes Audit Logging を使用して、クラスタの Kubernetes API サーバーに対して行われた呼び出しを時系列で記録します。監査ログは、不審な 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 の機能については、料金は Google Distributed Cloud の料金に含まれています。
  • ログをディスクまたは Cloud Audit Logs に書き込むように Google Distributed Cloud を構成できます。

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

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

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

Cloud Audit Logs

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

制限事項

Google Distributed Cloud の Cloud Audit Logs には、次の制限があります。

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

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

Google Distributed Cloud で 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 へのアクセス

コンソール

  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. [クエリを実行] をクリックして、このプロジェクトにログインするように構成された Google Distributed Cloud クラスタのすべての監査ログを表示します。

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 の動作を変更することはできません。