Proteger la información confidencial de tu aplicación es una de las responsabilidades más críticas en el desarrollo web. Ruby on Rails ofrece un sistema robusto de credenciales encriptadas que permite gestionar contraseñas, claves de acceso y datos sensibles sin comprometer la seguridad entre distintos ambientes de trabajo. Comprender este mecanismo te dará control total sobre cómo fluye la información confidencial desde tu entorno local hasta producción.
¿Por qué necesitas secretos en diferentes ambientes de desarrollo?
Cuando trabajas solo en tu computador con una base de datos como SQLite [00:28], no necesitas preocuparte demasiado por las credenciales, ya que esta base de datos viene preconfigurada sin requerir usuario ni contraseña. El problema aparece cuando tu proyecto crece: más desarrolladores se suman, necesitas ambientes de pruebas, un ambiente espejo y finalmente un ambiente de producción [01:15].
Si todos estos ambientes compartieran las mismas credenciales, perderías toda confidencialidad y el manejo se volvería caótico. Cada entorno debe tener su propia configuración aislada para garantizar la seguridad.
¿Cómo evolucionó el manejo de credenciales en Rails?
Rails ha recorrido un camino largo para resolver este problema. Entender esta cronología te ayuda a comprender por qué el sistema actual funciona como lo hace.
- En las primeras versiones existía únicamente el archivo database.yml para configurar el acceso a bases de datos [02:05].
- En Rails 3, los desarrolladores creaban sus propios sistemas de configuración con convenciones individuales por proyecto [02:20].
- En Rails 4 se introdujo secrets.yml, un archivo dedicado a almacenar contraseñas y credenciales de acceso [02:35].
- En Rails 5.2 llegó el concepto de credenciales encriptadas, un salto importante en seguridad que permitía compartir estructuras sin exponer la información [02:55].
- En Rails 6 este sistema maduró con la separación individual de credenciales por ambiente [03:25].
Esta evolución conecta directamente con los principios del manifiesto Twelve-Factor App [03:35], que establece que debes guardar la configuración en el entorno. Rails cumple exactamente con esta práctica recomendada para aplicaciones bien arquitecturadas.
¿Qué archivos intervienen en la gestión de información sensible?
Dentro de la carpeta config de tu proyecto encontrarás dos archivos fundamentales [04:25]:
- credentials.yml.enc: contiene las credenciales encriptadas. No puedes editarlo directamente desde el editor de texto porque su contenido está cifrado.
- database.yml: almacena la configuración de conexión a bases de datos. Fue creado automáticamente con el comando
rails new.
También existe el archivo storage.yml, asociado a servicios de almacenamiento externo [03:12], aunque su uso corresponde a configuraciones más avanzadas.
¿Cómo editar las credenciales encriptadas desde la consola?
Para modificar el archivo credentials.yml.enc necesitas ejecutar un comando especial desde la terminal [05:10]:
bash
EDITOR=nano rails credentials:edit
La palabra EDITOR en mayúscula es una variable de entorno que indica qué editor de texto utilizará Rails para abrir el archivo descifrado. Al ejecutar este comando, accedes al contenido real del archivo.
Dentro encontrarás una clave ya existente llamada secret_key_base [05:40], un valor extenso que Rails usa para establecer esquemas de seguridad entre peticiones. Puedes agregar tus propias claves usando un sistema de llave y valor:
yaml
hello: 123456
Para guardar los cambios presiona Ctrl + X, luego Y y finalmente Enter. Verás el mensaje File encrypted and saved [06:20], confirmando que el archivo fue cifrado y almacenado correctamente.
¿Cómo acceder a las credenciales desde tu aplicación Rails?
Desde la consola de Rails puedes consultar cualquier credencial almacenada utilizando la cadena de métodos [06:35]:
ruby
Rails.application.credentials.hello
=> "123456"
Este mismo patrón funciona dentro de los controladores. Por ejemplo, en el Welcome Controller, puedes asignar el valor de una credencial a una variable de instancia [07:10]:
ruby
def hello
@credentials = Rails.application.credentials.hello
end
Luego, en la vista hello.html.erb, puedes renderizar esa variable usando la sintaxis de ERB [07:35]:
erb
<%= @credentials %>
Aunque este ejercicio muestra las credenciales en pantalla con fines didácticos, en la práctica las credenciales son de uso interno [08:00] y nunca deben exponerse en la interfaz del usuario.
Dominar el sistema de credenciales encriptadas te prepara para trabajar en equipos y desplegar aplicaciones de forma segura. Si tienes dudas sobre cómo organizar tus credenciales por ambiente, comparte tu experiencia en los comentarios.