Ich speichere Produktionsschlüssel direkt im Git-Repository

Bild



Im Laufe der Zeit änderten sich die CI / CD-Tools, die Anzahl der Projekte, Umgebungen und Schlüsselspeicherorte vervielfachte sich und die Angst, dass ein Schlüssel irgendwo veraltet ist, nahm zu. Nun, das ist schon genug ... Kann ich die Schlüssel einfach im Repository lassen? Es stellt sich heraus, ja, Sie können. Und das ist eine Größenordnung bequemer als alles, was ich zuvor getan habe.



Lassen Sie uns die herzzerreißende Geschichte über die Probleme überspringen, mit denen wir alle konfrontiert sind, wenn es um alle möglichen Geheimnisse in Projekten geht, und gleich zur Sache kommen.



Ziele



  • , /
  • , ,
  • 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.



, :





Ich rate Ihnen , mit drei zu starten environments: local, staging, production.



Die Besonderheit der localUmgebung ist , dass das Skript decrypt.shauch ersetzen kann localhostin Ihrem configs mit der lokalen IP - Adresse Ihres Computers. Dies ist beispielsweise in der mobilen Entwicklung erforderlich, wenn das Smartphone eine Verbindung zu einem lokalen Server herstellen muss.



Vielen Dank für Ihre Aufmerksamkeit!




All Articles