Je stocke les clés de production directement dans le référentiel Git

image



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 environments: local, staging, production.



La particularité de l' localenvironnement est que le script decrypt.shpeut également remplacer localhostdans 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!




All Articles