Au fil du temps, les outils CI / CD ont changé, le nombre de projets, d'environnements et d'emplacements de stockage de clés s'est multiplié, le niveau d'angoisse face à une clé quelque part obsolète a augmenté. Eh bien, c'est déjà assez ... Puis-je simplement laisser les clés dans le référentiel? Il s'avère que oui, vous pouvez. Et c'est un ordre de grandeur plus pratique que tout ce que j'ai fait auparavant.
Oublions l'histoire déchirante des problèmes auxquels nous sommes tous confrontés lorsqu'il s'agit de toutes sortes de secrets dans les projets et allons droit au but.
Objectifs
- , /
- , ,
- 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
.
Je vous conseille de commencer par trois environment
s: local
, staging
, production
.
La particularité de l' local
environnement est que le script decrypt.sh
peut également remplacer localhost
dans vos configs par l'adresse IP locale de votre ordinateur. Cela est nécessaire, par exemple, dans le développement mobile, lorsqu'il est nécessaire que le smartphone se connecte à un serveur local.
Merci pour l'attention!