# Где хранить ключи и секреты, чтобы их не пришлось срочно менять

> Переменные окружения, менеджеры секретов, ротация и короткий список мест, куда ключ не должен попадать никогда.

Published: 2025-06-27 · Source: https://subxcat.com/ru/articles/secrets-management · Author: SUBXCAT

Секрет — это всё, что даёт доступ без пароля человека: ключ платёжной системы, токен ИИ-провайдера, строка подключения к базе, пароль почтового ящика, ключ для подписи сессий. В прототипе они обычно лежат там, куда их вставил ассистент, чтобы «заработало». Для продукта нужен порядок попроще и построже.

## Куда секрет не попадает никогда

- **В клиентский код.** Всё, что уходит в браузер или в мобильное приложение, читается. Отдельно следи за префиксами вроде `VITE_` и `NEXT_PUBLIC_`: переменная с таким префиксом встраивается в бандл, и сборщик честно сделает то, о чём его попросили.
- **В git.** Ни в коде, ни в `.env`, ни в «временном» конфиге. Удалить файл следующим коммитом мало: секрет остаётся в истории, в форках и в локальных копиях всех, кто успел сделать pull.
- **В логи и трекер ошибок.** Логирование «всего запроса целиком» и дамп переменных окружения при падении — два самых частых способа утечки, о которой никто не узнаёт.
- **В чат и тикеты.** Ключ, отправленный коллеге в мессенджер, живёт там дольше, чем ты думаешь, и видят его больше людей, чем ты думаешь.

## Переменные окружения — нормальный старт

Для небольшого проекта переменные окружения на сервере или в настройках хостинга — разумный выбор. Правила такие:

- `.env` в `.gitignore`, а в репозитории — `.env.example` с именами переменных и пустыми значениями. Новый человек видит, что нужно, и не видит значений.
- Приложение проверяет конфиг при старте и падает, если чего-то не хватает. Сервер, который тихо запустился без ключа платёжки, сломается позже и в худший момент.
- У каждого окружения свои ключи. Тестовые ключи платёжной системы на стейджинге, боевые — только в продакшне, и никогда наоборот.

## Когда нужен менеджер секретов

Переменные начинают мешать, когда секретов становится много, сервисов несколько и людей в команде больше двух. Менеджер секретов — у облачного провайдера, у хостинга или отдельный сервис — даёт то, чего у файла `.env` нет: журнал, кто и когда читал секрет, права по окружениям и людям, версии и откат.

Переезжать на него стоит не «когда вырастем», а когда ты уже не можешь ответить на вопрос «у кого сейчас есть боевой ключ от базы». Если ответ «у всех, кто когда-либо работал над проектом», момент наступил.

## Минимум прав

Большинство провайдеров позволяют выпустить ключ с ограниченными правами: только чтение, только один проект, только определённые операции. Ключ, которым сервис отправляет письма, не должен уметь менять DNS. Ключ аналитики не должен уметь делать возвраты.

Это снижает цену утечки. Утёк ключ с правом «отправлять письма» — неприятно. Утёк ключ администратора аккаунта — это уже вопрос о том, кому теперь принадлежит твой домен.

## Ротация

Ротация — плановая замена ключа. Её смысл не в ритуале «раз в квартал», а в том, чтобы замена была отработанной процедурой, а не паникой в два часа ночи.

Проверь заранее:

- Можно ли выпустить новый ключ, не отзывая старый. Большинство сервисов позволяют держать два одновременно — так замена проходит без простоя.
- Сколько мест надо поправить. Если ключ вписан в пять сервисов руками, ротация займёт день и что-нибудь забудется.
- Кто это делает и где записан порядок действий.

Обязательная ротация — после ухода человека с доступом, после попадания ключа в git или лог и после любого сомнения. Если ты не уверен, утёк ли ключ, считай, что утёк: замена стоит минут, проверка «а вдруг нет» — неопределённости на месяцы.

## Защита от собственной спешки

Поставь сканер секретов в pre-commit и в CI — он ловит строки, похожие на ключи, до того, как они уйдут в репозиторий. Многие хостинги git тоже умеют блокировать push с известными форматами ключей. Это не отменяет внимательности, но страхует в тот вечер, когда её не хватило.

SUBXCAT может пройтись по проекту, найти, где лежат секреты и у кого к ним доступ, и наладить ротацию так, чтобы она перестала пугать.
