バージョン 1.5。

監査ロギング

概要

GKE On-Prem では Kubernetes Audit Logging を使用して、クラスタの Kubernetes API サーバーに対して行われた呼び出しを時系列で記録します。監査ログは、不審な API リクエストの調査や統計情報の収集に役立ちます。

Anthos 1.2 より前の GKE On-Prem では、監査ログはディスクにのみ書き込まれていました。Anthos 1.2 では、Google Cloud プロジェクトの Cloud Audit Logs に監査ログを書き込めるアルファ機能が導入されています。Cloud Audit Logs への書き込みには、ディスクへの書き込みや、オンプレミス ロギング システムでのログ取得よりもいくつかの利点があります。

  • すべての Anthos クラスタの監査ログを一元化できます。
  • Cloud Audit Logs に書き込まれるログエントリは不変です。
  • Cloud Audit Logs エントリは 400 日間保持されます。
  • Cloud Audit Logs は Anthos の料金に含まれています。

ログをディスクまたは Cloud Audit Logs に書き込むように GKE On-Prem を構成できます。

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

デフォルトでは、GKE On-Prem の監査ログは永続ディスクに書き込まれるため、VM の再起動とアップグレードによってログが消えることはありません。GKE On-Prem では 12 GB までの監査ログエントリが保持されます。

Cloud Audit Logs

Cloud Audit Logs が有効になっている場合、ユーザー クラスタの作成時に指定したプロジェクトとロケーションを使用して、すべての Kubernetes API サーバーから Google Cloud に管理アクティビティ監査ログエントリが送信されます。

GKE On-Prem は、管理クラスタに audit-proxy Pod をデプロイし、ユーザー クラスタのサイドカー コンテナとして利用できます。この Pod は、ログエントリをバッファリングして Cloud Audit Logs に書き込みます。

制限事項

GKE On-Prem の Cloud Audit Logs はアルファ版機能です。このアルファ版リリースには次の制限事項があります。

  • データアクセス ロギングはサポートされていません。

  • Kubernetes 監査ポリシーの変更はサポートされていません。

  • 現在、ネットワークが停止した際に Audit Logging を復元できません。ログエントリを Google Cloud にエクスポートできない場合は、それらのログエントリは破棄されます。

Anthos GKE API と Anthos Audit API の有効化

GKE On-Prem で Cloud Audit Logs を使用するには、次の手順に従います。

  1. Anthos 1.4.x 以前を使用している場合は、Anthos GKE API を有効にします。

  2. Anthos 1.5 以降を使用している場合は、Anthos Audit API を有効にします。

  3. 不明な場合、または Anthos 1.5 にアップグレードする予定の場合は、両方を有効にします。

Anthos GKE API の有効化

Anthos Audit API を有効にする

監査ロギング用のサービス アカウントの作成

GKE On-Prem での使用のために作成したサービス アカウントがすでに複数あります。このアルファ機能では、追加のサービス アカウントを作成して許可リストに登録する必要があります。

  1. Cloud Audit Logs サービス アカウントを作成します。

    gcloud iam service-accounts create audit-logging-service-account
  2. Cloud Audit Logs サービス アカウントの JSON キーファイルを作成します。

    gcloud iam service-accounts keys create audit-logging-key.json \
       --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    ここで、AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL はサービス アカウントのメールアドレスです。

  3. 管理ワークステーションの他のサービス アカウントキーと同じ場所に audit-logging-key.json を保存します。

サービス アカウントを許可リストに登録する

Cloud Audit Logs のサービス アカウントの許可リスト登録をリクエストするには、Cloud Audit Logs for GKE On-Prem アルファ版フォームに必要事項を入力してください。許可リストに登録されると、通知メールが届きます。Cloud Audit Logs を有効にするユーザー クラスタを作成する前に、サービス アカウントを許可リストに登録する必要があります。

Cloud Audit Logs を有効にしたユーザー クラスタの作成

  1. 管理者クラスタをまだ作成していない場合は、静的 IP アドレスを使用したインストールまたは DHCP を使用したインストールの手順に従って新しいクラスタを作成します。

    すでに管理クラスタがある場合は、ユーザー クラスタの追加作成の手順に従って、新しいユーザー クラスタを作成します。

  2. gkectl create-config の実行後に通常どおり構成ファイルに入力しますが、usercluster の新しい cloudauditlogging セクションにも入力が必要です。

  3. ユーザー クラスタの監査ログを表示する Google Cloud プロジェクトのプロジェクト ID に cloudauditlogging.projectid を設定します。

  4. cloudauditlogging.clusterlocation を、ログを保存する Google Cloud リージョンに設定します。お使いのオンプレミス データセンターの近くのリージョンを選択することをおすすめします。

  5. cloudauditlogging.serviceaccountkeypath の値を、Cloud Audit Logs サービス アカウントの JSON キーファイルのパスに設定します。

例:

cloudauditlogging:
  projectid: "my-project"
  clusterlocation: "us-west1"
  serviceaccountkeypath: "/my-key-folder/audit-logging-key.json"

通常どおりクラスタ作成を続けます。

既存のユーザー クラスタで Cloud Audit Logs を有効にする

既存のユーザー クラスタで監査ロギングを有効にするには、gkectl update cluster コマンドを使用します。

user-cluster.yaml ファイルの cloudauditlogging セクションに情報を入力します。各フィールドの詳細については、Cloud Audit Logs が有効になっているユーザー クラスタの作成をご覧ください。

次のコマンドを実行します。

gkectl update cluster --config [USER_CLUSTER_YAML] --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

GKE On-Prem 監査ログへのアクセス

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

  1. 管理クラスタおよび関連するすべてのユーザー クラスタで実行されている Kubernetes API サーバーを表示します。

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods --all-namespaces -l component=kube-apiserver
    

    ここで [ADMIN_CLUSTER_KUBECONFIG] は、管理クラスタの kubeconfig ファイルです。

  2. API サーバーの監査ログをダウンロードします。

    kubectl cp -n [NAMESPACE] [APISERVER_POD_NAME]:/var/log/kube-audit/kube-apiserver-audit.log /tmp/kubeaudit.log
    

    このコマンドは、最新のログファイルを取得します。このログファイルには、管理クラスタの場合は最大 1 GB、ユーザー クラスタの場合は最大 850 GB が含まれます。

    古い監査記録は別のファイルに保存されます。これらのファイルを表示するには:

    kubectl exec -n [NAMESPACE] [APISERVER_POD_NAME] -- ls /var/log/kube-audit -la
    

    各監査ログのファイル名には、ファイルがローテーションされた日時を示すタイムスタンプがあります。ファイルには、その日時までの監査ログが含まれています。

Cloud Audit Logs

Console

  1. Cloud Console で、[ロギング] メニューの [ログ] ページに移動します。

    ログページに移動

  2. 上で説明したプルダウン メニューのすぐ上にある [ラベルまたはテキスト検索でフィルタ] ボックスで、下矢印をクリックしてプルダウン メニューを開きます。メニューで、[高度なフィルタに変換] を選択します。

  3. テキスト ボックスに次のフィルタを入力します。

    resource.type="k8s_cluster"
    logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    
  4. [フィルタを送信] をクリックして、このプロジェクトにログインするように構成された GKE On-Prem クラスタのすべての監査ログを表示します。

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 監査ロギング ポリシーによって決まります。このポリシーの変更は現在サポートされていませんが、将来的にはサポートされる予定です。