“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 мощный, некоторые организации по требованиям регуляторов или из соображений суверенитета переходят на российские аналоги. Часто это не готовые продукты «под ключ», а сборные решения.
Пример стека, который можно собрать самостоятельно:
- Оркестратор задач: вместо Jenkins можно использовать более лёгкий и контейнеризированный Drone CI или простой агент на основе собственных скриптов. Ключевое требование — возможность запуска в изолированной сети.
- Артефакториум: Nexus Repository Manager или Harbor для хранения собранных образов Docker и зависимостей. Они позволяют создать полное локальное зеркало всех необходимых для сборки библиотек.
- Система управления конфигурациями: для развёртывания инфраструктуры пайплайнов подходит 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 следует добавить:
- SCA (Software Composition Analysis): сканирование зависимостей на уязвимости. Используйте OWASP Dependency-Check, но с предварительно загруженной локальной копией базы NVD. Скрипт должен сначала обновить локальную базу из внутреннего источника, а затем провести анализ.
- DAST (для веб-приложений): можно использовать OWASP ZAP в контейнере, запуская его против развёрнутого на тестовом стенде приложения. Это также требует полностью автономной настройки.
- Проверка секретов: инструменты вроде detect-secrets или GitLeaks для поиска ключей, паролей и токенов, случайно закоммиченных в код.
Интеграция с регуляторными требованиями: 152-ФЗ и ФСТЭК
DevSecOps-пайплайн может не только улучшить безопасность, но и помочь в формальном соответствии требованиям регуляторов.
Например, приказ ФСТЭК России №239 обязывает проводить анализ защищённости кода при разработке. Вместо разового дорогостоящего аудита перед сдачей системы, интегрированный SonarQube с правильно настроенными правилами выполняет эту функцию непрерывно. Важно документировать сам факт проведения такого анализа для каждого билда — этому способствуют артефакты пайплайна (отчёты) и его неизменяемые логи.
Требования 152-ФЗ к защите персональных данных также могут быть частично автоматизированы. Можно создать правила в статическом анализаторе, которые ищут в коде паттерны, указывающие на неправильную обработку ПДн (например, хардкод проверок или неиспользование утверждённых методов шифрования).
Главное — понимать, что пайплайн не заменяет полностью процедуру аттестации или аудита, но становится их технической основой, предоставляя регуляторам структурированные и воспроизводимые доказательства проведения работ по безопасности.
Организационные сложности и как их преодолеть
Техническая настройка — только половина дела. Чаще всего внедрение DevSecOps в России упирается в человеческий фактор.
- Сопротивление разработчиков: дополнительные проверки удлиняют пайплайн. Решение — не просто «ломать» сборку, а сразу давать понятные рекомендации по исправлению. Интегрируйте отчёсы SonarQube прямо в Merge Request в GitLab, чтобы проблему было видно в контексте кода.
- Конфликт с отделом ИБ: автоматизация может восприниматься как попытка лишить отдел ИБ его функций. Нужно позиционировать пайплайн как инструмент, который избавляет их от рутины (проверки тривиальных уязвимостей) и позволяет сосредоточиться на сложных угрозах и архитектуре. Включите их в процесс настройки правил и порогов срабатывания.
- Нехватка экспертизы: поддержка всего стека требует знаний по администрированию GitLab, SonarQube, container registry. Инвестируйте в обучение одного-двух инженеров или начните с максимально простой конфигурации, постепенно её усложняя.
Вывод: устойчивость вместо удобства
Российский DevSecOps, это путь к технологической устойчивости. Изначально он требует больше усилий, чем подключение к облачным сервисам: нужно разворачивать инфраструктуру, настраивать локальные зеркала, писать свои правила анализа. Однако в долгосрочной перспективе такой подход даёт полный контроль над цепочкой разработки и её безопасностью, независимость от внешних факторов и реальное соответствие жёстким требованиям регуляторов. Начинать стоит не с поиска идеального аналога западного стека, а с ответа на вопрос: «Какой минимальный набор проверок безопасности мы можем гарантированно выполнять в наших условиях?» Построение на этом фундаменте окажется прочнее, чем попытка скопировать чужую, но нефункциональную здесь, модель.