Ответ
Безопасность (Security) интегрирована в каждый этап CI/CD-пайплайна (DevSecOps). Мы не проводим разовую проверку, а постоянно сканируем на всех уровнях.
1. Код (SAST - Static Application Security Testing):
На этапе сборки MR запускаются статические анализаторы. Для Go-проектов использую gosec, для Python — bandit. Эти инструменты ищут уязвимости в самом коде, например, возможность SQL-инъекции.
# Этап в GitLab CI
sast:
stage: test
image: securego/gosec:latest
script:
- gosec ./...
artifacts:
reports:
sast: gl-sast-report.json
Критические и высокие уязвимости блокируют мерж кода в основную ветку.
2. Зависимости (SCA - Software Composition Analysis): Сканирую зависимости приложения на известные уязвимости (CVE). Использую Trivy или GitLab Dependency Scanning.
trivy fs --severity HIGH,CRITICAL .
Этот этап выявляет проблемы в используемых библиотеках (например, в log4j).
3. Контейнерные образы: Каждый собранный Docker-образ сканирую тем же Trivy на наличие уязвимостей в базовом образе (OS packages) и в установленных пакетах.
container_scanning:
stage: test
image: aquasec/trivy:latest
script:
- trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
Образ с критическими уязвимостями не попадает в registry.
4. Инфраструктура как код (IaC Scanning): Проверяю конфигурации Terraform, Kubernetes manifests, Dockerfile на соответствие best practices и стандартам безопасности (CIS Benchmarks). Использую Checkov.
checkov -d . --framework terraform kubernetes
Он, например, обнаружит, что в SecurityGroup открыт порт 22 для всех (0.0.0.0/0) и предложит ограничить доступ.
5. Динамическое тестирование (DAST - Dynamic Application Security Testing): После деплоя приложения в staging-окружение запускается автоматическое сканирование работающего приложения с помощью OWASP ZAP. Оно имитирует атаки (инъекции, XSS) и выявляет уязвимости, которые не видны в коде.
6. Секреты (Secrets Management): Использую git-secrets или TruffleHog на этапе pre-commit, чтобы предотвратить попадание паролей, ключей API в Git. В рантайме секреты подаются через HashiCorp Vault или Kubernetes Secrets (хотя последние — base64, не шифрование).
Все отчеты агрегируются в единой панели (например, DefectDojo), что дает полную картину безопасности приложения перед релизом. Без этого «зеленого света» автоматический деплой в production не запустится.