[Python/Docker] Python Docker 이미지에서 취약점 제거하기 (python:3.9.12-slim 기반)

2025. 8. 3. 22:11·개발 (Development)/Python

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
'개발 (Development)/Python' 카테고리의 다른 글
  • [Python] requests에서 대량 배열 전송 시 403 오류 해결
  • [Python] MAU(Monthly Active Users) 계산 방법
  • [Python] 문자열 각 단어의 첫 글자를 대문자로 만드는 방법
  • [Python] 폴더 내 CSV 형식 로그 파일 시각화하기
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    deepseek
    데이터분석
    javascript
    ADsP
    DevOps
    docker
    리눅스 마스터 2급
    백준온라인저지
    백준알고리즘
    Linux
    python
    AWS
    springboot
    Linux master
    Spring boot
    오답노트
    JSON
    PostgreSQL
    MyBatis
    백준자바
    java
    Kafka
    pandas
    timescaledb
    백준
    Vue.js
    JPA
    Kubernetes
    리눅스 마스터 2급 2차
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Python/Docker] Python Docker 이미지에서 취약점 제거하기 (python:3.9.12-slim 기반)
상단으로

티스토리툴바