
저는 VirtualBox 하이퍼바이저를 사용하여 MacOSX 호스트에서 minikube를 실행하고 있습니다. 호스트와 폴더(/Users)를 공유합니다. 내 클러스터를 온라인으로 실행할 수 있을 만큼 안전합니까?
컨테이너, 포드, VM을 이스케이프하는 것은 어려울 것 같습니다. 하지만 저는 간단히 minikube ssh
and를 사용하여 거기에 들어갔습니다. 공유 폴더를 인식하지 못했고 셸을 통해 호스트를 탐색할 수 있다는 사실도 몰랐습니다.
답변1
아니요, 안전하지 않습니다. Dockerfile의 USER 데몬 지시문을 사용하여 구축된 컨테이너 이미지로 포드를 배포하여 데몬 사용자로 컨테이너를 실행한다고 상상해 보세요. 공격자가 이미지 레지스트리에 액세스하여 동일한 태그 아래에 다른 이미지를 푸시하면 어떻게 되나요? 공격자의 이미지는 루트 사용자로 실행되도록 구성되어 있습니다. Kubernetes가 Pod의 새 인스턴스를 예약하면 Kubelet은 공격자의 이미지를 다운로드하고 공격자가 입력한 코드를 실행합니다. 컨테이너는 대부분 호스트 시스템에서 격리되어 있지만 해당 프로세스를 루트로 실행하는 것은 여전히 나쁜 습관으로 간주됩니다. 예를 들어 호스트 디렉터리가 컨테이너에 탑재되면 컨테이너에서 실행 중인 프로세스가 루트로 실행 중인 경우 탑재된 디렉터리에 대한 전체 액세스 권한을 가지지만, 루트가 아닌 사용자로 실행 중인 경우에는 그렇지 않습니다. 이전에 설명한 공격 시나리오를 방지하려면 다음 목록에 표시된 대로 포드의 컨테이너가 루트가 아닌 사용자로 실행되도록 지정할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: pod-run-as-non-root
spec:
containers:
- name: main
image: alpine
command: ["/bin/sleep", "999999"]
securityContext:
runAsNonRoot: true