Краткое руководство. Обновление зависимостей образа контейнера и безопасность с помощью Dependabot и Copacetic
В этом кратком руководстве мы рассмотрим процесс настройки и использования Dependabot и Copacetic для упрощения, обслуживания и обновления обновлений зависимостей программного обеспечения и повышения безопасности образа контейнера в цепочке безопасных поставок.
Эти средства автоматизируют процесс, гарантируя, что образы контейнеров всегда являются текущими и безопасными.
Из этого краткого руководства вы узнаете, как выполнять следующие задачи:
Обновите зависимости образа контейнера и безопасность с помощью Dependabot. Непрерывно отслеживайте, сканируйте и исправляйте образы контейнеров с помощью Copa.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Последняя версия Azure CLI установлена и настроена для вашей подписки.
- Существующий Реестр контейнеров Azure (ACR) в подписке.
Обновление зависимостей образа контейнера и безопасности с помощью Dependabot
Dependabot — это средство, которое автоматизирует процесс поддержания зависимостей программного обеспечения в актуальном состоянии. Он работает, сканируя репозиторий для устаревших зависимостей и создавая запросы на вытягивание, чтобы обновить их до последней версии. Он проверка обновления зависимостей ежедневно и создает запросы на вытягивание для их обновления. Можно настроить Dependabot для создания запросов на вытягивание для всех типов зависимостей, включая образы Docker. Мы рекомендуем использовать dependabot для автоматического удара зависимостей в файлах Dockerfiles, yaml-файлах Kubernetes и значениях диаграмм Helm, чтобы получить последние исправления безопасности и снизить риски безопасности.
Использование Dependabot с GitHub
- Следуйте инструкциям по настройке Dependabot с помощью GitHub здесь
Использование Dependabot с Azure DevOps
- Следуйте инструкциям по настройке Dependabot с помощью Azure DevOps:
Предоставьте разрешения , создав учетную запись службы с именем
YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME)
со следующими разрешениями:-Force Push -Contribute to pull requests -Create branch
Настройте Dependabot , добавив файл конфигурации, аналогичный
dependabot
этому примеру:version: 2 updates: - package-ecosystem: "docker" directory: "/" assignees: - "dependabot"
Создайте конвейер 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 }
Запустите конвейер 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
Следуйте краткому руководству по началу работы с Copa.
Пример конвейера ADO:
Копа также можно интегрировать в рабочие процессы Github Actions для исправления уязвимостей образа с помощью действия Copacetic. Это действие исправляет набор назначенных образов для репозитория с помощью связанных отчетов об уязвимостях.