Kubernetes Learning 第31章:コンテナのセキュリティ対策(PodSecurityなど)~Kubernetes環境を守るために最低限知っておきたいこと~

Kubernetesでは、多くのアプリケーションがコンテナとして実行されます。便利な一方で、セキュリティ対策が不十分なままだと、内部からの攻撃や誤操作によってクラスター全体が危険にさらされる可能性があります。

そのため、「コンテナに何を許可するか、何を禁止するか」を制御する手段が必要です。そこで登場するのが Kubernetes の PodSecurity(ポッドセキュリティ) 機能です。


🔐 なぜコンテナのセキュリティ対策が必要か?

例を挙げてみます。

  • あるPodが「rootユーザーで動作」している
  • ホストの /etc ディレクトリを hostPath マウントで読み書きできる
  • コンテナから他のPodのメタデータを抜き取る

こうした設定は、悪意のあるユーザーにとって「クラスター乗っ取りの入口」となり得ます。
これを防ぐためには、明示的な制限を定める必要があります。


✅ PodSecurityとは?

Kubernetes 1.25 以降、PodSecurityPolicy(PSP)は廃止され、代わりにPod Security Admission(PSA) という機能が正式に導入されました。

PSA は、Podの仕様(YAML)をチェックして、セキュリティ基準に沿わないPodを拒否・警告する仕組みです。


🚦 PodSecurity のモード(3段階)

レベル説明
privileged制限なし(最も緩い)rootでの実行、特権コンテナなどOK
baseline一般的な用途に適した最低限の制限hostPath使用NG、特権モードNG
restricted本番向けの強い制限rootユーザーNG、CAPの追加NG など

これらのレベルはNamespace単位で適用できます。


🧩 Namespace への適用例

Namespaceに対して restricted レベルを適用する例です:

kubectl label namespace dev \
  pod-security.kubernetes.io/enforce=restricted \
  pod-security.kubernetes.io/enforce-version=latest

これにより、dev 名前空間に restricted レベルのポリシーが強制され、ルールに違反するPodは作成できなくなります


🧪 モードの種類

PodSecurityには3つの「動作モード」があります:

モード説明
enforce違反があれば Pod 作成を拒否
audit拒否はしないがログに記録する
warnユーザーに警告を出すが拒否はしない

例えば以下のように、警告と監査だけを設定することもできます:

kubectl label namespace test \
  pod-security.kubernetes.io/audit=restricted \
  pod-security.kubernetes.io/warn=restricted

🛠 運用のポイント

  • 開発用Namespaceではbaseline、商用環境ではrestrictedを使うのが基本
  • kubectl explain pod.spec で許容される仕様を確認するとよい
  • kube-apiserver のログや kubectl create の出力を見てルール違反を把握できる

⚙️ 他のセキュリティ対策(補足)

PodSecurityだけでなく、以下のような対策も有効です:

  • readOnlyRootFilesystem を有効にする
  • SecurityContextrunAsNonRoot, allowPrivilegeEscalation を制限
  • NetworkPolicy で通信制限
  • RBAC で操作権限を制限

🔚 まとめ

Kubernetesは強力な仕組みを提供してくれますが、何も制限しない状態は非常に危険です。
その第一歩として「Podに許可すること/禁止すること」をNamespace単位でコントロールするPodSecurityの設定は重要です。

mh

Related Posts

Kubernetes Learning 第32章:Helmの基本操作(install, upgrade, rollback)~マニフェスト管理をもっと効率よく、自動化するために~

Kubernetes Learning 第30章:NetworkPolicyの使い方 〜Pod間通信を制御するセキュリティの要〜

You Missed

Kubernetes Learning 第32章:Helmの基本操作(install, upgrade, rollback)~マニフェスト管理をもっと効率よく、自動化するために~

  • 投稿者 mh
  • 6月 5, 2025
  • 3 views

現場で使えるChrome DevTools実践ガイド 第11章:アクセシビリティの確認

  • 投稿者 mh
  • 6月 5, 2025
  • 7 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第5章:Cloud SDKとgcloudコマンド:GCPを「キーボードから操る」魔法のツール

  • 投稿者 mh
  • 6月 4, 2025
  • 12 views

Kubernetes Learning 第31章:コンテナのセキュリティ対策(PodSecurityなど)~Kubernetes環境を守るために最低限知っておきたいこと~

  • 投稿者 mh
  • 6月 4, 2025
  • 20 views

現場で使えるChrome DevTools実践ガイド 第10章:Device Modeでのレスポンシブ検証

  • 投稿者 mh
  • 6月 4, 2025
  • 19 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第4章:課金と料金モデル、予算とアラート:GCPの「お財布」管理術

  • 投稿者 mh
  • 6月 3, 2025
  • 24 views