설명
레거시 PodSecurityPolicy에서 allowPrivilegeEscalation을 허용하면 컨테이너가 실행 파일의 setuid, setgid나 파일 capability를 통해 추가 권한을 얻을 수 있는 구성을 사용할 수 있습니다. 일반 워크로드에서는 이를 false로 제한해야 합니다. 이 설정은 이미 가진 권한을 제거하거나 모든 커널 취약점을 막는 기능은 아닙니다.
PSP는 Kubernetes 1.21에서 사용 중단되고 1.25에서 제거되었습니다. 현재 클러스터에서는 Pod Security Admission의 Restricted 정책이나 대체 승인 제어 정책과 워크로드의 보안 컨텍스트로 제한하세요.
잠재적 영향
- 침해된 프로세스가 권한을 높이는 실행 파일을 이용할 기회가 늘어날 수 있습니다.
- 과도한 권한이나 호스트 접근이 함께 있으면 컨테이너 침해의 영향이 커질 수 있습니다.
해결 방법
- 레거시 정책에
allowPrivilegeEscalation: false를 설정하고privileged와 불필요한 capability도 제한하세요. - 실제 컨테이너가 특권 모드나
SYS_ADMIN을 사용한다면 권한 상승 차단과 양립할 수 없으므로 먼저 제거하세요. - 새 정책이 실제로 적용되는지와 setuid 등에 의존하던 애플리케이션의 정상 동작을 확인하세요.
예시
다음은 Kubernetes 1.25 이전 PSP의 관련 필드만 발췌한 예제입니다. 다른 필수 정책 필드는 생략했습니다.
변경 전
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: privileged
spec:
privileged: true
allowPrivilegeEscalation: true
특권 실행과 권한 상승을 모두 허용합니다. 실제 사용 가능 범위는 정책의 적용과 사용 권한에 따라 달라집니다.
변경 후
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: privileged
spec:
privileged: false
allowPrivilegeEscalation: false
특권 실행도 함께 금지하여 allowPrivilegeEscalation: false의 목적과 일치시켰습니다. 다른 정책으로 더 넓은 권한을 사용할 수 없는지도 확인해야 합니다.