설명
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 설정도 검토해야 합니다.