Российский DevSecOps: как собрать автономный CI/CD-стек

DevSecOps в России, это не просто перенос западных практик с заменой GitHub на GitLab. Это пересмотр всей цепочки: от выбора инструментов, которые не завязаны на внешние SaaS, до построения отечественных пайплайнов, способных работать при прерывании сетевых соединений. Главный парадокс: чтобы действительно стать устойчивыми, нам нужно уйти от копирования готовых решений и начать собирать свои, даже если они кажутся менее удобными.”

Почему западный DevSecOps не работает «как есть» в России

Типичная картина: команда внедряет методологию, беря за основу статьи и курсы, построенные вокруг GitHub Actions, Jenkins с плагинами из западных репозиториев, и сканирующих сервисов вроде Snyk или Checkmarx SaaS. На первом этапе всё работает, пока не сталкивается с реальностью российского ИТ-ландшафта — санкционными ограничениями, требованиями регуляторов и необходимостью обеспечения суверенитета технологического стека.

Первая и самая очевидная преграда — зависимость от зарубежных SaaS-сервисов. Их использование для хранения кода, сборки или анализа безопасности может быть прямо запрещено внутренними политиками компаний, работающих с гостайной или персональными данными по 152-ФЗ. Даже если сервис технически доступен, его нельзя сертифицировать по требованиям ФСТЭК или ФСБ. Решение — переход на self-hosted решения, что автоматически усложняет инфраструктуру и требует собственных компетенций для поддержки.

Вторая проблема — обновления и зависимости. Многие популярные opensource-инструменты для безопасности (сканеры уязвимостей в зависимостях, анализаторы SAST) при установке «из коробки» пытаются связаться с внешними базами данных уязвимостей (например, NVD). В условиях нестабильного внешнего подключения такие проверки начинают «падать», замедляя или ломая весь пайплайн. Необходима настройка локальных зеркал и синхронизация устаревших, но стабильных версий.

Третье, менее очевидное, — культурный разрыв. Западные практики DevSecOps часто предполагают высокую степень автоматизации и делегирования командам ответственности за безопасность. В российской регуляторной среде, особенно в госсекторе и финтехе, сохраняется жёсткий waterfall-подход с отделом ИБ, который проводит ручной аудит и выдаёт заключения. Внедрение автоматизированных проверок в CI/CD часто воспринимается как угроза их контролю, а не как помощь.

Собираем отечественный стек: от GitLab до анализа кода

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

Система контроля версий: почему GitLab, а не отечественный аналог

Несмотря на наличие российских решений (например, на базе Gitea или собственных разработок), GitLab Community Edition (CE) часто становится де-факто стандартом. Причины:

  • Полная возможность развёртывания on-premise. Весь функционал, включая CI/CD, доступен внутри периметра.
  • Широкая распространённость и знакомство разработчиков. Это снижает порог вхождения и сопротивление команды.
  • Активное русскоязычное сообщество и документация. Проблемы, специфичные для изолированных сетей, уже обсуждались и имеют решения.
  • Гибкость. GitLab можно интегрировать практически с любым внутренним инструментом через API или webhooks.

Ключевой момент при развёртывании — отключение всех функций телеметрии и внешних вызовов на этапе установки, а также настройка зеркал для обновлений образов Docker из внутреннего registry.

Статический анализ безопасности (SAST): SonarQube как основа

SonarQube с открытыми плагинами для анализа кода (SonarScanner) — ещё один краеугольный камень. Его преимущество — поддержка десятков языков программирования и возможность работы без выхода в интернет после первоначальной настройки.

Типичные ошибки при внедрении:

  • Использование только встроенных правил. Для эффективного поиска уязвимостей, релевантных для российского ПО (например, криптография из отечественных библиотек), необходимо создавать и подключать собственные правила анализа (custom rules).
  • Попытка включить все проверки сразу. Это приводит к тысячам предупреждений, которые разработчики начинают игнорировать. Начинать нужно с критических уязвимостей (OWASP Top 10, адаптированный под российский контекст) и постепенно расширять правила.
  • Отсутствие интеграции с процессом. Отчёты SonarQube должны не просто создаваться, а «ломать» сборку при нахождении критических проблем (Quality Gate). Это требует тонкой настройки порогов.

Отечественные CI/CD-системы: замена Jenkins и GitLab CI

Хотя GitLab CI мощный, некоторые организации по требованиям регуляторов или из соображений суверенитета переходят на российские аналоги. Часто это не готовые продукты «под ключ», а сборные решения.

Пример стека, который можно собрать самостоятельно:

  1. Оркестратор задач: вместо Jenkins можно использовать более лёгкий и контейнеризированный Drone CI или простой агент на основе собственных скриптов. Ключевое требование — возможность запуска в изолированной сети.
  2. Артефакториум: Nexus Repository Manager или Harbor для хранения собранных образов Docker и зависимостей. Они позволяют создать полное локальное зеркало всех необходимых для сборки библиотек.
  3. Система управления конфигурациями: для развёртывания инфраструктуры пайплайнов подходит Ansible, который остаётся доступным и не требует облачных провайдеров.

Главная сложность здесь — не установка, а поддержание этого стека в рабочем состоянии: мониторинг, обновления, резервное копирование. Это требует выделенной команды или хотя бы ответственного инженера.

Строим пайплайн, который выживет в российских условиях

