설명
컨테이너의 루트 파일 시스템이 읽기 전용이 아니면 프로세스의 파일 권한 범위에서 이미지 기반 파일을 변경할 수 있습니다. 애플리케이션 오류나 침해로 실행 환경에 의도하지 않은 파일이 남을 수 있습니다.
읽기 전용 루트 파일 시스템은 변경 가능한 범위를 줄이지만, 별도 마운트한 볼륨까지 읽기 전용으로 만들거나 모든 악성 동작을 막지는 않습니다.
잠재적 영향
- 침해된 프로세스가 파일을 남기거나 실행 중 설정을 변경할 수 있습니다.
- 필요한 쓰기 경로 없이 읽기 전용으로 전환하면 애플리케이션이 시작하거나 동작하지 못할 수 있습니다.
해결 방법
- 컨테이너의 security_context에서 read_only_root_filesystem = true를 설정하세요.
- 로그·임시 파일 등 쓰기가 필요한 경로만 emptyDir 또는 PVC로 분리하고 볼륨 접근 권한을 제한하세요.
- allow_privilege_escalation = false 등 다른 보호 설정도 적용하고 정상 동작을 시험하세요.
예시
보호 설정만 비교한 발췌입니다. 기존 nginx:1.7.9는 현재 배포 권장 버전이 아닙니다. 유지보수 이미지를 사용하고, nginx가 쓰는 캐시·실행 디렉터리 등에 필요한 볼륨과 설정을 별도로 준비하세요.
변경 전
hcl
resource "kubernetes_pod" "example" {
metadata {
name = "app"
}
spec {
container {
name = "web"
image = "nginx:1.7.9"
security_context {
read_only_root_filesystem = false
}
}
}
}
변경 후
hcl
resource "kubernetes_pod" "example" {
metadata {
name = "app"
}
spec {
container {
name = "web"
image = "nginx:1.7.9"
security_context {
read_only_root_filesystem = true
allow_privilege_escalation = false
}
}
}
}
설명:
- 변경 전: 루트 파일 시스템의 쓰기를 제한하지 않습니다. 실제 파일 변경은 프로세스 권한에 좌우됩니다.
- 변경 후: 루트 파일 시스템을 읽기 전용으로 만들고 권한 상승을 제한합니다. 애플리케이션에 필요한 쓰기 경로는 따로 제공해야 합니다.