튜토리얼: Docker 컨테이너의 취약점 검사하기

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

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

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

  1. 새 프로젝트 만들기.
  2. 프로젝트에 Dockerfile 추가하기. 이 Dockerfile에는 Docker 이미지를 만드는 데 필요한 최소한의 구성이 포함됩니다.
  3. 새 프로젝트의 파이프라인 구성 만들기. 이 파이프라인은 Dockerfile에서 Docker 이미지를 작성하고 컨테이너 레지스트리에 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 이미지를 빌드합니다. 파이프라인에서 Docker 이미지를 빌드하려면 kaniko를 사용할 수도 있습니다.
  2. 컨테이너 레지스트리에 저장된 Docker 이미지를 스캔하기 위해 Container-Scanning.gitlab-ci.yml 템플릿을 포함합니다.

파이프라인 구성을 만들려면 다음을 수행합니다.

  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 지시문에 다른 Docker 이미지로 변경합니다. 컨테이너 스캔을 보여줄 가장 좋은 Docker 이미지는 다음이 있습니다.
    • 운영 체제 패키지. Debian, Ubuntu, Alpine, 또는 Red Hat에서 가져온 패키지 등.
    • 프로그래밍 언어 패키지. 예: NPM 패키지 또는 Python 패키지 등.
  4. 변경 사항 커밋을 선택합니다.

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