설명
PodSecurityPolicy의 allowedCapabilities는 컨테이너가 추가 Linux capability를 요청할 수 있게 허용합니다. 허용 목록 자체가 모든 컨테이너에 해당 권한을 부여하는 것은 아니지만, 불필요한 항목이나 *는 워크로드가 사용할 수 있는 권한 범위를 넓힙니다.
PSP는 Kubernetes 1.21에서 사용 중단되었고 1.25에서 제거되었습니다. 현재 환경에서는 Pod Security Admission 등 지원되는 정책 제어로 필요한 제한을 적용하세요.
잠재적 영향
- 침해된 컨테이너가 추가 권한을 악용하면 선택된 capability에 따라 프로세스, 네트워크 또는 호스트에 미치는 영향이 커질 수 있습니다.
- 광범위한 허용은 워크로드가 요구하는 실제 권한을 파악하고 통제하기 어렵게 만듭니다.
해결 방법
- 불필요한 capability 허용을 제거하고, 기능에 꼭 필요한 항목만 검토해 허용하세요.
- 기본 capability의 제거 여부와 특권 실행 및 권한 상승 제한도 함께 확인하세요.
- 정책 변경 후 필요한 기능이 동작하고 승인되지 않은 추가 권한 요청은 거부되는지 시험하세요.
예시
아래는 레거시 PSP의 일부 필드만 비교한 예시입니다. 완전한 정책이 아니며 최신 클러스터에 그대로 적용할 수 없습니다.
변경 전
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: privileged
spec:
allowedCapabilities:
- "*"
*는 모든 추가 capability 요청을 허용하므로 권한 범위가 매우 넓습니다.
변경 후
yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: privileged
spec:
volumes:
- "*"
추가 capability 허용 목록을 생략합니다. 이것만으로 기본 capability가 모두 제거되지는 않으며, volumes: ["*"]의 광범위한 볼륨 허용도 별도로 제한해야 합니다.