다음을 통해 공유


빠른 시작: Dependabot 및 Copacetic을 사용하여 컨테이너 이미지 종속성 업데이트 및 보호

이 빠른 시작에서는 종속성 업데이트를 자동화하고 보안 공급망 환경에서 컨테이너 이미지의 보안을 강화하는 데 도움이 되는 Dependabot 및 Copacetic을 구성하는 데 필요한 단계를 소개합니다. 이러한 도구를 사용하여 컨테이너 이미지가 항상 최신이고 안전한지 확인할 수 있습니다.

이 빠른 시작에서 다음을 수행하는 방법을 알아봅니다.

  • Dependabot을 사용하여 컨테이너 이미지 종속성 및 보안을 업데이트합니다.
    • Dependabot은 컨테이너 이미지 종속성을 최신 상태로 유지하는 프로세스를 자동화하여 취약성의 위험을 줄입니다.
  • Copacetic을 사용하여 컨테이너 이미지를 지속적으로 모니터링, 검사 및 패치합니다.
    • Copacetic은 컨테이너 이미지의 지속적인 모니터링 및 검사를 제공하여 알려진 취약성에 대해 안전하고 패치를 제공합니다.

필수 구성 요소

Dependabot을 사용하여 컨테이너 이미지 종속성 및 보안 업데이트

Dependabot 은 소프트웨어 종속성을 최신 상태로 유지하는 프로세스를 자동화하는 도구입니다. 리포지토리에서 오래된 종속성을 검색하고 끌어오기 요청을 만들어 최신 버전으로 업데이트합니다. 매일 종속성에 대한 업데이트를 검사 끌어오기 요청을 만들어 업데이트합니다. Docker 이미지를 포함하여 모든 유형의 종속성에 대한 끌어오기 요청을 만들도록 Dependabot을 구성할 수 있습니다. Dependabot을 사용하여 Dockerfiles, Kubernetes yaml 파일 및 Helm 차트 값 yaml 파일의 종속성을 자동으로 범프하여 최신 보안 패치를 가져오고 보안 위험을 줄이는 것이 좋습니다.

GitHub에서 Dependabot 사용

Dependabot에서 발생한 끌어오기 요청을 효과적으로 관리하고, GitHub Actions를 사용하여 Dependabot의 성능을 향상시키고, 일반적인 Dependabot 오류 문제를 해결하기 위한 지침 및 권장 사항을 따릅니다.

Azure DevOps에서 Dependabot 사용

지침에 따라 Azure DevOps를 사용하여 Dependabot을 구성하여 컨테이너 이미지 종속성을 최신 버전과 보안 향상으로 다시 기본.

  1. 권한 부여: 이름으로 YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME) 서비스 계정을 만들고 다음 권한을 부여합니다.
  • 강제 푸시
  • 끌어오기 요청에 참가
  • 분기 만들기

* 빌드 서비스 권한을 찾습니다.*

프로젝트 및 YOUR-ORGANIZATION-NAME 조직의 실제 이름으로 바꿔 YOUR-PROJECT-NAME 야 합니다.

  1. Dependabot 구성: Dependabot을 dependabot.yml 구성하려면 구성 파일을 리포지토리에 추가합니다. 구성 파일의 예는 다음과 같습니다.

      version: 2
      updates:
        - package-ecosystem: "docker"
          directory: "/"
          assignees:
            - "dependabot"
    

