Docker로 Python 애플리케이션을 배포할 때, 보안 취약점(CVE)이 포함된 이미지가 생성되는 경우가 종종 있습니다. 특히 python:3.9.12-slim
이미지를 사용할 경우, 다음과 같은 치명적인 취약점들이 감지될 수 있습니다:
- OpenSSL, zlib, expat, pcre2, kerberos, libtasn1 등 주요 시스템 패키지 관련 CVE
- 대표적으로 CVE-2022-2068, CVE-2022-1586, CVE-2024-45491 등
이번 글에서는 해당 취약점들을 제거하기 위한 이미지 최적화 방법을 정리해 보았습니다.
사용 환경
- 베이스 이미지:
python:3.9.12-slim
- 빌드 플랫폼:
linux/amd64
- 취약점 검사 도구:
docker scan
,Trivy
- 대상 취약점: CRITICAL 등급의 12개 CVE
취약점 제거를 위한 전략
1. 보안 패치 반영
기존 slim 이미지는 Debian 기반으로 구성되어 있으며, 보안 업데이트가 자동 반영되지 않습니다.
이를 해결하기 위해 다음을 수행합니다:
RUN apt-get update && apt-get upgrade -y
2. 필요한 패키지만 설치
취약점이 있는 패키지를 명시적으로 업데이트하거나 제거합니다.
RUN apt-get install -y --no-install-recommends \
libssl-dev libffi-dev zlib1g-dev libexpat1-dev libpcre2-dev
3. Python 패키지 최신화
OpenSSL 관련 취약점을 방지하기 위해 pip 및 setuptools도 최신화합니다.
RUN pip install --upgrade pip setuptools
4. 불필요한 파일 제거
이미지 용량을 줄이고 불필요한 캐시를 제거합니다.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /root/.cache
최종 Dockerfile 예시
FROM --platform=linux/amd64 python:3.9-slim-bullseye
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
libssl-dev libffi-dev build-essential \
zlib1g-dev libexpat1-dev libpcre2-dev \
curl ca-certificates && \
pip install --upgrade pip setuptools && \
apt-get clean && rm -rf /var/lib/apt/lists/* /root/.cache
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "main.py"]
참고: python:3.9.12-slim 대신 python:3.9-slim-bullseye 또는 bookworm 계열 사용을 권장드립니다.
취약점 제거 확인 방법
빌드된 이미지에 대해 다음 명령어로 확인합니다:
# Trivy를 사용하는 경우
trivy image myapp:latest
# Docker 기본 스캐너
docker scan myapp:latest
Amazon ECR에 이미지를 푸시한 경우에도 자동 취약점 검사를 통해 결과를 확인할 수 있습니다.
마무리
보안 취약점은 실제 서비스 운영 시 공격의 진입점이 될 수 있기 때문에, Docker 이미지 내 불필요한 라이브러리를 줄이고, 공식 패키지를 최신 상태로 유지하는 것이 매우 중요합니다.
Slim 이미지를 사용할 때도 반드시 보안 업데이트 절차를 거쳐야 안전한 운영이 가능합니다.
반응형
'개발 (Development) > Python' 카테고리의 다른 글
[Python] requests에서 대량 배열 전송 시 403 오류 해결 (0) | 2025.09.07 |
---|---|
[Python] MAU(Monthly Active Users) 계산 방법 (2) | 2025.08.10 |
[Python] 문자열 각 단어의 첫 글자를 대문자로 만드는 방법 (0) | 2025.08.03 |
[Python] 폴더 내 CSV 형식 로그 파일 시각화하기 (3) | 2025.07.28 |
[Python] requests 요청 후 기다리는 로직과 타임아웃 설정 (0) | 2025.07.28 |