컨테이너 루트 파일 시스템 쓰기 보호 점검

루트 파일 시스템을 읽기 전용으로 두고 필요한 쓰기 경로만 별도 볼륨으로 제공하세요.

설명

컨테이너의 루트 파일 시스템이 읽기 전용이 아니면 프로세스의 파일 권한 범위에서 이미지 기반 파일을 변경할 수 있습니다. 애플리케이션 오류나 침해로 실행 환경에 의도하지 않은 파일이 남을 수 있습니다.

읽기 전용 루트 파일 시스템은 변경 가능한 범위를 줄이지만, 별도 마운트한 볼륨까지 읽기 전용으로 만들거나 모든 악성 동작을 막지는 않습니다.

잠재적 영향

  • 침해된 프로세스가 파일을 남기거나 실행 중 설정을 변경할 수 있습니다.
  • 필요한 쓰기 경로 없이 읽기 전용으로 전환하면 애플리케이션이 시작하거나 동작하지 못할 수 있습니다.

해결 방법

  • 컨테이너의 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
      }
    }
  }
}

설명:

  • 변경 전: 루트 파일 시스템의 쓰기를 제한하지 않습니다. 실제 파일 변경은 프로세스 권한에 좌우됩니다.
  • 변경 후: 루트 파일 시스템을 읽기 전용으로 만들고 권한 상승을 제한합니다. 애플리케이션에 필요한 쓰기 경로는 따로 제공해야 합니다.

참조