Docker Hardened Images는 어떻게 테스트되나요?

Docker Hardened Images는 어떻게 테스트되나요?

Docker Hardened Images(DHI)의 테스트 전략과, 서명된 attestation과 Docker Scout CLI로 이를 독립적으로 검증하는 방법을 살펴봐요.

출처: 문서

본문

Docker Hardened Images(DHI)는 안전하고 최소화되었으며 프로덕션에 바로 사용할 수 있게 설계돼요. 신뢰성과 보안을 보장하기 위해 Docker는 포괄적인 테스트 전략을 사용하며, 서명된 attestation과 오픈 도구를 사용해 직접 검증할 수 있어요.

모든 이미지는 표준 준수, 기능, 보안에 대해 테스트돼요. 이 테스트 결과는 서명된 attestation으로 내장되며, Docker Scout CLI를 사용해 프로그래밍 방식으로 검사하고 검증할 수 있어요.

테스트 전략 개요

DHI의 테스트 프로세스는 두 가지 주요 영역에 초점을 맞춰요.

  • 이미지 표준 준수: 각 이미지가 엄격한 크기, 보안, 호환성 표준을 준수하는지 보장
  • 애플리케이션 기능: 이미지 내 애플리케이션이 올바르게 작동하는지 검증

이미지 표준 준수

각 DHI는 다음 표준을 충족하기 위해 엄격한 검사를 거쳐요.

  • 최소 공격 표면: 이미지는 가능한 한 작게 빌드되어 불필요한 구성 요소를 제거하고 잠재적 취약점을 줄여요.
  • 제로에 가까운 알려진 CVE: Docker Scout 같은 도구로 이미지를 스캔해 알려진 CVE(Common Vulnerabilities and Exposures)가 없는지 확인해요.
  • 멀티 아키텍처 지원: DHI는 여러 아키텍처(linux/amd64 및 linux/arm64)로 빌드되어 광범위한 호환성을 보장해요.
  • Kubernetes 호환성: 이미지는 Kubernetes 클러스터 내에서 원활하게 실행되도록 테스트되어 컨테이너 오케스트레이션 환경의 요구사항을 충족해요.

애플리케이션 기능 테스트

Docker는 Docker Hardened Images가 일반적인 사용 시나리오에서 예상대로 동작하는지 테스트해요. 다음을 검증해요.

  • 애플리케이션이 컨테이너화된 환경에서 성공적으로 시작되고 실행되는지
  • 런타임 동작이 업스트림 기대치와 일치하는지
  • 빌드 변형(예: -dev 이미지)이 일반적인 개발 및 빌드 작업을 지원하는지

목표는 강화되고 최소화된 설계를 유지하면서, 가장 일반적인 사용 사례에서 DHI가 즉시(out of the box) 작동하도록 보장하는 거예요.

자동화된 테스트와 CI/CD 통합

Docker는 CI/CD(Continuous Integration/Continuous Deployment) 파이프라인에 자동화된 테스트를 통합해요.

  • 자동 스캔: 각 이미지 빌드는 취약점 및 컴플라이언스 검사를 위한 자동 스캔을 트리거해요.
  • 재현 가능한 빌드: 빌드 프로세스는 재현 가능하게 설계되어 다양한 환경에서 일관성을 보장해요.
  • 지속적인 모니터링: Docker는 새로운 취약점을 지속적으로 모니터링하고, 보안 표준을 유지하기 위해 이미지를 그에 맞게 업데이트해요.

테스트 attestation

Docker는 각 DHI가 거친 테스트 및 검증 프로세스를 상세히 설명하는 테스트 attestation을 제공해요.

테스트 attestation 보기 및 검증

Docker Scout CLI를 사용해 이 attestation을 보고 검증할 수 있어요.

  1. 테스트 predicate 타입과 함께 docker scout attest get 명령을 사용해요.

    $ docker scout attest get \
      --predicate-type https://scout.docker.com/tests/v0.1 \
      --predicate \
      dhi.io/<image>:<tag>
    

    [!NOTE]

    이미지가 로컬 디바이스에 존재한다면 이미지 이름 앞에 registry:// 접두사를 붙여야 해요. 예를 들어 dhi.io/python 대신 registry://dhi.io/python을 사용해요.

    예를 들면:

    $ docker scout attest get \
      --predicate-type https://scout.docker.com/tests/v0.1 \
      --predicate \
      dhi.io/python:3.13
    

    여기에는 테스트 목록과 결과가 포함돼요.

    예시 출력:

        v SBOM obtained from attestation, 101 packages found
        v Provenance obtained from attestation
        {
          "reportFormat": "CTRF",
          "results": {
            "summary": {
              "failed": 0,
              "passed": 1,
              "skipped": 0,
              "start": 1749216533,
              "stop": 1749216574,
              "tests": 1
            },
            "tests": [
              {
                ...
    
  2. 테스트 attestation 서명을 검증해요. attestation이 정품이고 Docker가 서명했는지 확인하려면 다음을 실행해요.

    docker scout attest get \
      --predicate-type https://scout.docker.com/tests/v0.1 \
      --verify \
      dhi.io/<image>:<tag> --platform <platform>
    

    예시 출력:

     v SBOM obtained from attestation, 101 packages found
     v Provenance obtained from attestation
     v cosign verify registry.scout.docker.com/docker/dhi-python@sha256:70c8299c4d3cb4d5432734773c45ae58d8acc2f2f07803435c65515f662136d5 \
         --key https://registry.scout.docker.com/keyring/dhi/latest.pub --experimental-oci11
    
       Verification for registry.scout.docker.com/docker/dhi-python@sha256:70c8299c4d3cb4d5432734773c45ae58d8acc2f2f07803435c65515f662136d5 --
       The following checks were performed on each of these signatures:
         - The cosign claims were validated
         - Existence of the claims in the transparency log was verified offline
         - The signatures were verified against the specified public key
    
     i Signature payload
     ...
    

attestation이 유효하면 Docker Scout가 서명을 확인하고 일치하는 cosign verify 명령을 보여줘요.

SBOM이나 취약점 보고서 같은 다른 attestation을 보려면 Verify an image 문서를 봐요.

더 알아보기 (Learn more)