権限昇格を許可する PodSecurityPolicy

権限昇格を許可する PodSecurityPolicy は、実行ファイルを通じた追加権限の取得を制限しません。

説明

従来の PodSecurityPolicy で allowPrivilegeEscalation を許可すると、プログラムの実行時に setuid、setgid、ファイル capability から追加権限を得られるコンテナー構成を認めます。通常のワークロードでは false に制限してください。この設定は既存の権限を削除したり、すべてのカーネル脆弱性を防いだりするものではありません。

PSP は Kubernetes 1.21 で非推奨となり、1.25 で削除されました。現在のクラスターでは、Pod Security Admission の Restricted ポリシーなどのアドミッション制御と、ワークロードのセキュリティコンテキストで制限してください。

想定される影響

  • 侵害されたプロセスが、追加権限を与える実行ファイルを利用する機会が増える可能性があります。
  • 過剰な権限やホストアクセスもある場合、コンテナー侵害の影響が大きくなるおそれがあります。

対処方法

  • 従来のポリシーには allowPrivilegeEscalation: false を設定し、privileged と不要な capability も制限してください。
  • 実際のコンテナーが特権モードや SYS_ADMIN を使っている場合は、権限昇格の禁止と両立しないため、先に削除してください。
  • 移行先のポリシーが適用され、setuid などに依存していたアプリケーションも正常に動作することを確認してください。

例

次の例は Kubernetes 1.25 より前の PSP の関連フィールドだけを抜粋しています。他の必須フィールドは省略しています。

変更前

yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: privileged
spec:
  privileged: true
  allowPrivilegeEscalation: true

特権実行と権限昇格の両方を許可します。実際に使用できる範囲は、ポリシーの適用と利用権限によって異なります。

変更後

yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: privileged
spec:
  privileged: false
  allowPrivilegeEscalation: false

特権実行も禁止し、allowPrivilegeEscalation: false の目的と整合させています。他のポリシーから広い権限を利用できないことも確認する必要があります。

参考資料