特権コンテナーを許可する PodSecurityPolicy

特権実行を許可する PodSecurityPolicy は、ノードのリソースへ広くアクセスできるコンテナー構成を認めます。

説明

従来の 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 や他のポリシーによる過剰な権限も、別途制限する必要があります。

参考資料