TIL

9_5.Docker 보안 및 운영 관리

꿀승 2025. 2. 21. 23:07
728x90
반응형
SMALL

학습내용

  1. Docker 보안 개념 및 정책
  2. Docker 컨테이너 네트워크 보안
  3. 운영환경에서의 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를 활용하여 특정 이미지의 보안 리스크 분석
  • 이미지 취약점 스캔 (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