728x90
반응형
SMALL
학습내용
- Docker 보안 개념 및 정책
- Docker 컨테이너 네트워크 보안
- 운영환경에서의 Docker 보안 및 모니터링
학습정리
1. Docker 보안 개념 및 정책
컨테이너 보안의 필요성
- 컨테이너는 가볍고 유연하지만 기본적인 보안 취약점을 내포할 수 있습니다.
- 보안이 취약한 이미지를 사용할 경우 전체 시스템이 위협받을 가능성이 있습니다.
컨테이너 보안 위협
- 취약한 컨테이너 이미지 사용
- 네트워크 공격 및 내부 트래픽 도청
- 루트 권한을 가진 컨테이너의 보안 문제
- 컨테이너 탈출(Container Escape) 공격
도커 이미지 및 컨테이너 보안
- 신뢰할 수 있는 이미지 사용 (Docker Hub, private registry)
- 공식 이미지와 third party 이미지의 차이
- docker trust를 활용한 신뢰할 수 있는 이미지 검증
- Dockerfile 보안 모범 사례
- 불필요한 패키지 제거 (alpine 같은 경량 이미지 사용)
- USER 명령어 사용하여 root 권한 제한
- 다단계 빌드(Multi-Stage Build) 적용
- 이미지 서명 및 취약점 스캔 (Docker Content Trust, Trivy 사용)
- docker scan 명령어를 이용한 이미지 취약점 점검
- trivy를 활용하여 특정 이미지의 보안 리스크 분석
- 신뢰할 수 있는 이미지 사용 (Docker Hub, private registry)
이미지 취약점 스캔 (trivy) 사용
사용방법
# trivy 설치 Mac 기준 brew install aquasecurity/trivy/trivy # 스캔할 이미지 pull docker pull vulnerables/web-dvwa # 이미지 스캔 trivy image vulnerables/web-dvwa
안전한 Dockerfile 작성법
alpine 기반 경량이미지 사용
USER node를 사용해 root 권한 제한
빌드단계를 분리하여 불필요한 파일 포함하지 않도록 설정
# Multi Stage 빌드 적용 FROM node:16-alpine AS builder WORKDIR /app COPY . . RUN npm install && npm run build FROM node:16-alpine WORKDIR /app COPY --from=builder /app . USER node CMD ["node", "app.js"]
2. Docker 컨테이너 네트워크 보안
- 컨테이너 실행 보안
- 최소권한 원칙 적용 (-user, -cap-drop 활용)
- Read-Only 파일 시스템 (-read-only 활용)
- seccomp, AppArmor, SELinux 활용한 보안 강화
docker run -d --name secure-app --user 1000 --cap-drop all nginx
- 도커 네트워크 보안
- 기본 브리지 네트워크 보안 문제
- 사용자 정의 네트워크(docker network create) 활용
- 컨테이너 간 통신 제한 (iptables, network policy 설정)
docker network create --driver bridge secure-net docker run -d --name web --network secure-net nginx docker network inspect secure-net
3. 운영환경에서의 Docker 보안 및 모니터링
Docker 런타임 보안 모니터링
- 컨테이너 내부에서 발생하는 이벤트 및 로그 분석
- docker audit, Falco를 이용한 보안 모니터링
Docker audit 로그 활용
- Docker의 주요 이벤트를 감사하기 위해 auditd와 auditctl을 사용
- 컨테이너 생성, 삭제, 네트워크 변경 등의 보안 이벤트 감지
- 로그 확인: /var/log/audit/audit.log
- 도커 파일 및 프로세스 무결성 검사
sudo auditctl -w /usr/bin/docker -p warx -k docker_audit ausearch -k docker_audit --start recent
Falco를 이용한 컨테이너 보안 이벤트 감지
Falco는 Kubernetes 및 Docker 환경에서 런타임 보안 감지를 수행하는 오픈소스 도구
시스템 콜을 모니터링하여 비정상적인 활동을 탐지
참고자료 : Try Falco with Docker
# Falco 실행 sudo docker run --rm -i -t --name falco --privileged \ -v /var/run/docker.sock:/host/var/run/docker.sock \ -v /dev:/host/dev -v /proc:/host/proc:ro \ -v ./falco_rules.yaml:/etc/falco/falco_rules.yaml \ -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro -v /etc:/host/etc:ro \ falcosecurity/falco:0.40.0 # falco_rules.yaml 해당 예시파일은 개인 notion에서 관리
비밀관리 및 데이터 보호
Docker Secrets를 이용한 민감 데이터 저장
# 비밀데이터 생성 echo "my_secure_password" | docker secret create db_password - # 비밀 데이터 확인 docker secret ls # 비밀 데이터를 이용한 서비스 실행 docker service create --name mysql \ --secret db_password \ -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_password \ mysql:latest # 비밀 데이터 컨테이너 내부에서 확인 docker exec -it <container_id> cat /run/secrets/db_password
Vault 사용
- Vault는 HashiCorp에 의해 개발된 오픈 소스 도구로, 안전하게 액세스를 관리하고 비밀번호, 토큰, API 키, 그리고 다른 민감한 데이터들을 보호하는 데 사용됩니다.
- Vault는 다양한 환경에서 데이터 암호화와 비밀 관리를 중앙집중화하여 제공하는 솔루션입니다.
- 이러한 기능들은 특히 클라우드 환경, 다양한 데이터 센터 또는 마이크로서비스 아키텍처에서 매우 유용합니다.
728x90
반응형
LIST
'TIL' 카테고리의 다른 글
10_2.k8s Pod와 Deployment 관리 실습 (1) | 2025.02.27 |
---|---|
10_1.Kubernetes 개념 및 Minikbue 설치 및 구성 (0) | 2025.02.24 |
9_4.Docker 를 활용한 Log 관리 (0) | 2025.02.20 |
9_3.Docker 네트워크 및 데이터 관리 (0) | 2025.02.20 |
9_2.Docker 이미지 생성 및 docker hub 실습 (1) | 2025.02.18 |