概要
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 では 10 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 はアルファ版機能です。このアルファ版リリースには次の制限事項があります。
Cloud Audit Logs は、ユーザー クラスタの作成時にのみ構成できます。すなわち、新しいユーザー クラスタを作成する必要があります。
データアクセス ロギングはサポートされていません。
Kubernetes 監査ポリシーの変更はサポートされていません。
これらの制限は今後のリリースで対処される予定です。
Anthos クラスタの API の有効化
GKE On-Prem で Cloud Audit Logs を使用するには、Anthos クラスタの API を有効にする必要があります。
監査ロギング用のサービス アカウントの作成
GKE On-Prem での使用のために作成したサービス アカウントがすでに複数あります。このアルファ機能では、追加のサービス アカウントを作成して許可リストに登録する必要があります。
Cloud Audit Logs サービス アカウントを作成します。
gcloud iam service-accounts create audit-logging-service-account
Cloud Audit Logs サービス アカウントの 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 Audit Logs サービス アカウントのメールアドレスです。
管理ワークステーションの他のサービス アカウントキーと同じ場所に
audit-logging-key.json
を保存します。
ホワイトリストへのサービス アカウントの登録
Cloud Audit Logs のサービス アカウントの許可リスト登録をリクエストするには、Cloud Audit Logs for GKE On-Prem アルファ版フォームに必要事項を入力してください。Cloud Audit Logs を有効にするユーザー クラスタを作成する前に、サービス アカウントを許可リストに登録する必要があります。
Cloud Audit Logs を有効にしたユーザー クラスタの作成
管理者クラスタをまだ作成していない場合は、静的 IP アドレスを使用したインストールまたは DHCP を使用したインストールの手順に従って新しいクラスタを作成します。
すでに管理クラスタがある場合は、ユーザー クラスタの追加作成の手順に従って、新しいユーザー クラスタを作成します。
gkectl create-config
の実行後に通常どおり構成ファイルに入力しますが、usercluster
の新しいcloudauditlogging
セクションにも入力が必要です。ユーザー クラスタの監査ログを表示する Google Cloud プロジェクトのプロジェクト ID に
cloudauditlogging.projectid
を設定します。cloudauditloggijg.clusterlocation
を、ログを保存する Google Cloud リージョンに設定します。お使いのオンプレミス データセンターの近くのリージョンを選択することをおすすめします。cloudauditlogging.serviceaccountkeypath
の値を、Cloud Audit Logs サービス アカウントの JSON キーファイルのパスに設定します。
例:
cloudauditlogging: projectid: "my-project" clusterlocation: "us-west1" serviceaccountkeypath: "/my-key-folder/audit-logging-key.json"
通常どおりクラスタ作成を続けます。
GKE On-Prem 監査ログへのアクセス
ディスクベースの監査ロギング
管理クラスタおよび関連するすべてのユーザー クラスタで実行されている Kubernetes API サーバーを表示します。
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods --all-namespaces -l component=kube-apiserver
ここで [ADMIN_CLUSTER_KUBECONFIG] は、管理クラスタの kubeconfig ファイルです。
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
Google Cloud コンソールで、[ロギング] メニューの [ログ] ページに移動します。
上で説明したプルダウン メニューのすぐ上にある [ラベルまたはテキスト検索でフィルタ] ボックスで、下矢印をクリックしてプルダウン メニューを開きます。メニューで、[高度なフィルタに変換] を選択します。
テキスト ボックスに次のフィルタを入力します。
resource.type="k8s_cluster" logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"
[フィルタを送信] をクリックして、このプロジェクトにログインするように構成された 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.serviceName
は anthosgke.googleapis.com
と等しくなる点に注意してください。
監査ポリシー
監査ロギングの動作は、静的に構成された Kubernetes 監査ロギング ポリシーによって決まります。このポリシーの変更は現在サポートされていませんが、将来的にはサポートされる予定です。