PSP によるホスト PID 共有の許可

hostPID の共有を許可する PodSecurityPolicy では、Pod がホストのプロセス名前空間を共有できます。

説明

hostPID: true を許可すると、Pod はホストのプロセス名前空間を共有できます。コンテナーからホストのプロセスを観察したり、影響を与えたりする機会が増えるおそれがあります。

通常のアプリケーションにホスト PID の共有は必要ありません。PodSecurityPolicy を使用する環境では、原則として禁止してください。

PodSecurityPolicy は Kubernetes v1.21 で非推奨となり、v1.25 で削除されました。この文書は PSP を使う旧クラスターや、PSP リソースが残る環境を対象とします。現在のクラスターでは Pod Security Admission、Gatekeeper、Kyverno などで同等の制限を適用してください。

想定される影響

  • Pod からホストのプロセス情報をより多く取得できる場合があります。
  • ホストとコンテナーの分離が弱まるおそれがあります。
  • 侵害されたワークロードによるホストの情報収集や追加攻撃の機会が増える場合があります。

対処方法

  • PSP に hostPID: false を設定してください。
  • ホスト PID へのアクセスが必要なシステムワークロードだけを例外として許可してください。
  • hostPID、hostIPC、hostNetwork のホスト名前空間共有を併せて確認してください。

例

従来の PSP の一部フィールドだけを抜粋しています。ほかの必須フィールドとポリシーを使用する権限は別途設定してください。

変更前

yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: example
spec:
  hostPID: true
  seLinux:
    rule: RunAsAny

変更後

yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: example
spec:
  hostPID: false
  seLinux:
    rule: RunAsAny

補足:

  • 変更前: ホスト PID の共有を要求する Pod を許可します。すべての Pod に共有を強制する設定ではありません。
  • 変更後: ホスト PID の共有を禁止し、プロセス名前空間の分離を維持します。

参考資料