목록 보기
How We Protect Karrot’s Internal PyPI Proxy from Supply Chain Attacks
백엔드

How We Protect Karrot’s Internal PyPI Proxy from Supply Chain Attacks

당근마켓
당근마켓
2026년 5월 6일

두줄요약

내부 PyPI 프록시 앞단에 얇은 프록시를 두어 CodeArtifact를 PyPI처럼 사용하도록 구성했습니다. 또한 PEP 691의 upload-time을 활용해 cooldown 정책을 중앙에서 적용했습니다.

문제 상황

  • 내부 Python 패키지 배포 경로가 CodeArtifact 직접 노출과 환경별 AWS 인증 설정에 의존해 사용성과 운영 복잡도가 높았음
  • 공급망 공격 대응을 위해 패키지 업로드 직후 설치를 늦추는 cooldown 정책을 적용할 필요가 있었음
  • PEP 503 HTML 응답만으로는 업로드 시점을 알 수 없어 cooldown 필터링 기준을 만들기 어려웠음

구조와 흐름

  • CodeArtifact 앞단에 얇은 프록시를 두고, 클라이언트에는 PyPI처럼 보이는 단일 진입점 제공
  • 프록시가 요청을 받아 CodeArtifact 인증 헤더를 붙여 전달하고, 대용량 파일은 스트리밍으로 응답
  • PEP 503은 기존 설치 호환성 유지용으로, PEP 691 JSON은 upload-time 확인용으로 활용

성능/운영 포인트

  • 토큰 만료를 대비해 백그라운드 스레드에서 자동 갱신, Lock으로 공유 상태 보호
  • 짧은 만료 시간과 사전 갱신, jitter로 토큰 노출과 동시 갱신 부하 완화
  • /health에서 토큰 유효성까지 검사해 갱신 실패 시 재시작 유도

적용해볼 점

  • 내부 패키지 트래픽을 단일 프록시로 모아 보안 정책과 관측 지점 통합
  • 클라이언트별 설정 대신 서버 측 정책으로 cooldown 일괄 적용
  • PEP 503/691처럼 호환성과 메타데이터 활용을 분리한 설계 고려

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...