説明
従来の PodSecurityPolicy の privileged: true は、特権コンテナーの実行を許可します。Linux の特権コンテナーにはすべての capability が与えられ、複数のランタイム分離制約を回避できるため、通常のアプリケーションに必要な範囲を大きく超える権限を持ちます。ポリシーで許可しても、すべての Pod が自動的に特権モードになるわけではありません。
PSP は Kubernetes 1.21 で非推奨となり、1.25 で削除されました。現在のクラスターでは Pod Security Admission などの代替ポリシーで、不要な特権実行を制限してください。
想定される影響
- ホストのデバイスやシステムリソースに広くアクセスできる場合があります。
- コンテナーが侵害された場合、ノードや他のワークロードへの影響が大きくなるおそれがあります。
対処方法
- 従来のポリシーに
privileged: falseを設定し、実際のワークロードからも特権モードを削除してください。 - 特定の処理に必要な capability だけを付与し、
hostPathとホスト名前空間の共有も制限してください。 - 必須のシステムツールの例外は利用権限と配置範囲を絞り、代替ポリシーの適用と正常動作を確認してください。
例
次の例は Kubernetes 1.25 より前の PSP の特権制御部分です。他の必須フィールドは省略しています。
変更前
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: example
spec:
privileged: true
このポリシーを利用できる Pod が、特権実行を要求できます。
変更後
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: example
spec:
privileged: false
このポリシーは特権実行を許可しません。個別の capability や他のポリシーによる過剰な権限も、別途制限する必要があります。