Введение в файлы .env

Представьте, что вам придется заплатить почти 148 миллионов долларов за утечку данных, в результате которой были раскрыты данные около 57 миллионов пользователей 😱😰😰.

Именно это произошло с компанией Uber не так давно, и виновником этого стал не кто иной, как закодированный секрет, открыто опубликованный для использования любым плохим игроком.

Поэтому в этом посте мы узнаем, что это такое и как их можно использовать в наших javascript-проектах.

Контекст

Сегодня миллионы разработчиков программного обеспечения хранят свои секреты (т.е. учетные данные, такие как ключи доступа и маркеры для сервисов, используемых программами) в безопасности с помощью файлов .env.

Для тех, кто не знаком с темой, файлы .env были введены в 2012 году как часть решения проблемы зашифрованной секретности, упомянутой во вступительном абзаце выше.

Вместо того чтобы отправлять секреты вместе с кодовой базой в облако, разработчики теперь могли отправлять свою кодовую базу в облако и хранить свои секреты отдельно на своих машинах в формате ключ-значение в файлах .env; такое разделение снижает риск того, что плохие субъекты получат в свои руки конфиденциальные учетные данные в облаке.

Для запуска программ разработчикам теперь нужно было только извлечь свою последнюю кодовую базу из удаленного хранилища и внедрить секреты, содержащиеся в их локальных файлах .env, в извлеченный код.

Если только команда разработчиков не является небольшой и «непостоянной» и не заботится о DevOps, она обычно поддерживает несколько «сред» для своей кодовой базы, чтобы гарантировать, что изменения хорошо протестированы перед отправкой в производство для взаимодействия с конечными пользователями. В случае нескольких сред разработчики могут использовать несколько файлов .env для хранения учетных данных, по одному для каждой из этих сред (например, один файл .env содержит ключи базы данных разработки, а другой — ключи базы данных производства).

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

Использование

В этом посте мы рассмотрим, как использовать файл .env в базовом проекте, предполагая, что вы используете Node.js и git для контроля версий; это также должно быть применимо к другим языкам. Не стесняйтесь пропустить этот раздел, если вас не интересуют технические аспекты использования файла .env.

Для начала перейдите в корень папки вашего проекта и создайте пустой файл .env, содержащий учетные данные, которые вы хотите внедрить в вашу кодовую базу. Это может выглядеть примерно так:

SECRET_1=924a137562fc4833be60250e8d7c1568
SECRET_2=cb5000d27c3047e59350cc751ec3f0c6
Войдите в полноэкранный режим Выход из полноэкранного режима

Далее вам нужно проигнорировать файл .env, чтобы он не фиксировался в git. Если вы еще не сделали этого, создайте файл .gitignore. Это должно выглядеть примерно так:

.env
Войдите в полноэкранный режим Выход из полноэкранного режима

Теперь, чтобы внедрить секреты в ваш проект, вы можете использовать популярный модуль, такой как dotenv; он разберет файл .env и сделает ваши секреты доступными внутри вашей кодовой базы под объектом process. Перейдите к установке модуля:

npm install dotenv
Войдите в полноэкранный режим Выход из полноэкранного режима

Импортируйте модуль в верхнюю часть стартового скрипта для вашей кодовой базы:

require(‘dotenv’).config()
Войдите в полноэкранный режим Выход из полноэкранного режима

Вот и все, теперь вы можете получить доступ к секретам в любой точке вашей кодовой базы:

// display the value of SECRET_1 into your code
console.log(process.env.SECRET_1) 
// -> 924a137562fc4833be60250e8d7c1568

// display the value of SECRET_2 into your code
console.log(process.env.SECRET_2) 
// -> cb5000d27c3047e59350cc751ec3f0c6
Войдите в полноэкранный режим Выход из полноэкранного режима

Превосходно. Вы успешно добавили в проект файл .env с некоторыми секретами, и получили доступ к этим секретам в своей кодовой базе. Кроме того, когда вы отправляете свой код через git, ваши секреты остаются на вашей машине.

Вызовы

Несмотря на простоту и мощь, файлы .env могут быть проблемными, если ими неправильно управлять в контексте более крупной команды.

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

На упрощенном уровне, между разработчиком_1 и разработчиком_2, может произойти вот что:

  • Разработчик_1 мог добавить ключ API в свой локальный файл .env и забыть сообщить об этом Разработчику_2, чтобы тот добавил его в свой; это стоило Разработчику_2 15 минут на отладку того, почему его код падает, только чтобы понять, что это из-за отсутствующего ключа API.
  • Разработчик_2 может попросить разработчика_1 отправить ему ключ API, чтобы он мог добавить его в свой файл .env, после чего разработчик_1 может решить отправить его через текстовое сообщение или по электронной почте; это подвергает его организацию неоправданному риску со стороны плохих игроков, таких как разработчик_2, которые точно ждут, чтобы перехватить ключ API.

К сожалению, эти проблемы встречаются часто и даже имеют название: тайное расползание.

В последние годы многие компании пытались решить эту проблему. HashiCorp Vault — это продукт, обеспечивающий надежное хранение секретов для крупных предприятий; однако он слишком дорог, громоздок и откровенно избыточен в настройке для среднего разработчика, которому просто нужен быстрый и надежный способ хранения этих секретов.

Существуют более простые решения, такие как Doppler и новый dotenv-vault, но им часто не хватает инфраструктуры безопасности, необходимой для массового внедрения.

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

Вот и все, друзья, надеюсь, это поможет вам стать лучшим разработчиком!

@khriztianmoreno

Увидимся в следующий раз.

Оцените статью
devanswers.ru
Добавить комментарий