Files
save-url-main/documentacion/09_SEGURIDAD_Y_SECRETS.md
T
2026-05-09 14:20:17 -04:00

2.1 KiB

Seguridad y manejo de secretos

No versionar secretos

El repositorio incluye .gitignore para ignorar:

  • .env
  • env/ (virtualenv)

Recomendación:

  • Mantener cualquier credencial fuera del control de versiones.

Dónde viven los secretos en este proyecto

El código en SaveUrl.py toma secretos principalmente desde:

  • Airflow Variables:
    • SQL: DB_MSSQ_USER, DB_MSSQ_PASSWORD, DB_MSSQ_SERVER
    • FTP: FTP_000oqta_USER, FTP_000oqta_PASSWORD, FTP_000oqta_SERVER
    • Webhook: WEBHOOK_URL_NOTIFICATION
    • Kafka básico: BOOTSTRAP_SERVERS_DOCKER, KAFKA_USE_SSL
  • Variables de entorno del proceso (solo cuando KAFKA_USE_SSL=True):
    • SECURITY_PROTOCOL, SASL_MECHANISM
    • SASL_PLAIN_USERNAME, SASL_PLAIN_PASSWORD
    • SSL_CAFILE, SSL_CHECK_HOSTNAME

Implicación:

  • Para Kafka con SSL/SASL, no basta con Airflow Variables: hay que configurar también env vars en el worker/scheduler (o usar un backend de secrets que las exponga como env vars).

Recomendaciones de seguridad

  • Airflow Secrets Backend: usar un backend (Vault/AWS Secrets Manager/Azure Key Vault/GCP Secret Manager) en vez de Variables planas.
  • Rotación:
    • FTP y SQL: rotación periódica y seguimiento de expiración.
    • Kafka: rotación de credenciales SASL y CA si cambia.
  • Principio de mínimo privilegio:
    • SQL user: permisos mínimos necesarios sobre URL_FTP (SELECT/INSERT).
    • FTP user: permisos mínimos para listar/leer rutas necesarias (NLST).
  • TLS:
    • si se habilita SSL en Kafka, asegurar que SSL_CAFILE apunte a un CA dentro del contenedor.

Señales de filtración / exposición

Revisar que no exista:

  • .env real en el repo
  • credenciales hardcodeadas en archivos .py
  • rutas de certificados locales de un desarrollador (ej. paths absolutos de Windows) en configuración de producción

Checklist antes de producción

  • Variables/secretos definidos en sistema seguro
  • .env excluido y no presente en artefactos de build
  • permisos SQL y FTP mínimos
  • endpoints (Kafka/webhook) accesibles solo desde redes necesarias