Управление секретами и конфигурацией
Пароль от базы данных в конфигурационном файле. Ключ API платёжного сервиса в docker-compose. Токен облачного провайдера в скрипте деплоя, который разработчик добавил «временно» и забыл. Git помнит всё — удаление строки из кода не стирает её из истории коммитов. Через несколько месяцев автоматический сканер найдёт действующий ключ в истории репозитория.
Это происходит регулярно. По данным российских ИБ-аналитиков, утечки учётных данных и ключей доступа — один из ведущих векторов компрометации корпоративной инфраструктуры. Разбираемся, что должен выстроить лидер безопасности — сотрудник, который берёт на себя вопросы информационной безопасности в команде как дополнительн ую зону ответственности, — и что необходимо контролировать руководителю.
Почему это важно для бизнеса
Типичные отговорки — «нас не взломают, мы маленькая компания» и «разберёмся при случае» — ошибочны в обоих случаях.
Поверхность атаки шире, чем кажется. Среднестатистическая компания использует несколько десятков интеграций: база данных, почтовый сервис, платёжный шлюз, облачное хранилище, корпоративные мессенджеры. У каждой интеграции есть учётные данные, и каждый ключ потенциально открывает доступ к критичным данным или денежным средствам.
Git не забывает. Разработчик удалил ключ из кода на следующий день после коммита — но в истории репозитория он остался навсегда. Именно историю проверяют автоматические сканеры, а не текущее состояние файлов.
Маленькая команда — общий доступ без контроля. Если несколько сотрудников пользуются одним файлом с паролями, переданным через мессенджер, невозможно установить, кто и когда использовал учётные данные. При увольнении сотрудника сменить все пароли чаще всего забывают. Это нарушение принципа разграничения доступа и требований к аудиту, предусмотренных 149-ФЗ и нормами защиты коммерческой тайны (98-ФЗ).
Восстановление обходится дорого. Утечка одного ключа — это дни работы команды: смена всех скомпрометированных учётных данных, аудит логов доступа, уведомление клиентов. Если утекли персональные данные — обязательное уведомление Роскомнадзора в течение 24 часов с момента обнаружения инцидента (152-ФЗ в редакции 2022 года).
Типичный сценарий
Разработчик ИТ-компании добавил ключ API сервиса отправки SMS в конфигурационный файл, чтобы быстро проверить интеграцию. Через несколько месяцев коллега случайно перевёл репозиторий в открытый доступ. Ключ оказался действующим — в течение нескольких часов с него отправили тысячи спам-сообщений, счёт вырос на сотни тысяч рублей. Ключ аннулировали, но деньги уже списались.
Что считается секретом
Любые данные, открывающие доступ к системе или сервису:
| Категория | Примеры |
|---|---|
| Пароли | Учётные данные СУБД, административные аккаунты, пароли сервисных учётных записей |
| API-ключи и токены | Ключи платёжных сервисов, SMS-шлюзов, токены репозиториев кода, OAuth-секреты |
| Криптографические материалы | Приватные ключи, TLS-сертификаты, SSH-ключи, ключи подписи JWT |
| Строки подключения | URL баз данных со встроенными учётными данными, адреса брокеров сообщений |
| Облачные учётные данные | Ключи доступа Yandex Cloud, сервисные аккаунты VK Cloud, токены Cloud.ru, Selectel |
Простой критерий: если данные позволяют аутентифицироваться или получить доступ к ресурсам — это секрет.
Где секреты оказываются не там, где надо
Исходный код. Пароль прямо в строке подключения к базе данных, ключ в заголовке HTTP-запроса, токен в переменной — «на время», которое растянулось на годы.
Конфигурационные файлы. Docker Compose, файлы настроек приложений с реальными значениями вместо переменных окружения — коммитятся вместе с кодом.
История Git. Ключ удалили из кода, но из истории коммитов он никуда не делся. Автоматические сканеры проверяют именно историю.
Логи CI/CD. Скрипты деплоя, которые выводят переменные окружения в консоль. Лог сборки доступен всем участникам репозитория.
Локальные файлы, переданные по мессенджеру. Файлы с переменными окружения, которые пересылают в Telegram или по почте: никакого журнала доступа, никакого управления правами.
Ключ, зашитый в JavaScript-сборку или мобильное приложение, извлекается без специальных навыков. Клиентский код нельзя считать местом хранения секретов ни при каких условиях.