¿Por qué no debes poner credenciales en tu código? Variables de entorno al rescate - Episodio 24

Por qué no debes poner las credenciales en tu código?
Sé que es obvio, pero importante que hablemos de ello
Cuando comencé a conectar la API con servicios externos como PostgreSQL, AWS S3 y JWT, surgió un problema de seguridad importante:
¿Dónde almacenar las credenciales de forma segura?
🚀 Protegiendo credenciales antes de que sea tarde 🔑 📅 Diario de un SaaS
Al principio, las credenciales estaban directamente en el código dentro de app.py y en los archivos de configuración:
DB_HOST = "localhost"
DB_USER = "admin"
DB_PASSWORD = "supersecreta123"
¿El problema?
Si alguna vez subía este código a un repositorio público, cualquiera podría verlas y acceder a la base de datos. 🚨
Menuda imbecilidad la mía, no crees?
Para evitar esto, implementé variables de entorno (.env).
Así que en este post te cuento cómo lo hice y por qué nunca deberías poner credenciales en tu código. 🔒
🔍 ¿Por qué las credenciales en el código son un problema?
Poner credenciales en el código parece una solución rápida, pero trae varios riesgos:
🔴 Exposición accidental: Si subes el código a un repositorio público (GitHub, GitLab), las credenciales quedan expuestas.
🔴 Falta de flexibilidad: No puedes cambiar la configuración sin modificar el código.
🔴 Dificultad para escalar: En un equipo grande, compartir credenciales de forma segura se vuelve complicado.
🔴 Seguridad comprometida: Si alguien accede a tu código, puede conectarse a tu base de datos o servicios externos sin restricciones.
La solución es usar variables de entorno con archivos .env. 🔥

🛠️ Implementación de variables de entorno en Flask
✅ 1. Instalar python-dotenv para manejar variables de entorno
pip install python-dotenv
✅ 2. Crear un archivo .env para almacenar credenciales
En la raíz del proyecto, creé un archivo llamado .env y agregué las credenciales:
DB_HOST=localhost
DB_USER=admin
DB_PASSWORD=supersecreta123
AWS_ACCESS_KEY=MI_ACCESS_KEY
AWS_SECRET_KEY=MI_SECRET_KEY
JWT_SECRET=clave_ultra_segura
🔹 Este archivo no debe subirse a GitHub. Para evitarlo, agregamos .env al .gitignore:
echo ".env" >> .gitignore
✅ 3. Modificar app.py para cargar variables desde .env
En app.py, en lugar de poner las credenciales directamente, usé dotenv para cargarlas:
from dotenv import load_dotenv
import os
# Cargar variables de entorno
load_dotenv()
DB_HOST = os.getenv("DB_HOST")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
AWS_ACCESS_KEY = os.getenv("AWS_ACCESS_KEY")
AWS_SECRET_KEY = os.getenv("AWS_SECRET_KEY")
JWT_SECRET = os.getenv("JWT_SECRET")
Ahora, el código nunca expone credenciales directamente, sino que las carga desde el archivo .env. 🔥
❌ Errores encontrados y cómo los solucioné
🔴 KeyError: 'DB_HOST' al ejecutar Flask
Solución:
- Verificar que
.envexiste y está en la misma carpeta queapp.py. - Asegurar que
load_dotenv()se ejecuta antes deos.getenv().
🔴 Las credenciales seguían visibles en el repositorio
Solución:
- Si
.envya se había subido a GitHub, eliminamos el archivo y lo volvimos a ignorar:
git rm --cached .env
git commit -m "Eliminando credenciales expuestas"
🔴 .env no cargaba en producción
Solución:
- En servidores Linux, especificamos la ruta de
.envenload_dotenv():
load_dotenv("/ruta/del/archivo/.env")
💡 Aprendizajes del proceso
🔹 Nunca almacenes credenciales en el código
No importa si tu repositorio es privado, siempre usa variables de entorno para proteger tus credenciales.
🔹 Los archivos .env deben ignorarse en Git
Si accidentalmente los subes, podrías exponer información sensible.
🔹 python-dotenv facilita la gestión de configuraciones
Cargar variables de entorno con dotenv hace que el código sea más limpio y fácil de escalar.
🔹 Siempre prueba en producción
Asegúrate de que el servidor pueda leer el archivo .env correctamente.
🚀 Próximos pasos
Con las credenciales protegidas, el siguiente paso es estructurar permisos en la API implementando roles en Flask. 🔒
➡️ ¿Usas variables de entorno en tu proyecto?
¿Cómo gestionas tus credenciales de forma segura?
Cuéntamelo en los comentarios.
Si quieres conocer otros artículos parecidos a ¿Por qué no debes poner credenciales en tu código? Variables de entorno al rescate - Episodio 24 puedes visitar la categoría Proyecto-IA.

Deja una respuesta