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


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

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

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

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

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

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

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

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

Следуйте инструкциям и рекомендациям по эффективному управлению запросами на вытягивание, создаваемыми Зависимостями, с помощью GitHub Actions для повышения производительности зависимостей и устранения распространенных ошибок зависимостей.

  • Настройте Dependabot с помощью GitHub здесь.

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

Следуйте инструкциям по настройке Dependabot с помощью Azure DevOps, чтобы зависимости образа контейнера оставались текущими с последними версиями и улучшениями безопасности.

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

* Найдите разрешения службы сборки.*

Обязательно замените YOUR-PROJECT-NAMEYOUR-ORGANIZATION-NAME и фактические имена проекта и организации.

  1. Настройка Dependabot: Чтобы настроить Dependabot, добавьте dependabot.yml файл конфигурации в репозиторий. Ниже приведен пример того, как может выглядеть файл конфигурации:

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

Эта конфигурация настраивает Dependabot для проекта, использующего Docker, указывая, что корневой каталог ("/") находится в расположении файлов 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. Запустите конвейер: создайте и проверьте новый конвейер ADO из файла выше azure-pipelines.yaml .

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

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

  1. Следуйте краткому руководству для Copacetic содержит инструкции по исправлению образов контейнеров, используя результаты сканирования уязвимостей.

  2. Просмотрите пример конвейера ADO для примера файла конфигурации конвейера Azure DevOps для использования Copacetic. Конвейер предназначен для интеграции Copacetic в рабочий процесс CI/CD, что позволяет непрерывно отслеживать, проверять и устанавливать исправления образов контейнеров для уязвимостей.

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

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