説明
root 実行や特権コンテナーを許可するポリシーは、アプリケーション侵害後に使える権限を広げる場合があります。許可するだけですべてのコンテナーが root になるわけではなく、root ユーザー、特権モード、権限昇格は異なる設定です。
PodSecurityPolicy は Kubernetes 1.25 で削除されました。過去の PSP 例を現在のクラスターへ適用せず、Pod Security Admission やポリシーエンジンで必要な制限を適用してください。
想定される影響
- 侵害されたプロセスが、不要なファイル・システム権限を悪用する場合があります。
- 特権設定とホストアクセスが組み合わさると、侵害の影響が拡大する場合があります。
対処方法
- 実際のコンテナーを非 root で動かし、権限昇格と特権モードを制限してください。現在のワークロードでは
run_as_non_root = true、allow_privilege_escalation = false、privileged = falseなど対応する security_context 設定と admission ポリシーを使ってください。 - 読み取り専用のルートファイルシステムと必要な書き込み用ボリュームを構成し、ユーザー・グループ権限を最小限にしてください。過去の PSP では
MustRunAsNonRootと必要なグループ範囲を指定し、実際のイメージやファイル権限もテストしてください。
例
削除された PSP の一部だけを示す過去の抜粋です。他の必須設定と PSP の使用権限は省略しています。fs_group はボリュームへのアクセス用グループの設定であり、この範囲だけですべてのプロセスグループを制限するものではありません。
変更前
hcl
resource "kubernetes_pod_security_policy" "example" {
metadata {
name = "terraform-example"
}
spec {
privileged = true
allow_privilege_escalation = true
run_as_user {
rule = "RunAsAny"
}
fs_group {
rule = "MustRunAs"
range {
min = 0
max = 65535
}
}
}
}
変更後
hcl
resource "kubernetes_pod_security_policy" "example" {
metadata {
name = "terraform-example"
}
spec {
privileged = false
allow_privilege_escalation = false
read_only_root_filesystem = true
run_as_user {
rule = "MustRunAsNonRoot"
}
fs_group {
rule = "MustRunAs"
range {
min = 1
max = 65535
}
}
}
}
補足:
- 変更前: root 実行、特権モード、権限昇格を許可します。Pod の実際の実行ユーザーを root に強制するわけではありません。
- 変更後: 非 root 実行と読み取り専用ルートファイルシステムを要求し、特権モードと権限昇格を制限します。