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 ソフトウェアのみでは、最大 1 GiB の監査ログエントリが保持されます。

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

Cloud Audit Logs

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

制限事項

ベアメタルでは、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 へのアクセス

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

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