@drawohara¡me encanta esto! << haz clic aquí 🐛 🫖 🧚
/ann-sekrets-rb-easily-managed-encrypted-data-in-your-rails-applications
publicado en: 2013-02-21

ref: https://github.com/ahoward/sekrets


NOMBRE
  sekrets.rb

SINOPSIS
  sekrets es una herramienta de línea de comandos y una biblioteca utilizada para gestionar archivos y configuraciones encriptados de manera segura en tus aplicaciones de rails y repositorios de git.

INSTALAR
  gem install sekrets
  gem 'sekrets'

DESCRIPCIÓN
  TL;DR
    # crear un archivo de configuración encriptado

      ruby -r yaml -e'puts({:api_key => 1234}.to_yaml)' | sekrets write config/settings.yml.enc --key 42

    # mostrarlo

      sekrets read config/settings.yml.enc --key 42

    # editarlo

      sekrets edit config/settings.yml.enc --key 42

    # ver que está encriptado

      cat config/settings.yml.enc

    # confirmarlo

      git add config/settings.yml.enc

    # poner la clave de desencriptación en un archivo

      echo 42 > .sekrets.key

    # ignorar este archivo en git

      echo .sekrets.key >> .gitgnore

    # ahora ya no necesitas proporcionar el argumento --key a los comandos

      sekrets read config/settings.yml.enc

      sekrets edit config/settings.yml.enc

    # asegúrate de que este archivo se despliegue en tu servidor

      echo " require 'sekrets/capistrano' " >> Capfile

    # confirmar y desplegar

      git add config/settings.yml.enc
      git commit -am'configuraciones encriptadas'
      git pull && git push && cap staging deploy

    # acceder a estas configuraciones en el código de tu aplicación

      settings = Sekrets.settings_for('./config/settings.yml.enc')


  DESCRIPCIÓN
    sekrets proporciona herramientas de línea de comandos y una biblioteca para gestionar y acceder a archivos encriptados en tu base de código.

    permite verificar información encriptada en un repositorio y gestionarla junto con el resto de la base de código. elimina la necesidad de verificar información no encriptada, claves u otra información sensible.

    sekrets proporciona tanto un mecanismo general para gestionar archivos encriptados arbitrarios como un mecanismo específico para gestionar archivos de configuración encriptados.


  BÚSQUEDA DE CLAVES
    para *todas* las operaciones, desde la línea de comandos o de otra manera, sekrets utiliza el siguiente algoritmo para buscar una clave de desencriptación:

    - cualquier clave pasada directamente como parámetro a una llamada de biblioteca será preferida

    - de lo contrario, el código busca un archivo de clave compañero. por ejemplo, dado el archivo 'config/sekrets.yml.enc' sekrets buscará una clave en

        config/.sekrets.yml.enc.key

      si alguno de estos se encuentra que no esté vacío, el contenido del archivo se utilizará como la clave de desencriptación para ese archivo. nunca debes confirmar estos archivos de clave y también agregarlos a tu .gitignore - o similar.

    - a continuación, se busca un archivo de clave de proyecto. la ruta de este archivo es

        ./.sekrets.key

      normalmente y, en una aplicación de rails

        RAILS_ROOT/.sekrets.key

    - si eso no se encuentra, sekrets busca la clave en el entorno bajo la variable de entorno

        SEKRETS_KEY

      la variable de entorno utilizada es configurable en la biblioteca

    - a continuación, se busca el archivo de clave global, la ruta de este archivo es

        ~/.sekrets.key

    - finalmente, si aún no se ha especificado ni encontrado ninguna clave, se le pide al usuario que ingrese la clave. el prompt solo ocurre si el usuario está conectado a una tty. por lo tanto, por ejemplo, ningún prompt quedará colgado y una aplicación que se inicie en segundo plano como una aplicación de rails administrada por passenger.


    ver Sekrets.key_for para más detalles

  DISTRIBUCIÓN DE CLAVES
    sekrets no intenta resolver el problema de distribución de claves por ti, con una excepción:

    si estás utilizando capistrano para realizar un despliegue 'vanilla' basado en ssh, se proporciona una receta simple que detectará un archivo de clave local y lo copiará mediante scp al(los) servidor(es) remoto(s) al desplegar.

    sekrets asume que el archivo de clave local, si existe, es correcto.

    en inglés sencillo, la receta de capistrano hace:

      scp ./sekrets.key deploy@remote.host.com:/rails_root/current/sekrets.key

    va sin decir que el archivo de clave local nunca debe ser verificado y también debe estar en .gitignore

    la distribución de esta clave entre los desarrolladores está fuera del alcance de la biblioteca. es probable que el correo electrónico sin encriptar sea el mejor mecanismo para la distribución ;-/