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