Container Security

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 등을 활용하여 보안을 강화 가능

📌 추가 학습 리소스

RSS Feed