このドキュメントでは、GKE on Bare Metal に対して Cloud Audit Logs を使用する方法について説明します。GKE on Bare Metal は、クラスタの Kubernetes API サーバーに対して行われた呼び出しを時系列で記録する Kubernetes Audit Logging を使用します。監査ログは、不審な 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 の機能については、GDCV for Bare Metal の料金に含まれています。
- GKE on Bare Metal では、ログをディスクまたは Cloud Audit Logs に書き込むように構成できます。
ディスクベースの監査ロギング
Cloud Audit Logs が明示的に無効になっている場合、GKE on Bare Metal の監査ログは永続ディスクに書き込まれるため、クラスタの再起動やアップグレードによってログが消えることはありません。GKE on Bare Metal は、最大 1 GiB の監査ログエントリを保持します。
コントロール プレーンのノードにログインして、ディスクベースの監査ログにアクセスします。ログは /var/log/apiserver/
ディレクトリにあります。
Cloud Audit Logs
ユーザー クラスタの作成時に指定したプロジェクトとロケーションを使用して、すべての Kubernetes API サーバーから Google Cloud に管理アクティビティ監査ログエントリが送信されます。ログエントリをバッファリングして Cloud Audit Logs に書き込むために、GKE on Bare Metal は、コントロール プレーン ノードで実行される audit-proxy
デーモンセットをデプロイします。
制限事項
GKE on Bare Metal の Cloud Audit Logs には、次の制限事項があります。
- データアクセス ロギングはサポートされていません。
- Kubernetes 監査ポリシーの変更はサポートされていません。
- Cloud Audit Logs は、ネットワークの長い停止に対処できません。ログエントリを Google Cloud にエクスポートできない場合は、10 GiB のディスク バッファのキャッシュに保存されます。対象のバッファに空き容量がなくなると、最も古いエントリが破棄されます。
Cloud Audit Logs のサービス アカウントの作成
GKE on Bare Metal で Cloud Logging と Cloud Monitoring を使用する前に、まず以下の構成を行う必要があります。
Google Cloud プロジェクト内に Cloud Monitoring Workspace を作成します(まだ作成していない場合)。
Google Cloud コンソールで次のボタンをクリックし、ワークフローを実行します。
次のボタンをクリックして必要な API を有効にします。
Stackdriver エージェントが使用するサービス アカウントに次の IAM ロールを割り当てます。
logging.logWriter
monitoring.metricWriter
stackdriver.resourceMetadata.writer
monitoring.dashboardEditor
Cloud Audit Logs へのアクセス
Console
Google Cloud コンソールで、[ロギング] メニューの [ログ エクスプローラ] ページに移動します。
[以前のログビューア] ページが表示された場合は、[アップグレード] プルダウン メニューから [新しいログ エクスプローラにアップグレード] を選択します。
[クエリ] をクリックして、クエリを送信するフィールドにアクセスします。
フィールドに次のクエリを入力します。
resource.type="k8s_cluster" logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。[クエリを実行] をクリックして、このプロジェクトにログインするように構成された GKE on Bare Metal クラスタからのすべての監査ログを表示します。
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 監査ポリシーでは、イベントをログエントリとして記録するルールを定義し、ログエントリに含めるデータを指定します。このポリシーを変更して Cloud Audit Logs の動作を変更することはできません。