설명
보안 정책이 root 실행이나 특권 컨테이너를 허용하면 애플리케이션 침해 시 사용할 수 있는 권한이 커질 수 있습니다. 허용 정책이 모든 컨테이너를 root로 실행시키는 것은 아니며, root 사용자·privileged 모드·권한 상승은 서로 다른 설정입니다.
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 실행과 특권·권한 상승을 허용합니다. 이것이 파드의 실제 실행 사용자를 강제로 root로 만드는 것은 아닙니다.
- 변경 후: 비 root 실행을 요구하고 특권·권한 상승을 제한하며 읽기 전용 루트 파일 시스템을 요구합니다.