Цель — создать цепочку, которая будет стабильно работать при отсутствии выхода в интернет, использовать только внутренние ресурсы и при этом выполнять все необходимые проверки безопасности.

Рассмотрим этапы на примере GitLab CI/CD с интеграцией SonarQube.

stages:
  - build
  - test
  - security_checks
  - deploy

variables:
  SONAR_HOST_URL: 'http://internal-sonar.company.local:9000'
  # Указываем на внутренний сервер

build_job:
  stage: build
  image: internal-registry.company.local/base-images/maven:3.8-openjdk-11 # Локальный образ
  script:
    - mvn clean package -DskipTests
  artifacts:
    paths:
      - target/*.jar

sonarqube_check:
  stage: security_checks
  image: internal-registry.company.local/sonar-scanner-cli:latest
  variables:
    SONAR_USER_HOME: '${CI_PROJECT_DIR}/.sonar' # Кэширование внутри проекта
  script:
    - sonar-scanner
      -Dsonar.projectKey=${CI_PROJECT_NAME}
      -Dsonar.sources=.
      -Dsonar.host.url=${SONAR_HOST_URL}
      -Dsonar.login=${SONAR_TOKEN} # Токен из переменных GitLab
  allow_failure: false # При критической ошибке пайплайн падает

Обратите внимание на ключевые моменты:

  • Все Docker-образы (image) берутся из внутреннего registry (internal-registry.company.local). Это гарантирует, что сборка не «упадёт» из-за недоступности Docker Hub.
  • Адрес SonarQube (SONAR_HOST_URL) — внутренний. Никаких вызовов на внешние SaaS.
  • Параметр allow_failure: false для этапа sonarqube_check делает проверку блокирующей. Если SonarQube вернёт статус, что Quality Gate не пройден (например, найдена критическая уязвимость), пайплайн остановится, и артефакт не попадёт на следующие этапы.

Помимо SAST, в этап security_checks следует добавить:

  1. SCA (Software Composition Analysis): сканирование зависимостей на уязвимости. Используйте OWASP Dependency-Check, но с предварительно загруженной локальной копией базы NVD. Скрипт должен сначала обновить локальную базу из внутреннего источника, а затем провести анализ.
  2. DAST (для веб-приложений): можно использовать OWASP ZAP в контейнере, запуская его против развёрнутого на тестовом стенде приложения. Это также требует полностью автономной настройки.
  3. Проверка секретов: инструменты вроде detect-secrets или GitLeaks для поиска ключей, паролей и токенов, случайно закоммиченных в код.

Интеграция с регуляторными требованиями: 152-ФЗ и ФСТЭК

DevSecOps-пайплайн может не только улучшить безопасность, но и помочь в формальном соответствии требованиям регуляторов.

Например, приказ ФСТЭК России №239 обязывает проводить анализ защищённости кода при разработке. Вместо разового дорогостоящего аудита перед сдачей системы, интегрированный SonarQube с правильно настроенными правилами выполняет эту функцию непрерывно. Важно документировать сам факт проведения такого анализа для каждого билда — этому способствуют артефакты пайплайна (отчёты) и его неизменяемые логи.

Требования 152-ФЗ к защите персональных данных также могут быть частично автоматизированы. Можно создать правила в статическом анализаторе, которые ищут в коде паттерны, указывающие на неправильную обработку ПДн (например, хардкод проверок или неиспользование утверждённых методов шифрования).

Главное — понимать, что пайплайн не заменяет полностью процедуру аттестации или аудита, но становится их технической основой, предоставляя регуляторам структурированные и воспроизводимые доказательства проведения работ по безопасности.

Организационные сложности и как их преодолеть

Техническая настройка — только половина дела. Чаще всего внедрение DevSecOps в России упирается в человеческий фактор.

  • Сопротивление разработчиков: дополнительные проверки удлиняют пайплайн. Решение — не просто «ломать» сборку, а сразу давать понятные рекомендации по исправлению. Интегрируйте отчёсы SonarQube прямо в Merge Request в GitLab, чтобы проблему было видно в контексте кода.
  • Конфликт с отделом ИБ: автоматизация может восприниматься как попытка лишить отдел ИБ его функций. Нужно позиционировать пайплайн как инструмент, который избавляет их от рутины (проверки тривиальных уязвимостей) и позволяет сосредоточиться на сложных угрозах и архитектуре. Включите их в процесс настройки правил и порогов срабатывания.
  • Нехватка экспертизы: поддержка всего стека требует знаний по администрированию GitLab, SonarQube, container registry. Инвестируйте в обучение одного-двух инженеров или начните с максимально простой конфигурации, постепенно её усложняя.

Вывод: устойчивость вместо удобства

Российский DevSecOps, это путь к технологической устойчивости. Изначально он требует больше усилий, чем подключение к облачным сервисам: нужно разворачивать инфраструктуру, настраивать локальные зеркала, писать свои правила анализа. Однако в долгосрочной перспективе такой подход даёт полный контроль над цепочкой разработки и её безопасностью, независимость от внешних факторов и реальное соответствие жёстким требованиям регуляторов. Начинать стоит не с поиска идеального аналога западного стека, а с ответа на вопрос: «Какой минимальный набор проверок безопасности мы можем гарантированно выполнять в наших условиях?» Построение на этом фундаменте окажется прочнее, чем попытка скопировать чужую, но нефункциональную здесь, модель.

Оставьте комментарий