🔐 Docker 보안과 Kubernetes SecurityContext 개념 이해
Kubernetes의 SecurityContext를 이해하기 전에, Docker에서의 보안 개념을 먼저 알아두는 것이 유익함.
🖥️ 호스트와 컨테이너의 프로세스 격리
- Docker가 설치된 호스트에는 OS 프로세스, Docker 데몬, SSH 서버 등이 실행 중
- Docker 컨테이너는 호스트와 커널을 공유하지만, Linux 네임스페이스를 통해 격리됨
- 컨테이너 내부에서
sleep 프로세스를 실행하면 자신의 PID 1로 보임
- 하지만 호스트에서는 해당 프로세스가 다른 PID로 표시됨
- 컨테이너는 자신의 네임스페이스 내 프로세스만 볼 수 있음
👤 컨테이너 내부 사용자 권한
- 기본적으로 Docker는 컨테이너 내부의 프로세스를 root 사용자로 실행
- 이는 컨테이너 안과 밖 모두에서 확인 가능
docker run -it ubuntu sleep 3600
- 사용자 권한 변경 방법:
--user 옵션 사용
docker run -it --user 1000 ubuntu sleep 3600
- Dockerfile에서 사용자 정의 시
USER 명령어 사용
FROM ubuntu
USER 1000
⚠️ 컨테이너 내 root = 호스트 root?
- 컨테이너 내의 root는 호스트 root와 완전히 동일하지 않음
- Docker는 Linux Capabilities를 활용하여 root 권한을 제한함
🛠️ Linux Capabilities 개념
🧱 Docker의 Capabilities 제어 방법
- Docker는 기본적으로 일부 capability만 허용
- 추가 권한이 필요할 경우
--cap-add 사용
docker run --cap-add=NET_ADMIN ubuntu
docker run --cap-drop=ALL ubuntu
- 모든 권한을 허용하려면
--privileged 옵션 사용
docker run --privileged ubuntu
주의: --privileged는 보안상 매우 위험할 수 있음
🧩 요약
- 컨테이너는 호스트와 커널을 공유하므로 보안 격리가 중요
- 기본적으로 root로 실행되지만, 제한된 권한만 부여됨
- 필요에 따라 사용자 ID 변경 및 capability 추가/제거 가능
- 이러한 Docker 보안 개념은 Kubernetes의 SecurityContext를 이해하는 데 기초가 됨