追加 capabilities を許可する Kubernetes PodSecurityPolicy

ポリシーで許可する Linux capabilities を、ワークロードに必要な範囲に限定してください。

説明

PodSecurityPolicy の allowed_capabilities は、コンテナーが既定の権限に加えて要求できる Linux capabilities を指定します。この許可リスト自体が、すべてのコンテナーに権限を付与するわけではありません。各 capability の機能とワークロードの必要性に基づいて、最小限だけを許可してください。

NET_BIND_SERVICE など必要な場合がある権限もあり、すべての追加が同じリスクを持つわけではありません。PodSecurityPolicy は Kubernetes v1.21 で非推奨となり、v1.25 で削除されたため、現在は Pod Security Admission やポリシーエンジンで制限してください。

想定される影響

  • 不要な capability が実際に追加されると、侵害されたコンテナーが利用できるシステム機能が増えます。
  • 広い許可リストを多数のワークロードが使うと、最小権限の管理が難しくなります。

対処方法

  • 不要な allowed_capabilities の項目を削除し、必要な権限だけを明示してください。
  • 実際の Pod の追加権限と既定の capabilities も確認してください。許可リストを空にしても、既定の権限がすべて削除されるわけではありません。
  • 例外の利用を必要なワークロードに限定し、ポリシー移行後の適用状態を確認してください。

例

従来の PSP の部分例です。一部の必須項目を省略し、追加許可を減らす方法を比較しています。

変更前

hcl
resource "kubernetes_pod_security_policy" "policy" {
  metadata {
    name = "terraform-example"
  }

  spec {
    allowed_capabilities = ["NET_BIND_SERVICE"]
  }
}

NET_BIND_SERVICE の要求を許可しています。番号の小さいポートへのバインドに必要な場合があるため、実際の要件を確認してください。

変更後

hcl
resource "kubernetes_pod_security_policy" "policy" {
  metadata {
    name = "terraform-example"
  }

  spec {
    privileged                 = false
    allow_privilege_escalation = false
  }
}

追加の許可を削除しています。既定の capability を削除するポリシーと実際の Pod 設定も確認してください。

参考資料