Close

Интеграция Snyk и Bitbucket Pipelines в целях внедрения DevSecOps

Фотография Саймона Мейпла
Саймон Мейпл

Региональный технический директор, Snyk

Достижение целей DevSecOps путем интеграции Snyk с Bitbucket Pipelines и Jira.

Время

5 минут на прочтение.

Аудитория

Разработчики, команды по обеспечению безопасности/приложениям и инженеры DevOps/DevSecOps.

Обязательные условия

У вас есть аккаунт Snyk. Начните работу здесь.

У вас есть аккаунт Atlassian Bitbucket. Войдите в систему или начните работу здесь.

В этом учебном руководстве описывается, как защитить рабочий процесс сборки в Bitbucket Pipelines с помощью Snyk. Важным шагом в обеспечении безопасности среды является сканирование и анализ как приложения, так и проекта контейнера на базе Linux на предмет известных уязвимостей. Это позволяет выявить уязвимости в защите и смягчить их последствия. Упражнения в этом учебном руководстве помогут защитить ваше приложение и контейнер с помощью решения Snyk Pipe for Bitbucket Pipelines, которое сканирует файл манифеста приложения и базовый образ контейнера на предмет зависимостей.

В учебном руководстве «Как Snyk и Bitbucket Cloud создают условия для внедрения DevSecOps» основное внимание уделяется зависимостям приложения. Однако если сканировать также базовый образ контейнера, можно обнаружить:

  • пакеты операционной системы (ОС), установленные и управляемые менеджером пакетов;
  • основные бинарные пакеты — слои, установленные без помощи менеджера пакетов.

На основании этих результатов Snyk выдает советы и рекомендации, в том числе о следующем.

  • Источники уязвимостей в пакетах ОС и основных бинарных пакетах
  • Сведения об обновлении базового образа или рекомендации по повторной сборке образа
  • Слой в Dockerfile, в который был помещен затронутый пакет
  • Исправленная версия операционной системы и основных бинарных пакетов

Сканирование приложения в Bitbucket Pipelines

В файле bitbucket-pipelines.yml определяется конфигурация сборок Bitbucket Pipelines. Если вы новичок в Bitbucket Pipelines, подробнее о том, как начать работу, см. здесь.

В этом учебном руководстве представлен пример файла bitbucket-pipelines.yml, в котором содержатся отдельные этапы, привязанные к рабочему процессу. Начнем со сканирования приложения и создания образа Docker, а затем выполним сканирование образа контейнера. Ниже более подробно рассматривается этап сканирования приложения:

scan-app: &scan-app
 - step:
     name: "Scan open source dependencies"
     caches:
       - node
     script:
       - pipe: snyk/snyk-scan:0.4.3
         variables:
           SNYK_TOKEN: $SNYK_TOKEN
           LANGUAGE: "npm"
           PROJECT_FOLDER: "app/goof"
           TARGET_FILE: "package.json"
           CODE_INSIGHTS_RESULTS: "true"
           SEVERITY_THRESHOLD: "high"
           DONT_BREAK_BUILD: "true"
           MONITOR: "false"


В этом примере для сканирования приложения используется элемент конвейера Snyk Scan. Исходный код содержит полное определение на языке YAML всех поддерживаемых переменных, но для нашей цели нужны только переменные, включенные в этот фрагмент.

Рассмотрим более подробно некоторые из этих переменных.

1. SNYK_TOKEN (Токен Snyk) передается в элемент конвейера как переменная репозитория, предварительно определенная в модуле [Bitbucket Configuration].

2. PROJECT_FOLDER (Папка проекта) — это папка, в которой находится проект. Обычно она имеет значение умолчанию. Однако в этом примере мы присваиваем ей значение app/goof и передаем как артефакт на другие этапы конвейера.

3. CODE_INSIGHTS_RESULTS (Результаты Code Insights). По умолчанию эта переменная имеет значение false. Но мы хотим создать отчет Code Insights с результатами тестирования Snyk, поэтому присваиваем ей значение true.

4. SEVERITY_THRESHOLD (Пороговое значение уровня опасности) сообщает о проблемах, уровень опасности которых равен заданному порогу или превышает его. Значение по умолчанию равно low (низкий). Однако в данном случае нас интересует только уровень опасности high (высокий), поэтому мы определяем переменную соответствующим образом.

5. DONT_BREAK_BUILD (Не прерывать сборку). По умолчанию эта переменная, как и ожидалось, имеет значение false. При обычных обстоятельствах вы захотите прервать сборку, если будут обнаружены проблемы. Однако для целей данного упражнения мы присвоим переменной значение true.

Восклицательный знак

С помощью нового приложения Snyk Security Connect на Atlassian Marketplace можно запускать сканирование безопасности Snyk в запросах pull и просматривать результаты в Code Insights. Начать работу очень просто, а приложение можно установить несколькими щелчками мыши.

Сканирование образов контейнеров

Диаграмма процесса Bitbucket

К 2022 году более 75 процентов международных организаций будут выполнять в рабочей среде контейнерные приложения (данные Gartner). Наряду с широким распространением контейнеров наблюдается всплеск их уязвимостей. Так, в 2018 году количество выявленных уязвимостей операционных систем увеличилось в четыре раза. И в то же время 80 процентов разработчиков заявляют, что не тестируют образы контейнеров во время разработки. Они либо не считают это своей обязанностью, либо привыкли, что проблемы устраняет кто-то другой. Из-за этого масштабирование безопасности контейнеров становится сложной задачей для быстрорастущих компаний.

Сканирование образа контейнера в конвейере

Как и в предыдущем разделе, посвященном сканированию приложения, в этом разделе основное внимание уделяется тому, как настроить файл bitbucket-pipelines.yml, чтобы создать образ Docker для приложения, сканировать образ и затем отправить его в реестр. Ниже более подробно рассматривается этап сканирования образа контейнера:

scan-push-image: &scan-push-image
 - step:
     name: "Scan and push container image"
     services:
       - docker
     script:
       - docker build -t $IMAGE ./app/goof/
       - docker tag $IMAGE $IMAGE:${BITBUCKET_COMMIT}
       - pipe: snyk/snyk-scan:0.4.3
         variables:
           SNYK_TOKEN: $SNYK_TOKEN
           LANGUAGE: "docker"
           IMAGE_NAME: $IMAGE
           PROJECT_FOLDER: "app/goof"
           TARGET_FILE: "Dockerfile"
           CODE_INSIGHTS_RESULTS: "true"
           SEVERITY_THRESHOLD: "high"
           DONT_BREAK_BUILD: "true"
           MONITOR: "false"


Здесь создается образ контейнера и выполняется его маркировка, после чего образ контейнера сканируется с использованием элемента конвейера Snyk Scan. Значения переменных CODE_INSIGHTS_RESULTS, SEVERITY_THRESHOLD и DONT_BREAK_BUILD остаются прежними. Кроме того, передается несколько дополнительных поддерживаемых переменных, которые относятся к Snyk Pipe, чтобы выполнить запрос на сканирование образа контейнера вместо сканирования приложения. А именно: переменной LANGUAGE (Язык) присваивается значение docker, объявляется переменная IMAGE_NAME (Имя образа) и передается соответствующая переменная репозитория, а переменной TARGET_FILE (Целевой файл) присваивается значение Dockerfile.

Теперь ваш конвейер сканирует образ контейнера на наличие известных уязвимостей, а также код приложения.

См. другие интеграции для Atlassian Open DevOps

Simon Maple
Simon Maple

Simon Maple is the Field CTO at Snyk, a Java Champion since 2014, Virtual JUG founder, and London Java Community co-leader. He is an experienced speaker, with a passion for community. When not traveling, Simon enjoys spending quality time with his family, cooking and eating great food.


Поделитесь этой статьей
Следующая тема

Рекомендуемые статьи

Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.

Рисунок: DevOps

Сообщество DevOps

Рисунок: DevOps

Образовательные программы DevOps

Рисунок схемы

Начните работу бесплатно

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up