이 구성은 Docker를 사용하는 프로젝트에 대해 Dependabot을 설정하고, 루트 디렉터리("/")가 Docker 파일이 있는 위치를 지정하고, 업데이트를 처리하기 위해 Dependabot을 할당합니다. 프로젝트의 요구에 맞게 구성을 사용자 지정할 수 있습니다.

  1. Azure DevOps 파이프라인 만들기: Azure DevOps 파이프라인을 만들려면 다음 콘텐츠를 사용하여 리포지토리에 파일을 추가 azure-pipeline.yml 합니다.

     schedules:
       - cron: '0 14 * * *'
         displayName: 'Every day at 7am PST'
         branches:
           include: [main]
         always: true
    
     trigger: none
    
     jobs:
       - job:
         steps:
         - script: |
             git clone https://github.com/dependabot/dependabot-core.git
             cd dependabot-core
    
             DOCKER_BUILDKIT=1 docker build \
               --build-arg "USER_UID=$(id -u)" \
               --build-arg "USER_GID=$(id -g)" \
               -t "dependabot/dependabot-core" .
             cd ..
           displayName: build dependabot-core Docker image
    
         - script: |
             git clone https://github.com/dependabot/dependabot-script.git
             cd dependabot-script
    
             docker run -v "$(pwd):/home/dependabot/dependabot-script" -w /home/dependabot/dependabot-script dependabot/dependabot-core bundle install -j 3 --path vendor
           displayName: install dependencies
    
         - script: |
             #!/bin/bash
             SYSTEM_COLLECTIONURI_TRIM=`echo "${SYSTEM_COLLECTIONURI:22}"`
             PROJECT_PATH="$SYSTEM_COLLECTIONURI_TRIM$SYSTEM_TEAMPROJECT/_git/$BUILD_REPOSITORY_NAME"
             echo "path: $PROJECT_PATH"
    
             docker run  -v "$(pwd)/dependabot-script:/home/dependabot/dependabot-script" \
                         -w '/home/dependabot/dependabot-script' \
                         -e AZURE_ACCESS_TOKEN=$(System.AccessToken) \
                         -e PACKAGE_MANAGER=docker \
                         -e PROJECT_PATH=$PROJECT_PATH \
                         -e DIRECTORY_PATH=/ \
                         -e OPTIONS="$OPTIONS" \
                         dependabot/dependabot-core bundle exec ruby ./generic-update-script.rb
           displayName: "run dependabot"
           env:
             OPTIONS: |
               { "kubernetes_updates": true }
    

  2. 파이프라인 실행: 위의 azure-pipelines.yaml 파일에서 새 ADO 파이프라인을 만들고 확인합니다.

Dependabot은 다음과 같은 다양한 시나리오에서 컨테이너 이미지 종속성을 업데이트할 수 있습니다.

  • Dockerfile
  • Kubernetes YAML
  • Helm values.yaml

참고 항목

이 구문을 사용하면 Dependabot이 구성 파일 내에서 컨테이너 이미지 종속성을 식별하고 업데이트하여 최신 버전 및 보안 패치를 최신 상태로 유지할 수 있습니다.

구성 파일에서 이미지를 지정할 때 다음 구문을 사용합니다.


# Dockerfile
foo:
  image:
    repository: sql/sql
    tag: 1.2.3
    registry: docker.io

# Helm values.yaml
foo:
  image:
    repository: sql/sql
    tag: 1.2.3
    registry: docker.io

Helm values.yaml또는 필드를 사용하여 version 이미지 버전을 지정할 수 있습니다.

foo:
  image:
    repository: sql/sql
    version: 1.2.3

Copacetic을 사용하여 컨테이너 이미지를 지속적으로 모니터링, 검사 및 패치

코파(Copacetic )는 인기 있는 스캐너 도구의 취약성 검사 결과를 감안할 때 컨테이너 이미지의 Linux OS 패키지 취약성을 직접 패치하는 Microsoft 지원 CNCF 오픈 소스 프로젝트입니다. Copacetic을 사용하면 전체 다시 빌드를 위해 업스트림 않고도 컨테이너를 신속하게 패치할 수 있습니다. 이렇게 하면 컨테이너 이미지가 프로덕션 환경에 빠르게 다시 배포되는 데 도움이 됩니다. Copacetic은 Linux OS 취약성에만 해당합니다. 앱 수준 취약성의 경우 이미지를 빌드하기 전에 패치를 수행해야 합니다.

Copacetic 사용

  1. Copacetic에 대한 빠른 시작 가이드에 따라 취약성 검사 결과를 활용하여 컨테이너 이미지를 패치하는 지침을 제공합니다.

  2. Copacetic을 사용하기 위한 샘플 Azure DevOps 파이프라인 구성 파일에 대한 샘플 ADO 파이프라인을 검토합니다. 파이프라인은 COpacetic을 CI/CD 워크플로에 통합하도록 설계되어 취약성에 대한 컨테이너 이미지의 지속적인 모니터링, 검사 및 패치를 허용합니다.

  3. Copacetic을 Github Actions 워크플로에 통합하여 Copacetic Action을 사용하여 이미지 취약성을 패치할 수도 있습니다. 이 작업은 연결된 취약성 보고서를 사용하여 리포지토리에 대해 지정된 이미지 집합을 패치합니다.

다음 단계