설명
컨테이너는 기본적으로 여러 Linux capability를 가질 수 있습니다. securityContext.capabilities.drop을 설정하지 않으면 애플리케이션에 필요 없는 권한까지 남게 될 수 있습니다. add로 필요한 권한을 추가하는 것만으로 기존 기본 권한이 제거되지는 않으며, 실제 권한은 런타임과 적용된 정책도 함께 확인해야 합니다.
잠재적 영향
- 컨테이너가 불필요한 시스템 권한을 유지할 수 있습니다.
- 애플리케이션 취약점이 악용될 때 피해 범위가 커질 수 있습니다.
해결 방법
- Linux 컨테이너에는 가능한 한 capabilities.drop에 ALL을 지정하고 실제로 필요한 capability만 add로 허용하세요. 애플리케이션의 시작과 정상 동작을 시험하세요.
- 특권 모드는 별도로 제거하고 비루트 실행, 권한 상승 방지와 함께 적용하세요. 불필요한 capability가 실행 중에도 남지 않는지 확인하세요.
예시
Deployment에서 컨테이너 권한만 비교하는 발췌입니다. selector 등은 생략했으며, 실제 이미지가 필요한 권한과 낮은 포트 사용 조건은 따로 확인하세요.
변경 전
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
template:
spec:
containers:
- name: payment
image: nginx
securityContext:
capabilities:
add:
- NET_BIND_SERVICE
NET_BIND_SERVICE를 추가하지만 다른 기본 capability를 제거하지 않습니다.
변경 후
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
template:
spec:
containers:
- name: payment
image: nginx
securityContext:
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
기본 capability를 모두 제거한 뒤 NET_BIND_SERVICE만 다시 요청합니다. 이 권한도 실제 필요할 때만 유지하세요.