Статьи
Обучающие материалы
Интерактивные руководства
Интеграция 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. Начать работу очень просто, а приложение можно установить несколькими щелчками мыши.
Сканирование образов контейнеров
К 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
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.