KubernetesのAuditログ監査ポリシー 4種類それぞれの特徴
Kubernetesを運用していると、「誰が」「いつ」「何をしたか」を記録する監査ログが重要になります。特にセキュリティ対策やトラブルシューティングでは、ログの詳細さがカギを握ることも。
でも、監査ポリシーにはいくつかの種類があって、違いがわかりにくいと感じたことはありませんか?
ここでは、4つの監査ポリシーについて、それぞれの特徴と「実際に何が記録されるのか」をイメージできるようにまとめていきます。
1. None (記録なし)
まずは「何も記録しない」ポリシーから。
どんなポリシー?
このポリシーでは操作ログを一切記録しません。
どんな時に使う?
テスト環境や開発環境で、監査ログの保存が不要な場合。
記録をオフにしてパフォーマンスを優先したい場面。
具体例
たとえば、次のようにPodを作成するコマンドを実行します。
kubectl create pod nginx
この操作をしても、ログには何も残りません。まるで「ホワイトボードに書いて、すぐに消した」ような状態です。
2. Metadata (メタデータのみ記録)
次は、操作の概要だけを記録するポリシーです。
どんなポリシー?
ユーザー名、タイムスタンプ、操作内容(動詞)などの「誰が、いつ、何をしたか」を記録します。
リクエストやレスポンスの詳細は含まれません。
どんな時に使う?
軽量なログでシステムパフォーマンスを保ちたい場合。
誰が操作したかだけを確認できれば十分なケース。
具体例
kubectl create pod nginx
この操作では、以下のようなログが残ります。
{
"level": "Metadata",
"timestamp": "2024-12-24T12:34:56Z",
"user": {"username": "admin"},
"verb": "create",
"objectRef": {
"resource": "pods",
"name": "nginx-pod"
},
"responseStatus": {"code": 201}
}
ログを確認すれば「管理者(admin)がPod(nginx)を作成した」ことがわかりますが、実際にどういう内容で作成したかまでは不明です。
3. Request (リクエスト本文を含む記録)
次は、操作の詳細を少し深掘りして記録するポリシーです。
どんなポリシー?
メタデータに加えて、リクエストの本文まで記録します。
ただしレスポンスは記録されません。
どんな時に使う?
操作内容を正確に把握したい場合。
設定ミスや不正操作の調査に役立てたいとき。
具体例
kubectl create pod nginx
この操作では、以下のようなログが記録されます。
{
"level": "Request",
"timestamp": "2024-12-24T12:34:56Z",
"user": {"username": "admin"},
"verb": "create",
"objectRef": {
"resource": "pods",
"name": "nginx-pod"
},
"requestObject": {
"kind": "Pod",
"metadata": {"name": "nginx-pod"},
"spec": {
"containers": [{"name": "nginx", "image": "nginx:latest"}]
}
}
}
Podの仕様までしっかり記録されていますが、結果がどうなったかはわかりません。
4. RequestResponse (リクエストとレスポンスの記録)
最後は、最も詳細な記録を行うポリシーです。
どんなポリシー?
リクエストとレスポンスの両方を記録します。
完全なログを残せるため、監査やトラブルシューティングに最適です。
どんな時に使う?
重要なシステムでセキュリティ対策を強化したい場合。
エラーやレスポンスの詳細まで把握したいとき。
具体例
kubectl create pod nginx
この操作では、次のようなログが記録されます。
{
"level": "RequestResponse",
"timestamp": "2024-12-24T12:34:56Z",
"user": {"username": "admin"},
"verb": "create",
"requestObject": {
"kind": "Pod",
"metadata": {"name": "nginx-pod"},
"spec": {
"containers": [{"name": "nginx", "image": "nginx:latest"}]
}
},
"responseObject": {
"metadata": {"name": "nginx-pod"},
"status": {"phase": "Running"}
}
}
操作内容だけでなく、作成結果やステータスまで確認できます。
どのポリシーを選ぶ?
それぞれのポリシーには特徴があります。
Noneは「記録なし」で、テスト環境向け。
Metadataは「概要のみ記録」で、軽量な監査用。
Requestは「リクエスト詳細を記録」で、不正防止や設定ミス確認に便利。
RequestResponseは「完全記録」で、セキュリティ重視や障害対応向け。
まとめ
監査ポリシーは、用途や目的に応じて使い分けることがポイントです。
シンプルな記録で十分な場合はMetadata、セキュリティやトラブル対応を強化したいならRequestResponseを選ぶとよいでしょう。
ログはシステムの「防犯カメラ」のような役割を果たします。必要なときにしっかりと証拠を残せるよう、ポリシーの設定を見直してみてはいかがでしょうか?