설명
PodSecurityPolicy에서 privileged: true를 허용하면 해당 정책을 사용할 수 있는 Pod가 높은 권한의 실행을 요청할 수 있습니다. 실제 privileged 컨테이너는 격리가 약해져 워크로드 하나의 침해가 노드로 확장될 수 있습니다. 정책이 허용한다고 모든 Pod가 자동으로 privileged 모드가 되는 것은 아닙니다.
PodSecurityPolicy는 Kubernetes v1.21에서 사용 중단되었고 v1.25에서 제거되었습니다. 현재 클러스터에서는 Pod Security Admission이나 정책 엔진으로 같은 제한을 적용하세요.
잠재적 영향
- 실제 privileged 워크로드가 커널 기능과 노드 자원에 과도하게 접근할 수 있습니다.
- 컨테이너 침해가 노드와 다른 워크로드에 영향을 줄 수 있습니다.
해결 방법
- 레거시 PodSecurityPolicy의
privileged를false로 설정하세요. - 특수 작업을 더 좁은 capabilities로 수행할 수 있는지 검토하고 필수 예외는 정책과 노드로 분리하세요.
- 정책 마이그레이션 시 실제 워크로드의 권한과 적용되는 제한을 확인하세요.
예시
과거 policy/v1beta1 API를 사용하는 Pulumi YAML 부분 예시입니다. Kubernetes v1.25 이상에서는 이 리소스를 사용할 수 없으며, 다른 필수 정책 항목도 생략했습니다.
변경 전
yaml
name: aws-eks
runtime: yaml
resources:
example:
type: kubernetes:policy/v1beta1:PodSecurityPolicy
properties:
metadata:
name: example
spec:
privileged: true
이 정책은 privileged 실행을 요청할 수 있도록 허용합니다.
변경 후
yaml
name: aws-eks
runtime: yaml
resources:
example:
type: kubernetes:policy/v1beta1:PodSecurityPolicy
properties:
metadata:
name: example
spec:
privileged: false
이 정책의 privileged 허용을 해제했습니다. capabilities나 호스트 접근 등 다른 권한이 모두 제거되는 것은 아닙니다.