Kubernetes の Pod・コンテナーのセキュリティコンテキストの確認

各ワークロードに必要な実行ユーザー、権限、ファイルシステム保護を明示してください。

説明

securityContext は、Pod とコンテナーの権限や実行条件を指定する設定です。省略すると、イメージ、ランタイム、admission ポリシーの既定値に依存します。省略だけで保護が全くないとは断定できませんが、必要な保護が実際に適用されるか確認しにくくなります。空の securityContext を追加するだけでも保護は完成しません。

想定される影響

  • 非 root 実行や権限昇格の防止など、必要な保護が欠ける場合があります。
  • 実行条件が一貫せず、侵害時の隔離が想定より弱くなるおそれがあります。

対処方法

  • Pod と各コンテナーで、各階層が対応するフィールドを使って必要な securityContext を指定してください。実行ユーザー、allowPrivilegeEscalation、readOnlyRootFilesystem、Linux capability を確認してください。
  • コンテナー設定が Pod の共通設定を上書きするか確認し、実効値を検証してください。イメージのユーザー・ファイル権限と必要な書き込み先を整えてから、起動と正常な動作を試してください。

例

例示のイメージは実際の検証済みイメージに置き換えてください。UID 1000 で実行できる必要があり、書き込みが必要なパスには別のボリュームと適切な権限が必要です。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
    - name: app
      image: images.my-company.example/app:v4

Pod とコンテナーの実行条件を明記していないため、既定値に依存します。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  securityContext:
    runAsUser: 1000
  containers:
    - name: app
      image: images.my-company.example/app:v4
      securityContext:
        allowPrivilegeEscalation: false
        readOnlyRootFilesystem: true

Pod に UID 1000 を指定し、コンテナーでは権限昇格を防止してルートファイルシステムを読み取り専用にしています。他の必要な保護は別途確認する必要があります。

参考資料