컨테이너의 root 실행 방지 설정 점검

이미지와 보안 컨텍스트를 함께 확인해 불필요한 root 실행을 방지하세요.

설명

컨테이너가 root로 실행되면 애플리케이션이 침해됐을 때 파일이나 프로세스에 행사할 수 있는 권한이 커질 수 있습니다. 비 root 실행을 기본으로 하고 실제 UID와 부여된 권한을 함께 확인하세요.

runAsNonRoot가 false라는 사실만으로 root 실행이 확정되지는 않습니다. 실제 사용자는 runAsUser, 파드·컨테이너 설정과 이미지의 기본 사용자에 달려 있습니다. 컨테이너의 root가 곧 호스트 전체 권한을 뜻하는 것도 아닙니다.

잠재적 영향

침해된 애플리케이션이 컨테이너 안에서 불필요한 파일 변경이나 관리 작업을 수행할 수 있습니다. 위험한 capability, 호스트 마운트나 다른 격리 문제와 결합되면 피해가 확대될 수 있습니다.

해결 방법

  • runAsNonRoot: true로 root 실행을 차단하고 이미지가 지원하는 비 root runAsUser를 지정하세요.
  • 파드 설정뿐 아니라 각 컨테이너와 초기화 컨테이너의 재정의를 확인하고 필요한 파일·볼륨 권한을 준비하세요.
  • 불필요한 capability와 호스트 접근을 줄이고 비 root 상태에서 애플리케이션이 정상 동작하는지 검증하세요.

예시

컨테이너별 설정이 파드 기본값보다 우선하는 예시입니다. 지정 UID에서 이미지와 파일 권한이 호환되는지 확인하세요.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo-2
spec:
  securityContext:
    runAsUser: 1000
    runAsNonRoot: false
  containers:
    - name: sec-ctx-demo-2
      image: gcr.io/google-samples/node-hello:1.0
      securityContext:
        runAsUser: 0
        allowPrivilegeEscalation: false
        runAsNonRoot: false

파드 기본 UID가 1000이어도 컨테이너는 UID 0으로 실행됩니다. allowPrivilegeEscalation: false는 이미 root인 프로세스를 비 root로 바꾸지 않습니다.

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo-2
spec:
  securityContext:
    runAsUser: 10000
    runAsNonRoot: true
  containers:
    - name: sec-ctx-demo-2
      image: gcr.io/google-samples/node-hello:1.0
      securityContext:
        runAsUser: 10100
        allowPrivilegeEscalation: false
        runAsNonRoot: true

컨테이너를 UID 10100으로 실행하고 root 실행을 차단합니다. 애플리케이션이 필요한 경로에만 접근하도록 파일 권한도 설정하세요.

참조