설명
컨테이너의 Linux capability는 네트워크나 시스템 작업에 사용할 수 있는 권한을 나눠 부여합니다. security_context.capabilities.add에 불필요한 권한을 추가하면 침해된 프로세스가 악용할 수 있는 기능이 늘어날 수 있습니다. 실제 권한은 런타임 기본값과 drop 설정에도 영향을 받습니다.
NET_BIND_SERVICE는 낮은 번호 포트 바인딩에 필요할 수 있고 이미 기본 집합에 포함될 수도 있습니다. 추가 설정을 삭제하는 것만으로 해당 capability가 실제로 제거되는 것은 아닙니다.
잠재적 영향
- 불필요한 capability가 시스템·네트워크 권한 악용에 사용될 수 있습니다.
- 필요한 권한까지 제거하면 애플리케이션 시작이나 기능이 실패할 수 있습니다.
해결 방법
- 불필요한
capabilities.add항목을 제거하고 실제 실행 프로세스의 권한을 확인하세요. 지원되는 워크로드는drop = ["ALL"]에서 시작해 필요한 capability만 허용하는 방식을 검토하세요. - 필요한 예외는 해당 워크로드에만 부여하고 시작·포트 바인딩·파일 접근을 시험하세요. Pod Security Admission 또는 정책 엔진으로 허용 범위를 통제하세요.
예시
기존 이미지와 capability 추가 설정을 비교하는 예제입니다. 실제 배포에는 유지보수되는 이미지를 사용하세요. 변경 후에도 런타임 기본 capability는 남을 수 있으므로 모든 권한을 제거한 예제가 아닙니다.
변경 전
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
security_context {
capabilities {
add = ["NET_BIND_SERVICE"]
}
}
}
}
}
변경 후
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
설명:
- 변경 전: NET_BIND_SERVICE를 명시적으로 추가합니다. 실제 권한 증가 여부는 기본 집합에 따라 다릅니다.
- 변경 후: 명시적 추가 설정을 제거합니다. 필요한 drop 설정은 별도로 검토해야 합니다.