설명
컨테이너에 /var/run/docker.sock를 마운트하고 해당 소켓에 연결할 권한을 주면 Docker 데몬 API를 직접 사용할 수 있습니다. 일반적인 root 권한의 호스트 데몬에서는 다른 컨테이너나 호스트 파일 시스템을 제어하는 경로가 될 수 있습니다.
대부분의 애플리케이션에는 이 접근이 필요하지 않습니다. 읽기 전용 마운트로 바꾸는 것만으로 소켓 API 작업이 읽기 전용으로 제한되지는 않습니다.
잠재적 영향
침해된 컨테이너가 데몬 권한으로 다른 워크로드를 생성·변경하거나 호스트 데이터에 접근할 수 있습니다. 실제 범위는 데몬의 권한과 소켓 접근 통제에 달려 있지만, 애플리케이션 격리를 크게 약화할 수 있습니다.
해결 방법
- 불필요한 Docker 소켓 볼륨과 마운트를 제거하세요.
- 빌드·운영 자동화는 전용 빌더나 별도 격리 환경을 사용하고 필요한 API 접근만 제한적으로 허용하세요.
- 제거 후 정상 기능을 확인하고 일반 데이터 볼륨도 호스트 경로와 파일 권한을 최소화하세요.
예시
해당 호스트에 Docker 소켓과 데이터 디렉터리가 존재하는 경우의 마운트 비교입니다. 이미지 접근과 애플리케이션 설정은 환경에 맞게 준비하세요.
변경 전
yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
path: /var/run/docker.sock
type: Socket
실제 Unix 소켓을 Socket 유형으로 마운트합니다. 컨테이너가 파일 권한을 통해 연결할 수 있으면 Docker API를 사용할 수 있습니다.
변경 후
yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
path: /data
type: Directory
Docker 소켓 대신 데이터 디렉터리를 마운트합니다. /data에 대한 호스트 접근은 여전히 남으므로 필요한 범위·파일 권한·읽기 전용 여부를 검토하세요.