Поделиться через


Краткое руководство. Обновление зависимостей образа контейнера и безопасность с помощью Dependabot и Copacetic

В этом кратком руководстве мы рассмотрим процесс настройки и использования Dependabot и Copacetic для упрощения, обслуживания и обновления обновлений зависимостей программного обеспечения и повышения безопасности образа контейнера в цепочке безопасных поставок.

Эти средства автоматизируют процесс, гарантируя, что образы контейнеров всегда являются текущими и безопасными.

Из этого краткого руководства вы узнаете, как выполнять следующие задачи:

Обновите зависимости образа контейнера и безопасность с помощью Dependabot. Непрерывно отслеживайте, сканируйте и исправляйте образы контейнеров с помощью Copa.

Необходимые компоненты

Обновление зависимостей образа контейнера и безопасности с помощью Dependabot

Dependabot — это средство, которое автоматизирует процесс поддержания зависимостей программного обеспечения в актуальном состоянии. Он работает, сканируя репозиторий для устаревших зависимостей и создавая запросы на вытягивание, чтобы обновить их до последней версии. Он проверка обновления зависимостей ежедневно и создает запросы на вытягивание для их обновления. Можно настроить Dependabot для создания запросов на вытягивание для всех типов зависимостей, включая образы Docker. Мы рекомендуем использовать dependabot для автоматического удара зависимостей в файлах Dockerfiles, yaml-файлах Kubernetes и значениях диаграмм Helm, чтобы получить последние исправления безопасности и снизить риски безопасности.

Использование Dependabot с GitHub

  • Следуйте инструкциям по настройке Dependabot с помощью GitHub здесь

Использование Dependabot с Azure DevOps

  • Следуйте инструкциям по настройке Dependabot с помощью Azure DevOps:
  1. Предоставьте разрешения , создав учетную запись службы с именем YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME) со следующими разрешениями:

    -Force Push -Contribute to pull requests -Create branch

Создание разрешений службы

  1. Настройте Dependabot , добавив файл конфигурации, аналогичный dependabot этому примеру:

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

  2. Создайте конвейер Azure DevOps, добавив azure-pipeline.yaml файл со следующим содержимым:

     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 }
    

  3. Запустите конвейер Create and verify new ADO pipeline from above azure-pipelines.yaml file.

В настоящее время Dependabot поддерживает обновление зависимостей образа контейнера в различных сценариях, включая Dockerfile, Kubernetes YAML и Helm values.yaml. При указании изображений в файлах конфигурации можно следовать этому синтаксису:

-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 (copa) — это проект, поддерживаемый корпорацией Майкрософт с открытым исходным кодом CNCF, который напрямую исправляет уязвимости пакетов ОС Linux в образах контейнеров, учитывая результаты сканирования уязвимостей из популярных средств сканера. Copacetic позволяет быстро исправлять контейнеры без вышестоящий для полного перестроения. Это поможет образам контейнеров быстро развернуться в рабочей среде. Copacetic предназначен только для уязвимостей ОС Linux. Для уязвимостей на уровне приложения необходимо выполнить исправления перед созданием образа.

Использование Copacetic

  1. Следуйте краткому руководству по началу работы с Copa.

  2. Пример конвейера ADO:

    -Пример конвейера Azure DevOps можно найти здесь.

Копа также можно интегрировать в рабочие процессы Github Actions для исправления уязвимостей образа с помощью действия Copacetic. Это действие исправляет набор назначенных образов для репозитория с помощью связанных отчетов об уязвимостях.

Следующие шаги