コンテナーの root 実行を許可するポリシーの確認

非 root 実行と権限昇格の制限を、別々の制御として適用してください。

説明

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 実行と読み取り専用ルートファイルシステムを要求し、特権モードと権限昇格を制限します。

参考資料