[Управление разработкой] Я храню продакшен ключи прямо в Git репозитории
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Время шло, 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_REMOVED
fi
if [[ $LOCAL_IP_REMOVED != 'Y' ]]; then
echo "Well, go on and remove it then! Aborting encryiption"
exit 1
fi
echo "encrypting $1"
openssl enc -aes-128-cbc -a -salt -pass pass:$3 -in $1 -out $1.${2}-enc -md md5
echo "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 md5
done
if [[ $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
===========
Похожие новости:
- [Управление разработкой, Matlab, Интервью, Инженерные системы] MATLAB. Пиратство в России. Религия в ИТ. Как управлять инженерами и как их мотивировать?
- [Системное администрирование, Программирование, DevOps, Kubernetes] Что такое GitOps? Расширяем DevOps на Kubernetes и дальше (перевод)
- [Управление разработкой, Карьера в IT-индустрии] Разрабы работают медленно и дорого — и люди считают нас лентяями. Просто в разработке всё сложно
- [Системное администрирование, IT-инфраструктура, Управление разработкой, DevOps] Митап по SRE: вторник, 3 ноября, 19:00 по Москве
- [IT-инфраструктура, DevOps, Облачные сервисы, Софт] Этапы внедрения CI/CD (перевод)
- [Информационная безопасность, Системное администрирование, IT-инфраструктура, DevOps] Обеспечиваем безопасность в гибкой разработке и CI/CD (перевод)
- [Системное администрирование, Анализ и проектирование систем, Управление разработкой, DevOps] Почему бизнес хочет DevOps и что нужно знать инженеру, чтобы говорить с ним на одном языке
- [Управление разработкой, Управление продуктом, Софт] В разработку пакета «МойОфис» вложено $100 млн. Большие надежды на рынок Африки
- [Системное администрирование, IT-инфраструктура, Управление разработкой, DevOps] «Цель SRE — надёжная система». Обзор основных метрик SRE
- [Управление разработкой, Agile, Развитие стартапа, Управление продуктом] Start Up: Организационные и технические аспекты запуска в крупной IT-компании
Теги для поиска: #_upravlenie_razrabotkoj (Управление разработкой), #_environment_variables, #_peremennye_okruzhenija (переменные окружения), #_ci/cd, #_upravlenie_razrabotkoj (
Управление разработкой
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:57
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Время шло, CI/CD тулзы менялись, количество проектов, сред и мест хранения ключей множились, уровень беспокойства о том, что какой-нибудь ключ где-нибудь устарел все повышалось. Ну хватит уже… Можно я просто в репозитории ключи оставлю? Оказывается, да, можно. И это на порядок удобнее всего что я делал раньше. Пропустим душераздирающую историю о том, с какими проблемами все мы сталкиваемся когда дело касается всяких секреток в проектах и перейдем сразу к делу. Цели
Решение Создаем два баш скрипта: 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_REMOVED fi if [[ $LOCAL_IP_REMOVED != 'Y' ]]; then echo "Well, go on and remove it then! Aborting encryiption" exit 1 fi echo "encrypting $1" openssl enc -aes-128-cbc -a -salt -pass pass:$3 -in $1 -out $1.${2}-enc -md md5 echo "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 md5 done if [[ $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 =========== Похожие новости:
Управление разработкой ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:57
Часовой пояс: UTC + 5