[Platform Security] Supply Chain Security - Minimize base image footprint
베이스 이미지 풋프린트 최소화 전략
1. 베이스 이미지 이해하기
- 베이스 이미지(Base Image): 처음부터 만들어진 이미지, 운영체제와 기본 라이브러리를 포함.
- 부모 이미지(Parent Image): 특정 베이스 이미지에서 빌드된 또 다른 이미지.
- Docker에서는 일반적으로 모든 상위 이미지를 "베이스 이미지"라고 부르기도 함.
2. 모범 사례
-
모듈화된 이미지 빌드
- 하나의 이미지에 여러 서비스를 결합하지 말 것.
- 웹 서버, 데이터베이스 등은 각각 독립된 이미지로 관리.
-
컨테이너 내부에 데이터 저장 금지
- 컨테이너는 일시적이므로, 데이터는 외부 볼륨이나 Redis 같은 캐싱 서비스에 저장.
-
적절한 베이스 이미지 선택
- 애플리케이션 요구 사항에 맞는 이미지 사용 (예:
httpd
, nginx
등).
- 신뢰할 수 있는 공식 이미지 또는 검증된 퍼블리셔 태그 확인.
- 자주 업데이트되는 이미지 선택(보안 취약점 패치됨).
3. 이미지 크기 최소화
- 작은 이미지는 더 빠르게 다운로드 및 배포 가능.
- 운영 체제의 최소 버전 사용 (예:
alpine
기반 이미지).
- 불필요한 파일 및 패키지 제거:
curl
, wget
, yum
, apt
같은 패키지 관리자 제거.
- 개발 환경에서 필요한 디버그 도구는 프로덕션 이미지에서 제외.
4. 보안 강화
- 패키지 및 취약점이 많은 기본 이미지보다 경량 이미지(예: Alpine, Distroless) 사용.
Trivy
같은 도구를 활용하여 취약점 스캔:
- 예:
httpd
기본 이미지 → 124개 취약점 발견.
httpd:alpine
이미지 → 0개 취약점.
5. Google Distroless 이미지
- 최소한의 패키지만 포함 → 보안 강화.
- 패키지 관리자, 셸, 네트워크 도구 등 제거하여 공격 표면 축소.
요약
- 베이스 이미지는 작고 안전해야 함.
- 불필요한 파일과 패키지를 제거하여 배포 속도 증가 및 보안 강화.
- Distroless 또는 Alpine 같은 경량 이미지 사용 권장.