Developer Security
6 мин

Как безопасно передать .env-файл и переменные окружения команде

Хватит отправлять пароли от баз данных и API-ключи через Slack. Рассказываем, как безопасно передавать .env-файлы команде разработки — от быстрых решений до долгосрочных.

LOCK.PUB
Как безопасно передать .env-файл и переменные окружения команде

Как безопасно передать .env-файл и переменные окружения команде

Момент онбординга, которого все боятся

В команду приходит новый разработчик. Он настраивает локальное окружение и задаёт неизбежный вопрос:

«Слушайте, может кто-нибудь скинуть мне .env-файл?»

Дальше всё до тоски предсказуемо. Кто-то из опытных разработчиков копирует целиком содержимое своего .env — пароли от баз данных, API-ключи, секреты сторонних сервисов — и вставляет в личку в Slack или в чат в Telegram. Теперь это сообщение хранится где-то на сервере, доступно через поиск и останется там навсегда.

Мы все так делали. И риск здесь гораздо выше, чем думает большинство команд.

Чем опасна небезопасная передача .env-файлов

Ваш .env-файл — по сути, сундук с учётными данными:

  • Строки подключения к базе данных — хост, порт, имя пользователя, пароль, название базы
  • API-ключи — Stripe, AWS, Firebase и другие сервисы, злоупотребление которыми стоит реальных денег
  • Секреты сторонних сервисов — OAuth client secret, ключи подписи вебхуков, ключи шифрования
  • Внутренние токены сервисов — аутентификация между микросервисами

Когда вы вставляете всё это в Slack или Telegram, данные сохраняются на их серверах. Любой, у кого есть доступ к рабочему пространству, может найти эти сообщения через поиск спустя месяцы или годы. А если устройство потеряют или взломают, учётные данные уйдут вместе с ним.

Распространённые (и опасные) способы передачи .env-файлов

Способ Чем рискованно
Личные сообщения в Slack / Teams Хранятся на серверах провайдера, часто годами, и доступны администраторам через экспорт и eDiscovery
Вложение в письме Лежит на почтовых серверах, его можно переслать, при хранении шифруется редко
Google Docs Утечка ссылки = доступ для кого угодно, история версий сохраняет содержимое
Коммит в git Даже удалённые коммиты живут в истории git log, боты сканируют GitHub за секунды
Notion / Confluence Страницы по умолчанию часто видны всему рабочему пространству и не истекают, если не ограничить доступ

Сценарий с коммитом в git особенно беспощаден. Автоматические боты непрерывно сканируют публичные репозитории GitHub в поисках открытых учётных данных. Если вы случайно запушите .env-файл, ваши ключи AWS могут скомпрометировать за считаные минуты.

Безопасные способы передачи .env-файлов

1. Менеджеры секретов

Doppler, HashiCorp Vault и AWS Secrets Manager созданы именно для этого. Они централизуют переменные окружения и дают детальное управление доступом, журналы аудита и автоматическую ротацию. Если в вашей команде больше нескольких разработчиков, это золотой стандарт.

2. Командные менеджеры паролей

1Password Teams и Bitwarden Organization поддерживают общие хранилища, где содержимое .env можно сохранить в виде защищённых заметок. Доступ настраивается для каждого пользователя, а все данные защищены сквозным шифрованием.

3. Одноразовые заметки с паролем

Для быстрой разовой передачи — например, при онбординге нового разработчика — хорошо подходит инструмент вроде LOCK.PUB. Вставьте содержимое .env в секретную заметку, задайте пароль, настройте однократное открытие или срок действия (Pro), затем отправьте ссылку через Slack, а пароль — по отдельному каналу (например, в Telegram или по телефону). После этого ссылка больше не открывается — в Slack остаётся нерабочая ссылка, а не ваши учётные данные. Нет Pro? На странице Одноразовый секрет первую одноразовую заметку может бесплатно отправить любой.

4. Файлы, зашифрованные GPG

Командам, которые серьёзно относятся к безопасности, можно шифровать .env-файл с помощью GPG перед отправкой. Минус в том, что каждому участнику команды приходится управлять GPG-ключами, а это лишние сложности.

Лучшие практики работы с .env

  1. Сразу добавьте .env в .gitignore — это первое, что нужно сделать при создании нового проекта.
  2. Ведите файл .env.example — перечислите в нём все переменные с условными значениями, чтобы новые разработчики знали, что им нужно.
  3. Используйте разные учётные данные для каждого окружения — у dev, staging и production никогда не должно быть общих ключей.
  4. Регулярно меняйте секреты — как минимум раз в квартал.
  5. Отзывайте доступ, когда люди уходят — когда участник команды уходит, смените все секреты, к которым у него был доступ. Не только его учётную запись — сами учётные данные.

Быстрая настройка: .gitignore + .env.example

Добавьте это в свой .gitignore прямо сейчас:

# Environment variables
.env
.env.local
.env.*.local

Затем создайте .env.example, который будет служить документацией:

# .env.example
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxx
FIREBASE_API_KEY=your_firebase_api_key_here
NEXT_PUBLIC_BASE_URL=http://localhost:3000

Закоммитьте этот файл в репозиторий. Он точно подскажет каждому новому разработчику, какие переменные нужны, не раскрывая ни одного реального значения.

Хватит отправлять секреты открытым текстом

Передача .env-файлов может показаться мелкой деталью рабочего процесса, но это один из самых частых источников утечки учётных данных. Вложитесь ли вы в полноценный менеджер секретов или будете передавать учётные данные с ограниченным сроком действия через LOCK.PUB, главное — избавиться от привычки вставлять секреты в сообщения чатов.

Попробуйте прямо сейчас: поищите в своём рабочем пространстве Slack по запросам DATABASE_URL или API_KEY. Результаты могут вас удивить.

Создать Заметку

Создать Заметку

Ключевые слова

безопасно передать .env файл
передать переменные окружения команде
управление секретами разработчиков
Как безопасно передать .env-файл и переменные окружения команде | LOCK.PUB Blog