Como usar Autoenv + Transcrypt dentro de un proyecto compartido

En muchos casos si tenemos un proyecto en donde compartimos variables de entornos con datos sensibles como contraseñas de las base de datos o alguna variable al resto del grupo de desarrollo, y queremos mantenerla en un solo archivo al que podemos compartir pero a su veces mantenerla cifrada Autoenv + Transcrypt nos resuelve ese problema.

Transcrypt es sencillamente un script que esta escrito 100% en bash y nos permite hacer un encriptado transparente de los archivos sensibles que son almacenados en un repositorio Git/Github, estos serán cifrados automáticamente cuando realicen un commit, y se descifran automáticamente cuando es necesario echar un vistazo. El proceso de encriptación/desencriptacion se hace generado una "unique salt" para cada archivo a cifrar/descifrar utilizando rutinas de cifrado simétrico del paquete OpenSSL.

Autoenv es un script que permite activar entornos virtuales así como también cargar las variables especificas para ese entorno virtual.

La idea principal sería usar autoenv para almacenar nuestras variables especificas para un entorno virtual determinado en un archivo que posteriormente encriptaremos.

Instalación de Autoenv:

Para instalar autoenv debemos dirigirnos al repositorio en Github del proyecto, clonarlo y hacer algunos ajustes:

hostname:~$ git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv

Luego editamos en nuestro computador, el archivo .bashrc o .zshrc según sea el caso, y agregamos lo siguiente:

hostname:~$ source ~/.autoenv/activate.sh

Luego en nuestra línea de comandos ejecutamos, lo que anteriormente agregamos.

Por ultimo, en nuestro entorno virtual, debemos crear el archivo .env que contendrá todas esas variables especificas para un determinado proyecto, en este ejemplo, el .env que se encuentra en el directorio ~/proyecto_dramatico_github  , contiene lo siguiente:

#Activar virtualenvwrapper
workon proyecto

#MongoDB
MONGODB_DB=database
MONGODB_USER=fulanito
MONGODB_PASSWD=XXX

#PostgreSQL
POSTGRESQL_DB=database
POSTGRESQL_USER=fulanito
POSTGRESQL_PASSWORD=XXX

Lo que sucede ahora, cuando hacemos un cambio de directorio con el comando cd , automáticamente y por "arte de magia" son cargadas las variables de entornos contenidos en el archivo .env de nuestro directorio "~/proyecto_dramatico_github".

Instalación de Transcrypt:

Para su instalación tan solo debemos dirigirnos al repositorio del proyecto en Github, clonarlo en nuestro computador y hacerle un enlace simbólico a nuestro /usr/bin:

hostname:~$ git clone https://github.com/elasticdog/transcrypt.git ~/transcrypt
hostname:~$ sudo ln -s ~/transcrypt/transcrypt /usr/bin/transcrypt

Para inicializar y configurar un repositorio que aun no cuenta con nuestro archivo .env encriptado, debemos posicionarnos en el directorio con el cual estamos utilizando de ejemplo y ejecutar:

hostname:~$ cd ~/proyecto_dramatico_github
hostname:~$ transcrypt

Aceptaremos o modificaremos a conveniencia las opciones que nos muestra en pantalla y el resultado final sería algo como se muestra acá:

hostname:~$ transcrypt
Encrypt using which cipher? [aes-256-cbc] 
Generate a random password? [Y/n] 

The following configuration will be saved:

REPO:     /home/zokeber/proyecto_dramatico_github
CIPHER:   aes-256-cbc
PASSWORD: xjL3eeUyShn2B/Tdr+nIQol+Jj8a25HdSFLUoNnc

Does this look correct? [Y/n] 

The repository has been successfully configured by transcrypt

y luego agregaremos el archivo a encriptar:

hostname:~$ cd ~/directorio_dramatico_github
hostname:~$ echo '.env  filter=crypt diff=crypt' >> .gitattributes
hostname:~$ git add .gitattributes .env
hostname:~$ git commit -m 'Agregada la version encriptada del archivo con variables de entorno a cargar'

Hemos usado los atributos de git para filtrar nuestro archivo encriptado, luego agregarlo y comentarlo. Podremos listar los archivos encriptados, ejecutamos:

hostname:~$ transcrypt --list
.env

Si deseamos mostrar la contraseña generada por transcrypt, sencillamente ejecutamos:

hostname:~$ transcrypt --display
The current repository was configured using transcrypt version 0.9.6 and has the following configuration:

CIPHER: aes-256-cbc
PASSWORD: xjL3eeUyShn2B/Tdr+nIQol+Jj8a25HdSFLUoNnc

Copy and paste the following command to initialize a cloned repository:

transcrypt -c aes-256-cbc -p 'xjL3eeUyShn2B/Tdr+nIQol+Jj8a25HdSFLUoNnc'

Clonar un repositorio con Transcrypt:

Cuando se cuenta con un repositorio clonado y que cuenta con una archivo encriptado por transcrypt es necesario inicializar el repositorio para poder mostrar el contenido del archivo, a lo que simplemente ejecutaremos:

transcrypt -c aes-256-cbc -p xjL3eeUyShn2B/Tdr+nIQol+Jj8a25HdSFLUoNnc

Con esto ultimo, nuestro archivo .env mostrara su contenido de lo contrario permanecerá encriptado. En la pequeña documentación de transcrypt se puede encontrar mas parámetros para usar este bash script.

Y hasta aquí este pequeño post sobre una buena manera que he encontrado para cuando se quiere tener un archivo compartido con dato sensibles y a su vez encriptado dentro de un repositorio Git/Github...