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

59 lines
2.1 KiB
Markdown

# 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