튜토리얼: Docker 컨테이너 취약점 스캔

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

컨테이너 스캔을 사용하여 컨테이너 레지스트리에 저장된 컨테이너 이미지의 취약점을 확인할 수 있습니다.

컨테이너 스캔 구성은 프로젝트의 파이프라인 구성에 추가됩니다. 이 튜토리얼에서는 다음을 수행합니다.

  1. 새 프로젝트 생성.
  2. 프로젝트에 Dockerfile 추가. 이 Dockerfile에는 Docker 이미지를 생성하는 데 필요한 최소한의 구성이 포함됩니다.
  3. 새 프로젝트에 파이프라인 구성 작성. 이 구성에서는 Dockerfile에서 Docker 이미지를 작성하고 컨테이너 레지스트리에 이미지를 푸시한 후 Docker 이미지의 취약점을 스캔합니다.
  4. 보고된 취약점 확인.
  5. Docker 이미지 업데이트 및 업데이트된 이미지 스캔.

새 프로젝트 생성

새 프로젝트를 생성하려면 다음을 수행하세요.

  1. 왼쪽 사이드바의 맨 위에서 새로 만들기 () 및 새 프로젝트/저장소를 선택합니다.
  2. 빈 프로젝트 만들기를 선택합니다.
  3. 프로젝트 이름란에 튜토리얼 컨테이너 스캔 프로젝트를 입력합니다.
  4. 프로젝트 URL에서 프로젝트에 대한 네임스페이스를 선택합니다.
  5. 프로젝트 만들기를 선택합니다.

새 프로젝트에 Dockerfile 추가

컨테이너 스캔을 위한 무언가를 제공하려면 매우 최소한의 구성으로 Dockerfile을 작성합니다.

  1. 튜토리얼 컨테이너 스캔 프로젝트 프로젝트에서 > 새 파일을 선택합니다.
  2. 파일 이름을 Dockerfile로 입력하고 파일에 다음 콘텐츠를 제공합니다.

    FROM hello-world:latest
    

    Dockerfile에서 생성된 Docker 이미지는 hello-world Docker 이미지를 기반으로 합니다.

  3. 변경 사항 커밋을 선택합니다.

파이프라인 구성 작성

이제 파이프라인 구성을 작성할 준비가 되었습니다. 파이프라인 구성은 다음을 수행합니다.

  1. Dockerfile 파일에서 Docker 이미지를 빌드하고 Docker 이미지를 컨테이너 레지스트리에 푸시합니다. build-image 작업은 CI/CD 서비스Docker-in-Docker를 사용하여 Docker 이미지를 빌드합니다. 또한 파이프라인에서 kaniko를 사용하여 Docker 이미지를 빌드할 수도 있습니다.
  2. 컨테이너-스캐닝.gitlab-ci.yml 템플릿을 포함하여 컨테이너 레지스트리에 저장된 Docker 이미지를 스캔합니다.

파이프라인 구성을 작성하려면 다음을 수행하세요.

  1. 프로젝트의 루트 디렉토리에서 > 새 파일을 선택합니다.
  2. 파일 이름을 .gitlab-ci.yml로 입력하고 파일에 다음 콘텐츠를 제공합니다.

    include:
      - template: Jobs/Container-Scanning.gitlab-ci.yml
    
    container_scanning:
      variables:
        CS_IMAGE: $CI_REGISTRY_IMAGE/tutorial-image
    
    build-image:
      image: docker:24.0.2
      stage: build
      services:
        - docker:24.0.2-dind
      script:
        - docker build --tag $CI_REGISTRY_IMAGE/tutorial-image --file Dockerfile .
        - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
        - docker push $CI_REGISTRY_IMAGE/tutorial-image
    
  3. 변경 사항 커밋을 선택합니다.

파일을 커밋하면이 구성으로 새 파이프라인이 시작됩니다. 완료되면 새로운 스캔 결과를 확인할 수 있습니다.

보고된 취약점 확인

스캔에 대한 취약점은 해당 스캔을 실행한 파이프라인에 있습니다. 보고된 취약점을 확인하려면 다음을 수행하세요.

  1. CI/CD > 파이프라인을 선택한 다음 가장 최근의 파이프라인을 선택합니다. 이 파이프라인은 test 단계에 container_scanning 작업이 포함되어야 합니다.
  2. container_scanning 작업이 성공하면 보안 탭을 선택합니다. 취약점이 발견된 경우 해당 페이지에 나열됩니다.

Docker 이미지 업데이트

hello-world:latest를 기반으로 한 Docker 이미지는 취약점을 보여주기 어렵습니다. 취약점을 보고하는 예제로는 다음을 수행하세요.

  1. 프로젝트의 루트 디렉토리에서 기존 Dockerfile 파일을 선택합니다.
  2. 편집을 선택합니다.
  3. FROM hello-world:latest를 다른 Docker 이미지로 교체합니다. FROM 명령어에 대한 최상의 Docker 이미지는 다음과 같습니다:
    • 운영 체제 패키지. 예: Debian, Ubuntu, Alpine, 또는 Red Hat.
    • 프로그래밍 언어 패키지. 예: NPM 패키지 또는 Python 패키지.
  4. 변경 사항 커밋을 선택합니다.

파일을 커밋하면이 업데이트된 Dockerfile로 새로운 파이프라인이 시작됩니다. 완료되면 새로운 스캔 결과를 확인할 수 있습니다.