Plumber: инструмент с открытым кодом для проверки конвейеров GitLab CI/CD на соответствие требованиям

Конфигурации GitLab CI/CD со временем часто накапливают отклонения от базовых стандартов безопасности. Образы контейнеров фиксируются на изменяемых тегах, ветки теряют настройки защиты, а обязательные шаблоны пропадают. Инструмент с открытым исходным кодом Plumber автоматизирует обнаружение таких ситуаций, сканируя конфигурацию пайплайна и настройки репозитория напрямую.

Что проверяет Plumber

Plumber читает файл .gitlab-ci.yml проекта и обращается к GitLab API для формирования отчёта о соответствии. Он включает восемь проверок, которые команды могут включать, отключать или настраивать через файл .plumber.yaml в своём репозитории.

Проверки охватывают теги образов контейнеров (выявление изменяемых ссылок, таких как latest, dev, main и master), реестры образов контейнеров (подтверждение, что образы поступают из источников, определённых как доверенные в конфигурации) и защиту веток (проверка, применяют ли критические ветки минимальные уровни доступа и блокируют ли принудительные пуши).

Дополнительные проверки подтверждают, что задания пайплайна берутся из подключаемых файлов или компонентов, а не определены прямо в CI-файле, что подключённые шаблоны и компоненты актуальны, что версии для подключений не используют изменяемые идентификаторы, а также что обязательные компоненты или шаблоны присутствуют.

Инструмент подключается к экземпляру GitLab через API с использованием персонального токена доступа. Токену требуются области видимости read_api и read_repository, и он должен принадлежать пользователю с уровнем доступа «Maintainer» или выше в сканируемом проекте.

Два пути развёртывания

Plumber может работать как автономный исполняемый файл командной строки или как компонент GitLab CI, добавленный напрямую в пайплайн. CLI-режим подходит для локального тестирования или разовых проверок. Режим CI-компонента запускается автоматически при каждом выполнении пайплайна для ветки по умолчанию, тегов и открытых merge request'ов.

Добавление Plumber в качестве CI-компонента требует двух строк в файле .gitlab-ci.yml и настройки переменной GITLAB_TOKEN в параметрах CI/CD проекта. Настраиваемый порог (по умолчанию 100 процентов) определяет, пройдёт ли задание или завершится неудачей. Команды могут понижать порог на этапе внедрения и ужесточать его со временем.

Результат выводится в виде раскрашенного отчёта в терминале и, опционально, в виде JSON-файла, пригодного для аудита или интеграции с другими инструментами.

Установка и доступность

Plumber написан на языке Go и распространяется под лицензией Mozilla Public License 2.0. Готовые исполняемые файлы доступны для Linux, macOS и Windows. Установка возможна через Homebrew, Mise, прямое скачивание бинарных файлов и Docker. Сборка из исходного кода требует Go версии 1.24 или новее.

Организации, использующие собственные экземпляры GitLab, могут импортировать репозиторий Plumber в свою инфраструктуру и опубликовать его как ресурс каталога CI/CD для внутреннего использования.

Plumber доступен бесплатно на GitHub.

Обязательно к прочтению:

  • 40 инструментов с открытым исходным кодом, меняющих подходы к защите инфраструктуры
  • Время и стоимость сканирования прошивок, а также где команды запускают EMBA

Подпишитесь на ежемесячную рассылку Help Net Security без рекламы, чтобы быть в курсе самых важных инструментов кибербезопасности с открытым исходным кодом. Подписаться можно здесь!