설명
컨테이너 security_context.capabilities.drop가 없으면 런타임의 기본 또는 추가 capability가 남을 수 있습니다. 불필요한 권한은 컨테이너가 접근할 수 있는 시스템 기능을 늘려 공격 표면을 키울 수 있습니다.
Linux 컨테이너는 필요한 권한만 가지는 것이 좋습니다. drop = ["ALL"]을 기준으로 필요한 capability만 예외적으로 추가하고 실제 동작을 시험하세요.
잠재적 영향
- 취약점 악용 시 불필요한 시스템 권한이 피해 범위를 넓힐 수 있습니다.
- 필요한 capability까지 제거하면 애플리케이션의 시작이나 정상 작업이 실패할 수 있습니다.
해결 방법
- 컨테이너에서
drop = ["ALL"]을 적용하고 필요한 capability만 add로 허용하세요. 초기화 컨테이너도 함께 검토하세요. - 이미지의 실행 사용자와 필요한 시스템 작업을 확인하고 배포 전에 시험하세요. capability 축소만으로 다른 보안 컨텍스트나 호스트 격리 설정을 대신하지는 못합니다.
예시
기존 nginx 예제는 capability 구성만 비교합니다. 유지보수되는 이미지로 바꾸고 권한 제거 후 시작, 파일 접근, 포트 바인딩이 동작하는지 확인하세요. 예시의 모든 권한 제거가 해당 이미지의 정상 실행을 보장하지는 않습니다.
변경 전
hcl
resource "kubernetes_pod" "example" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
security_context {
capabilities {
add = ["NET_BIND_SERVICE"]
}
}
}
}
}
변경 후
hcl
resource "kubernetes_pod" "example" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
security_context {
capabilities {
drop = ["ALL"]
}
}
}
}
}
설명:
- 변경 전: NET_BIND_SERVICE를 추가하며 기본 capability를 명시적으로 제거하지 않습니다.
- 변경 후: 모든 capability를 제거합니다. 정상 실행에 꼭 필요한 권한은 별도로 검토해야 합니다.