Developer Security
6 хв

Як безпечно передати .env файл і змінні оточення команді

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

LOCK.PUB
Як безпечно передати .env файл і змінні оточення команді

Як безпечно передати .env файл і змінні оточення команді

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

До команди приходить новий розробник. Він налаштовує локальне середовище й ставить неминуче запитання:

«Слухайте, може хтось скинути мені .env файл?»

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

Ми всі так робили. І це набагато більший ризик, ніж усвідомлює більшість команд.

Чому небезпечно передавати .env файли незахищеними каналами

Ваш .env файл — це, по суті, скриня зі скарбами у вигляді облікових даних:

  • Рядки підключення до бази даних — хост, порт, ім'я користувача, пароль, назва бази
  • API-ключі — Stripe, AWS, Firebase та інші сервіси, зловживання якими коштує реальних грошей
  • Секрети сторонніх сервісів — клієнтські секрети OAuth, ключі підпису вебхуків, ключі шифрування
  • Токени внутрішніх сервісів — автентифікація між мікросервісами

Коли ви вставляєте все це в 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