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 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

You Missed

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

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

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 72 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 71 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

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

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

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

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 94 views