기본 이미지 강화

기본 이미지 강화 (Base image hardening)

기본 이미지 강화가 무엇이고 Docker Hardened Images가 어떻게 적용하는지 알아볼게요.

출처: 문서

본문

기본 이미지 강화란 (What is base image hardening?)

기본 이미지 강화는 컨테이너 이미지의 기반 계층을 포함하는 것을 최소화하고 보안 우선 기본값으로 구성해 보호하는 과정이에요. 강화된 기본 이미지는 셸, 컴파일러, 패키지 매니저 같은 불필요한 구성 요소를 제거해 사용 가능한 공격 표면을 제한하므로, 공격자가 컨테이너 안에서 제어권을 얻거나 권한을 상승시키기 더 어려워요.

강화는 또한 non-root 사용자로 실행하고, 쓰기 가능한 표면을 줄이고, 불변성을 통한 일관성을 보장하는 모범 사례 적용을 포함해요. Docker Official Images와 Docker Verified Publisher Images는 보안 모범 사례를 따르지만, Docker Hardened Images만큼 강화되지 않을 수 있어요. 더 넓은 사용 사례를 지원하도록 설계되었기 때문이에요.

왜 중요한가 (Why is it important?)

대부분의 컨테이너는 사용하는 기본 이미지에서 보안 자세를 상속해요. 기본 이미지에 불필요한 도구가 포함되거나 상승된 권한으로 실행되면, 그 위에 빌드된 모든 컨테이너가 그 위험에 노출돼요.

기본 이미지를 강화하면:

  • 악용될 수 있는 도구와 라이브러리를 제거해 공격 표면을 줄임
  • root 접근을 제거하고 컨테이너가 할 수 있는 것을 제한해 최소 권한을 시행
  • 런타임 변경과 드리프트를 피해 신뢰성과 일관성을 개선
  • 안전한 소프트웨어 공급망 관행과 정렬되고 규정 준수 표준을 충족하는 데 도움

강화된 기본 이미지를 사용하는 것은 컨테이너에서 빌드·실행하는 소프트웨어를 보호하는 중요한 첫 단계예요.

무엇이 제거되고 왜인가 (What's removed and why)

강화된 이미지는 일반적으로 안전한 프로덕션 환경에서 위험하거나 불필요한 공통 구성 요소를 제외해요:

제거된 구성 요소 이유
셸(예: sh, bash) 사용자나 공격자가 컨테이너 안에서 임의 명령을 실행하는 것을 방지
패키지 매니저(예: apt, apk) 빌드 후 소프트웨어를 설치하는 능력을 비활성화해 드리프트와 노출을 줄임
컴파일러 및 인터프리터 악성 코드를 실행하거나 주입하는 데 쓸 수 있는 도구 도입을 피함
디버깅 도구(예: strace, curl, wget) 악용 또는 정보 누출의 위험을 줄임
사용하지 않는 라이브러리 또는 locale 이미지 크기를 줄이고 공격 벡터를 최소화

Docker Hardened Images가 기본 이미지 강화를 적용하는 방식 (How Docker Hardened Images apply base image hardening)

Docker Hardened Images(DHI)는 설계상 기본 이미지 강화 원칙을 적용해요. 각 이미지는 애플리케이션 빌드(-dev 또는 -sdk 태그) 또는 프로덕션 실행 중 어떤 목적이든 그 특정 목적에 필요한 것만 포함하도록 구성돼요.

Docker Hardened Image 특성 (Docker Hardened Image traits)

Docker Hardened Images는 다음이 되도록 빌드됐어요:

  • 최소: 필수 라이브러리와 바이너리만 포함
  • 불변: 이미지는 빌드 시 고정 — 런타임 설치 없음
  • 기본 non-root: 다른 구성이 없으면 컨테이너가 권한 없는 사용자로 실행
  • 목적 범위 지정: 개발(-dev), SDK 기반 빌드(-sdk), 프로덕션 런타임에 대해 다른 태그 제공

이 특성들은 개발, 테스트, 프로덕션 환경 전반에 걸쳐 일관되고 안전한 동작을 시행하는 데 도움을 줘요.

Docker Hardened Image 호환성 고려 사항 (Docker Hardened Image compatibility considerations)

Docker Hardened Images는 많은 공통 도구를 제거하므로 모든 사용 사례에 즉시 작동하지 않을 수 있어요. 필요할 수 있는 것:

  • -dev 이미지에서 코드를 컴파일하거나 의존성을 설치하고 출력을 강화된 런타임 이미지로 복사하는 멀티 스테이지 빌드 사용
  • 셸 스크립트를 동등한 엔트리포인트 바이너리로 교체하거나 필요하다면 셸을 명시적으로 포함
  • Docker Debug로 기본 이미지를 변경하지 않고 컨테이너를 일시적으로 검사하거나 문제 해결

이 트레이드오프는 의도적이며 안전하고 재현 가능하며 프로덕션 준비된 컨테이너를 빌드하는 모범 사례를 지원해요.

더 알아보기 (Learn more)