Container Security
컨테이너 격리 및 보안 🛡️
1️⃣ 네임스페이스와 cgroups 개념 🏗️
1. 네임스페이스(Namespace)란?
📌 네임스페이스(Namespace) 는 컨테이너 간의 격리를 제공하는 Linux 커널 기능입니다.
컨테이너가 서로 독립된 환경에서 실행될 수 있도록 지원합니다.
🔹 주요 네임스페이스 종류
네임스페이스 | 설명 |
---|---|
mnt |
파일 시스템을 독립적으로 사용 |
pid |
프로세스 ID를 분리하여 컨테이너 간 격리 |
net |
네트워크 인터페이스를 독립적으로 사용 |
ipc |
프로세스 간 통신(IPC) 자원을 분리 |
uts |
호스트명과 도메인명을 컨테이너별로 분리 |
user |
UID/GID를 독립적으로 관리 (rootless 컨테이너) |
📌 네임스페이스 확인 방법
lsns # 현재 시스템의 네임스페이스 확인
📌 컨테이너 내 네임스페이스 확인
docker run -it --rm ubuntu bash
lsns
2. cgroups(Control Groups)란?
📌 cgroups(Control Groups) 는 컨테이너의 CPU, 메모리, I/O 사용량을 제한하는 Linux 커널 기능입니다.
🔹 주요 cgroups 설정 항목
설정 | 설명 |
---|---|
cpu.shares |
CPU 사용 비율 설정 |
memory.limit_in_bytes |
최대 메모리 사용량 제한 |
blkio.throttle.read_bps_device |
블록 I/O 속도 제한 |
📌 현재 cgroups 사용량 확인
cat /sys/fs/cgroup/memory/memory.usage_in_bytes
📌 특정 컨테이너의 cgroups 확인
docker inspect --format='{{.HostConfig.Memory}}' <container_id>
2️⃣ Docker 컨테이너 리소스 제한 ⚖️
1. 컨테이너의 CPU 및 메모리 제한 설정
📌 메모리 제한 (--memory
)
docker run -it --memory=512m ubuntu
📌 CPU 사용 제한 (--cpus
)
docker run -it --cpus=1.5 ubuntu
📌 CPU 및 메모리 동시 제한
docker run -it --memory=512m --cpus=1 ubuntu
📌 실행 중인 컨테이너의 리소스 사용량 확인
docker stats
3️⃣ 네트워크 격리 🌐
1. Docker 네트워크 드라이버 종류
🔹 Docker 네트워크 모드
모드 | 설명 |
---|---|
bridge |
기본 네트워크 모드, 가상 브릿지를 사용하여 컨테이너 연결 |
host |
호스트 네트워크를 공유하여 네트워크 격리 해제 |
none |
네트워크 기능 없음 |
overlay |
여러 호스트 간 네트워크 연결 지원 (Swarm 모드) |
📌 기본 브릿지 네트워크 확인
docker network ls
📌 새로운 브릿지 네트워크 생성
docker network create my_bridge
📌 컨테이너에 특정 네트워크 연결
docker run -it --network=my_bridge ubuntu
4️⃣ Docker 컨테이너 보안 🛡️
1. Rootless 컨테이너
📌 Rootless 컨테이너 실행
dockerd-rootless-setuptool.sh install
Rootless 모드에서는 컨테이너가 호스트의 root 권한 없이 실행됨
📌 Rootless 컨테이너 확인
docker info | grep "rootless"
2. seccomp를 활용한 시스템 콜 제한
📌 기본 seccomp 프로파일 적용
docker run --security-opt seccomp=default.json ubuntu
📌 사용 가능한 시스템 콜 목록 확인
grep "syscalls" /etc/docker/seccomp.json
3. AppArmor를 활용한 보안 정책 적용
📌 AppArmor 프로필 목록 확인
sudo aa-status
📌 AppArmor 적용하여 컨테이너 실행
docker run --security-opt apparmor=my_profile ubuntu
결론 🎯
✅ 네임스페이스와 cgroups를 사용하면 컨테이너 간 리소스 격리를 효과적으로 수행할 수 있음
✅ CPU 및 메모리 제한을 설정하여 과도한 리소스 사용을 방지 가능
✅ Docker 네트워크 드라이버를 활용하여 컨테이너 간 네트워크 격리를 설정 가능
✅ Rootless 컨테이너, seccomp, AppArmor 등을 활용하여 보안을 강화 가능
📌 추가 학습 리소스