【入門編】Kubernetes API Serverのアクセス制御と監査ログの有効化 – アプリケーションセキュリティ & 安全な開発防御ガイド

Kubernetesの「玄関」を守れ!API Serverのアクセス制御と監査ログ入門

こんにちは。日々、システムの守りを固めるエンジニアの皆さん、お疲れ様です。

今日は、Kubernetes(K8s)という強力な「要塞」の、最も重要な入り口である「API Server」の話をしましょう。

K8sを運用していると、Podのデプロイや設定変更のためにAPI Serverを叩く機会が増えますよね。でも、このAPI Server、実は家で言えば「玄関の鍵」であり、同時に「家の中を覗き込める窓」でもあります。ここを無防備にしておくのは、玄関を開けっ放しにして、さらに「誰がいつ入ったか」という防犯カメラも切っているのと同じくらい危険なことなんです。

今日は、この「玄関の守り」をどう固めるか、そして「誰が何をしたか」をどう記録するかを、泥臭い現場の知見を交えてお話しします。

1. 玄関の鍵を管理する:RBAC(役割ベースのアクセス制御)

家の中に家族、友人、宅配業者、そして時には知らない誰かが入ろうとします。全員に「合鍵」を渡しますか?もちろん違いますよね。

KubernetesのRBAC(Role-Based Access Control)は、まさにこの「誰にどの範囲の鍵を渡すか」を決める仕組みです。

なぜ「最小権限」が重要なのか

新人にありがちな失敗は、とりあえず「なんでもできる権限(Cluster-admin)」を付与してしまうことです。これは、家の合鍵を近所の人全員に配るようなもの。一人が悪意を持ったり、うっかりミスをしたりした瞬間に、家の中はめちゃくちゃにされてしまいます。

まずは、以下の構成で権限を絞りましょう。

Role定義:特定の名前空間(Namespace)だけで操作できる権限を作る
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: development
name: pod-reader # ポッドを読むだけの権限
rules:

  • apiGroups: [“”]

resources: [“pods”]
verbs: [“get”, “list”, “watch”] # 「作る」「消す」はさせない

このように、「何ができるか」を必要な分だけに絞る。これがセキュリティの第一歩です。

2. 泥棒を見逃さない:「監査ログ(Audit Logs)」の有効化

さて、玄関の鍵をどれだけ頑丈にしても、プロの泥棒は窓を割って入るかもしれません。あるいは、信頼していた家族が実は隠し事をしているかもしれない……。そこで必要になるのが「防犯カメラ」、つまり「監査ログ」です。

監査ログを有効にすると、「いつ」「誰が」「どのAPIを叩いて」「何をしたか」がすべて記録されます。

設定は難しくない:ポリシーファイルを定義しよう

API Serverが何を記録すべきか、ポリシーファイル(`audit-policy.yaml`)を作成します。最初は「重要な変更」だけを記録するように設定するのがコツです。

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
# 「秘密情報(Secrets)」へのアクセスは特に厳重に記録する

  • level: RequestResponse

resources:

  • group: “”

resources: [“secrets”]
# それ以外は「誰が何をしたか(Metadata)」だけを記録して軽量化

  • level: Metadata

omitStages:

  • “RequestReceived”

この設定をAPI Serverの起動オプション(`–audit-policy-file`など)に指定することで、ログが吐き出されます。

3. 現場の教訓:ログを出すだけでは意味がない

セキュリティの現場でよくある悲劇は、「ログは取っているけれど、誰も見ていない」という状況です。

家中に防犯カメラを設置したのに、その映像を24時間垂れ流しにするだけで、泥棒が映っていても誰も気づかない。これでは意味がありませんよね。

私たちがすべきこと

1. ログの転送: 監査ログをAPI Serverのディスクに溜め込むのはNGです。すぐに外部のログ管理基盤(Elasticsearch, CloudWatch Logs, Datadogなど)へ飛ばしましょう。
2. アラート設定: 「Secretを取得した」や「権限設定(RoleBinding)が変更された」といった、「異常な動き」を検知したら即座にチャットツールへ通知が飛ぶようにします。
3. 定期的な振り返り: 「今週は変なアクセスがなかったか?」とチームで5分確認するだけでも、セキュリティ意識は劇的に変わります。

最後に:完璧を目指さず、まずは一歩から

セキュリティ対策に「終わり」はありません。でも、今日お話しした「RBACで権限を絞る」ことと「監査ログで動きを可視化する」ことの2つをやるだけで、皆さんのKubernetes環境は格段に強固になります。

最初は難しい設定に感じるかもしれませんが、一度やってしまえばそれが「当たり前」になります。玄関の鍵をかけるのと同じくらい自然な習慣として、日々の運用に取り入れてみてください。

もし「こんなエラーが出たよ」「ここはどう考えればいいの?」という疑問があれば、いつでも相談してください。泥臭く、着実に、一緒に強いシステムを作っていきましょう!

コメント

タイトルとURLをコピーしました