Kubernetes 컨테이너 루트 파일 시스템 쓰기 권한 점검

필요한 쓰기 경로를 분리하고 루트 파일 시스템을 읽기 전용으로 사용하세요.

설명

컨테이너의 readOnlyRootFilesystem이 false이거나 기본값에 따라 쓰기를 허용하면, 프로세스의 파일 권한 범위에서 루트 파일 시스템을 변경할 수 있습니다. 침해 시 컨테이너의 쓰기 계층에 파일을 남기거나 설정을 바꿀 여지가 늘어납니다. 이는 root 사용자로 실행하는지와 별개이며, 읽기 전용 설정도 별도 마운트 볼륨까지 보호하지는 않습니다.

잠재적 영향

  • 실행 중 파일이 변경되거나 악성 파일이 남을 수 있습니다.
  • 장애나 침해 이후 상태 분석이 어려워질 수 있습니다.

해결 방법

  • 컨테이너에 readOnlyRootFilesystem: true를 적용하고 쓰기가 필요한 로그·캐시·임시 경로는 제한된 별도 볼륨으로 분리하세요. 실제 애플리케이션 동작을 시험하세요.
  • 볼륨의 쓰기 권한과 실행 사용자, allowPrivilegeEscalation도 별도로 검토하세요. 읽기 전용 루트 파일 시스템만으로 모든 악성 동작이 차단된다고 가정하지 마세요.

예시

기존 goproxy 이미지로 설정 차이만 비교합니다. 실제 배포에는 유지보수되는 검증된 이미지를 사용하세요. 두 예시는 Pod 이름이 달라 변경 후 Pod를 생성해도 기존 Pod는 바뀌지 않습니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: rootfalse
spec:
  containers:
    - name: app
      image: k8s.gcr.io/goproxy:0.1
      securityContext:
        readOnlyRootFilesystem: false

루트 파일 시스템을 읽기 전용으로 제한하지 않습니다. 실제 쓰기 가능 범위에는 파일 권한도 적용됩니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: roottrue
spec:
  containers:
    - name: app
      image: k8s.gcr.io/goproxy:0.1
      securityContext:
        readOnlyRootFilesystem: true

루트 파일 시스템을 읽기 전용으로 설정합니다. 별도 볼륨의 쓰기 권한과 기존 워크로드 교체는 따로 관리해야 합니다.

참조