Какие механизмы защиты репозиториев кода вы применяли?

«Какие механизмы защиты репозиториев кода вы применяли?» — вопрос из категории Git, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Защита репозиториев — критичная часть DevOps-практик. Вот что я настраивал в GitLab и GitHub:

1. Branch Protection Rules (Правила защиты веток)

  • Запрет прямых пушей (force push) в главные ветки (main, master, production).
  • Обязательный код-ревью: Требование одного или нескольких апрувов от коллег, не являющихся авторами MR/PR.
  • Обязательные успешные пайплайны: Мерж-реквест может быть смержен только после успешного прохождения всех стадий CI.
  • Требование линейной истории (linear history): Запрет мержей с коммитами, отличными от fast-forward.

2. RBAC (Role-Based Access Control) Четкое разделение прав. В GitLab:

  • Guest/Reporter — только чтение.
  • Developer — может создавать ветки и MR, но не мержить в защищенные ветки.
  • Maintainer/Owner — полные права, включая мерж в защищенные ветки.

3. Сканирование на утечки секретов (Secrets Scanning)

  • Интеграция GitGuardian или TruffleHog в пайплайн CI для сканирования каждого коммита на наличие токенов, паролей, приватных ключей.
  • Использование HashiCorp Vault или AWS Secrets Manager для хранения секретов, а не в коде.

4. Двухфакторная аутентификация (2FA) Обязательное требование для всех разработчиков с доступом к репозиториям.

5. Подпись коммитов (GPG/SSH Signing) Верификация авторства коммитов и тегов через цифровые подписи. Настраивается на уровне репозитория и клиента Git.

6. Webhooks для аудита и интеграции

  • Отправка событий (пуши, мержи, создание веток) в SIEM-систему (например, Splunk) или канал Slack для аудита.
  • Интеграция с Jira для автоматического обновления статуса задач.

7. Политики для зависимостей (Dependency Scanning)

  • Регулярное сканирование package.json, requirements.txt, go.mod на уязвимости (GitLab SAST, Snyk, Dependabot).
  • Автоматическое создание MR для обновления уязвимых зависимостей.

Комбинация этих мер создает многоуровневую защиту, где человеческая ошибка (пуш секрета) или злой умысел блокируются автоматическими проверками.