Almaceno claves de producción directamente en el repositorio de Git

imagen



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



La peculiaridad del localentorno es que el script decrypt.shtambién puede reemplazar localhosten 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!




All Articles