Русский
Русский
English
Статистика
Реклама

Из песочницы Я храню продакшен ключи прямо в Git репозитории

image


Время шло, CI/CD тулзы менялись, количество проектов, сред и мест хранения ключей множились, уровень беспокойства о том, что какой-нибудь ключ где-нибудь устарел все повышалось. Ну хватит уже Можно я просто в репозитории ключи оставлю? Оказывается, да, можно. И это на порядок удобнее всего что я делал раньше.


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


Цели


  • Не хочу беспокоиться о том, все ли конфиги в порядке перед отправкой кода в продакшен/стейджинг
  • Не хочу думать о том, какие конфиги дать новому разработчику, только что присоединившемуся к проекту
  • Хочу чтобы все CI системы запускались без танцев с бубном, так же просто как на локальной машине
  • Хочу чтобы ключи соответствовали версии кода.

Решение


Создаем два баш скрипта: encrypt.sh и decrypt.sh.


encrypt.sh выглядит так:


#!/bin/bash# sh encrypt.sh <./path/to/file.js> <environment> <password>LOCAL_IP_REMOVED='Y'if [[ $2 == 'local' ]]; then  read -p "You are encrypting local environment. \  Did you remove your local ip address from configs? Y/n" LOCAL_IP_REMOVEDfiif [[ $LOCAL_IP_REMOVED != 'Y' ]]; then  echo "Well, go on and remove it then! Aborting encryiption"  exit 1fiecho "encrypting $1"openssl enc -aes-128-cbc -a -salt -pass pass:$3 -in $1 -out $1.${2}-enc -md md5echo "done"

decrypt.sh выглядит так:


#!/bin/bash# sh decrypt.sh <environment> <password>echo "decrypting $1 environment"for file in $(find . -not -path "*/node_modules/*" -name "*.$1-enc")do    echo "decrypting $file to ${file//.$1-enc}"    openssl enc -aes-128-cbc -a -d -salt -pass pass:$2 -in $file -out "${file//.$1-enc}" -md md5doneif [[ $1 == 'local' ]]; then  LOCAL_IP=`ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'`  echo "Also replacing localhost with your local machine ip: $LOCAL_IP"  # optionally, add logic to replace "localhost" with your machine IP  sed -i ''  "s|localhost|$LOCAL_IP|g" './src/env.js'fi

Складываем все секретки в один или несколько файлов, как удобно. Будь то .env, env.js или что там вы используете.


Добавляем этот файл в .gitignore.


Юзаем encrypt.sh:


sh encrypt.sh ./src/env.js <environment> <very_secure_password>

Указанный файл шифруется и сохраняется как копия. В данном примере это будет ./src/env.js.production-enc.
И


Кстати, сложность подбора пароля можно чекнуть тут:



Советую начать с трех environmentов: local, staging, production.


Особенность local среды в том, что скрипт decrypt.sh может также подменять localhost в ваших конфигах на локальный IP вашего компьютера. Это нужно, например, в мобильной разработке, когда необходимо чтобы смартфон коннектился к локальному серверу.


Спасибо за внимание!

Источник: habr.com
К списку статей
Опубликовано: 31.10.2020 14:22:02
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Управление разработкой

Environment variables

Переменные окружения

Ci/cd

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru