説明
PodSecurityPolicy の runAsUser.rule: RunAsAny は UID 0 での実行を制限しません。privileged: true は特権コンテナーを、allowPrivilegeEscalation: true はプロセスの権限昇格を許可する別々の設定です。不要な権限を許可すると、脆弱性が悪用された際の影響が大きくなるおそれがあります。
非 root 実行、権限昇格の禁止、読み取り専用ルートファイルシステムなどの防御を、ワークロードに合わせて併用してください。
PodSecurityPolicy は Kubernetes v1.21 で非推奨となり、v1.25 で削除されました。この文書は PSP を使う旧クラスターや、PSP リソースが残る環境を対象とします。現在のクラスターでは Pod Security Admission、Gatekeeper、Kyverno などで同等の制限を適用してください。
想定される影響
- 侵害されたコンテナーが、より強い権限で悪用されるおそれがあります。
- ホストや機密ファイルへの影響が大きくなる場合があります。
- ワークロードの分離が弱まるおそれがあります。
対処方法
- PSP に
privileged: falseとallowPrivilegeEscalation: falseを設定してください。 runAsUser.ruleをMustRunAsNonRootに制限してください。- ワークロードに合わせて
readOnlyRootFilesystem: trueを適用し、root グループを許可しないようにしてください。
例
従来の PSP の関連フィールドだけを抜粋しています。ほかの必須フィールドとポリシーを使用する権限は省略しています。読み取り専用ルートファイルシステムは、非 root 実行とは別の制御です。
変更前
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: true
allowPrivilegeEscalation: true
runAsUser:
rule: "RunAsAny"
supplementalGroups:
rule: "RunAsAny"
fsGroup:
rule: "MustRunAs"
ranges:
- min: 0
max: 65535
変更後
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
runAsUser:
rule: "MustRunAsNonRoot"
supplementalGroups:
rule: "MustRunAs"
ranges:
- min: 1
max: 65535
fsGroup:
rule: "MustRunAs"
ranges:
- min: 1
max: 65535
readOnlyRootFilesystem: true
補足:
- 変更前: root 実行と権限昇格を許可し、コンテナー侵害時の影響を大きくするおそれがあります。
- 変更後: 非 root 実行を必須にし、権限昇格を防いで分離を強化します。