설명
컨테이너가 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 실행을 차단합니다. 애플리케이션이 필요한 경로에만 접근하도록 파일 권한도 설정하세요.