Cómo cambiar de secretos a credenciales (Ruby on Rails)

Las credenciales en Ruby on Rails 5.2.0 son el nuevo estándar de oro. Los viejos pero inseguros archivos .env están cediendo. En este artículo, aprenderá:



  • por qué y cómo pasar de los secretos a las credenciales,
  • cómo usar claves API en Ruby, YML y js.erb,
  • Solo dale la llave a cada uno de los miembros del equipo de una vez por todas.


Hasta hace 3 años, David Heinemeyer Hansson, el creador del marco de Ruby on Rails, tuiteó sobre la llegada de Rails 5.2.0, pero las nuevas tecnologías a menudo toman tiempo para acelerar y ganar publicidad.



Puede considerarse una llamada de atención si tiene que hacer malabarismos con las claves API con demasiada frecuencia, intercambiándolas con otros desarrolladores de su equipo. Entonces es hora de echar otro vistazo a cómo puede usar las credenciales en una aplicación Ruby on Rails.



¿Por qué utilizar credenciales en lugar de secretos?



En el ciclo de desarrollo, a medida que se desarrolla, se integran cada vez más servicios diferentes en el proyecto. Cada servicio externo tiene su propia clave API. Por lo general, los colegas tardan muy poco tiempo en comenzar a buscar la clave API más reciente. ¡Esto es muy molesto!



O simplemente imagine que se está actualizando la clave API. Cada desarrollador del equipo debe actualizar por separado la clave en los archivos dotenv locales. Parece que todo esto no se corresponde con el concepto de automatización y las ideas de programación, ¿verdad?



Olvídese de intercambiar claves API en los chats o el correo electrónico de Slack. Ya no tiene que violar su política de seguridad.



Credentials in Rails resuelve este problema de manera simple y eficiente: cargar claves en Github.



¿Subiendo a Github? Sí, ¡sube a Github! Pequeña nota: las claves de API están completamente encriptadas.



La gran ventaja de este enfoque es que hay una única clave para compartir con el equipo. ¡Y nunca cambia!



Las nuevas claves de API agregadas por sus pares como credenciales se extraen de Github cada vez que revisa la última versión de la rama principal (anteriormente llamada "rama maestra" ).



La clave se puede encontrar en la carpeta config / master.key.



¿Cómo funciona?



La ejecución bin/rails credentials:edit



en rieles crea dos archivos que se requieren en la carpeta de configuración:



  • credentials.yml.enc



    almacena todas sus claves API. En caso de que sienta curiosidad, la extensión .enc significa cifrado.
  • master.key



    Es la clave que se utiliza para descifrar el archivo cifrado (1.) Asegúrese de agregar master.key al archivo .gitignore.yml



    .


Junto con el repositorio, enviamos nuestro archivo Credentials.yml.enc



a Github, ahora está en buenas manos. Al mismo tiempo, mantenemos master.key con nosotros y la guardamos como si nuestra vida dependiera de ella.



Cambiar a credenciales



Abra el archivo de credenciales haciendo lo siguiente en una terminal:



EDITOR='code --wait' bin/rails credentials:edit







Dependiendo del editor que esté usando, reemplace code



(Código VS). Por ejemplo:



vim o vi = Vim

atom = Atom

subl o stt = Sublime



El archivo de credenciales se abre automáticamente en el editor y espera a que lo actualice y lo cierre nuevamente. Mueva las claves ENV que usa en el archivo .env al archivo credentials.yml.



Reemplace el archivo antiguo .ENV



:



STRIPE_PUBLISHABLE_KEY=pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00t
STRIPE_SECRET_KEY=sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
STRIPE_WEBHOOK_SECRET_KEY=whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB
CLOUDINARY_URL=cloudinary://15031853100444:XOr3XQ-DcZ4dBoan80@DcZ4Boan800U
GOOGLE_API_KEY=S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e
      
      





en credentials.yml



:



stripe:
  publishable_key: pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
  secret_key: sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
  web_hook_secret_key: whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB

google_api_key: S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e

cloudinary:
  cloud_name: abcdefg
  api_key: 12345678910
  api_secret: abc315-VG8Ll8VG8Ll8L
      
      





Nota: La clave de API de Cloudinary se divide en varias partes de acuerdo con la documentación.



¡Todo listo! Para la visualización, las credenciales se pueden ejecutar en una terminal.



Corre bin/rails credentials:show



.



Es hora de decirle adiós a nuestro viejo amigo: el archivo .ENV. Vamos a borrarlo.



Cómo usar credenciales en diferentes formatos como Ruby, YML y JavaScript



Ruby



# nested key
Rails.application.credentials.stripe[:publishable_key]

# single key
Rails.application.credentials.google_api_key
      
      





YML



cloudinary:
  service: Cloudinary
  api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %>
  api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %>
      
      





Cloudinary requiere un archivo JavaScript config / cloudinary.yml adicional







// ruby code only possible with js.erb format
const abc = "<%= Rails.application.credentials.google_api_key %>"
      
      





HTML



<!-- interpolate in script tag --> 
<script src="https://maps.googleapis.com/maps/api/js?key=<%= "#{Rails.application.credentials.google_api_key}"%>"</script
      
      





Cómo compartir claves con un equipo



Comparta la clave master.key



con otros desarrolladores para habilitar el descifrado.



Cada miembro del equipo crea un archivo master.key



localmente en la carpeta de configuración y lo carga en la clave compartida.



Producción



La programación es cada vez más divertida sin la molestia y la molestia de encontrar las claves API adecuadas. Gracias a las credenciales, podemos actualizar la aplicación teniendo en cuenta las recomendaciones de seguridad de la información. Comparta la clave maestra una vez y elimine la tediosa copia.



¡Gracias por la atención!



All Articles