SecurityContextDeny の代替ポリシーの確認

使用する Kubernetes バージョンに対応するポリシーで、Pod のセキュリティコンテキストを制限してください。

説明

特権実行、権限昇格、ホストへのアクセスを制限する admission ポリシーがない場合、Pod に不要な権限が与えられるおそれがあります。ワークロードの要件に応じたセキュリティコンテキストの制限が必要です。

従来の SecurityContextDeny プラグインは Kubernetes 1.27 で非推奨となり、1.30 で削除されました。現在のクラスターでは、このプラグインを有効にしようとせず、Pod Security Admission または対応するポリシーエンジンを使用してください。

想定される影響

  • 制限のないセキュリティコンテキストによって、特権コンテナーや不要な権限が許可されるおそれがあります。
  • ワークロードが侵害された場合、ホストやほかのリソースへの影響が大きくなる場合があります。

対処方法

  • Pod Security Admission の適切なポリシーレベル、または対応するポリシーエンジンでセキュリティコンテキストを制限してください。
  • 実際のワークロードと警告・監査結果を確認してから、拒否するポリシーを適用してください。
  • 必要な例外だけを承認し、新しい Pod の要求に意図した制限が適用されることをテストしてください。

例

以下は SecurityContextDeny が存在した Kubernetes 1.24 の引数を比較する抜粋です。サポート終了済みバージョンのデプロイを推奨するものではありません。Kubernetes 1.30 以降では、後の例のプラグイン設定は使用できません。残りの制御プレーン設定は省略しています。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: registry.k8s.io/kube-apiserver:v1.24.17
      command: ["kube-apiserver"]
      args: ["--disable-admission-plugins=SecurityContextDeny"]

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: registry.k8s.io/kube-apiserver:v1.24.17
      command: ["kube-apiserver"]
      args:
        ["--enable-admission-plugins=SecurityContextDeny"]

補足:

  • 変更前: 従来のプラグインを明示的に無効にします。ほかの admission ポリシーの適用状況は別途確認する必要があります。
  • 変更後: 従来のプラグインを有効にする歴史的な例です。現在の環境では、対応する Pod セキュリティポリシーに置き換えてください。

参考資料