Saya menyimpan kunci produksi langsung di repositori Git

gambar



Seiring berjalannya waktu, alat CI / CD berubah, jumlah proyek, lingkungan, dan lokasi penyimpanan utama berlipat ganda, tingkat kecemasan bahwa kunci di suatu tempat yang sudah ketinggalan zaman meningkat. Nah, itu sudah cukup ... Bisakah saya meninggalkan kunci di repositori? Ternyata, ya, Anda bisa. Dan ini adalah urutan besarnya lebih nyaman daripada apa pun yang pernah saya lakukan sebelumnya.



Mari kita lewati cerita memilukan tentang masalah yang kita semua hadapi ketika berhubungan dengan semua jenis rahasia dalam proyek dan langsung ke intinya.



Tujuan



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



, :





Saya menyarankan Anda untuk memulai dengan tiga environments: local, staging, production.



Keunikan locallingkungan adalah bahwa skrip decrypt.shjuga dapat menggantikan localhostkonfigurasi Anda dengan IP lokal komputer Anda. Ini diperlukan, misalnya, dalam pengembangan seluler, ketika smartphone perlu terhubung ke server lokal.



Terima kasih atas perhatiannya!




All Articles