以前のバージョンの GKE On-Prem のドキュメントを表示しています。最新のドキュメントをご覧ください

監査ログ

概要

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

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

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

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

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

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

Cloud 監査ログ

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

GKE On-prem は、管理者クラスタとユーザー クラスタに audit-proxy Pod をデプロイします。この Pod は、ログエントリをバッファリングして Cloud 監査ログに書き込みます。

制限事項

GKE On-prem の Cloud 監査ログはアルファ版の機能です。このアルファ版リリースにはいくつかの制限があります。

  • Cloud 監査ログは、ユーザー クラスタの作成時にのみ設定できます。すなわち、新しいユーザー クラスタを作成する必要があります。

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

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

これらの制限は、今後のリリースで対処される予定です。

Anthos GKE API の有効化

GKE On-Prem で Cloud 監査ログ を使用するには、Anthos GKE API を有効にする必要があります。

Anthos GKE API の有効化

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

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

  1. Cloud 監査ログ サービス アカウントを作成します。

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

    gcloud iam service-accounts keys create audit-logging-key.json \
       --iam-account [Cloud Audit Logs_SERVICE_ACCOUNT_EMAIL]
    

    ここで、[Cloud Audit Logs_SERVICE_ACCOUNT_EMAIL] は Cloud 監査ログ サービス アカウントのメールアドレスです。

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

サービス アカウントをホワイトリストに登録する

Cloud 監査ログ サービス アカウントをホワイトリストに登録するには、Cloud Audit Logging for GKE On-Prem Alpha フォームに記入します。Cloud 監査ログを有効にするユーザー クラスタを作成する前に、サービス アカウントをホワイトリストに登録する必要があります。

Cloud 監査ログ を有効にしたユーザー クラスタの作成

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

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

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

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

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

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

例:

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

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

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 監査ログ

コンソール

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