Con el paso del tiempo, las herramientas de CI / CD cambiaron, se multiplicó el número de proyectos, entornos y ubicaciones de almacenamiento de claves, y aumentó el nivel de ansiedad de que una clave fuera obsoleta en algún lugar. Bueno, ya es suficiente ... ¿Puedo dejar las claves en el repositorio? Resulta que sí puedes. Y este es un orden de magnitud más conveniente que cualquier cosa que haya hecho antes.
Saltemos la desgarradora historia sobre los problemas que todos enfrentamos cuando se trata de todo tipo de secretos en los proyectos y vayamos directamente al grano.
Objetivos
- , /
- , ,
- 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
.
Te aconsejo que comience con tres environment
s: local
, staging
, production
.
La peculiaridad del local
entorno es que el script decrypt.sh
también puede reemplazar localhost
en sus configuraciones con la IP local de su computadora. Esto es necesario, por ejemplo, en el desarrollo móvil, cuando es necesario que el teléfono inteligente se conecte a un servidor local.
¡Gracias por la atención!