Whitepaper de Seguridad
Detalle técnico para equipos IT y revisores de seguridad. Para la postura general ver /trust. Para privacidad ver /privacy.
Última actualización: Mayo 2026
Resumen de arquitectura
SaaS multi-tenant desplegado en Scaleway Kubernetes (Kapsule). Componentes:
• Edge / WAF: Scaleway Load Balancer + terminación TLS.
• Front: Next.js (Node 20).
• API gateway (app-api): Flask + Gunicorn detrás del LB; auth y rate limit por request.
• Operadores por dominio: deployments aislados; service-to-service por DNS interno.
• Datos: Persistent Volumes cifrados por Scaleway; Object Storage en París (fr-par) con SSE.
• Datastores self-hosted (no SaaS terceros): MongoDB, Elasticsearch, RabbitMQ, PostgreSQL.
• Ningún egreso fuera del perímetro UE de Scaleway.
Cifrado
En reposo:
• Persistent volumes: AES-256 (claves gestionadas por Scaleway).
• Object Storage: SSE-S3 en todos los buckets.
• Backups: almacenados cifrados en Object Storage.
En tránsito:
• Endpoints públicos: TLS 1.2+ obligatorio.
• Interno: red privada Scaleway, mTLS entre servicios cuando aplica.
Gestión de claves: Kubernetes Secrets sobre etcd cifrado por Scaleway. Procedimiento de rotación probado trimestralmente.
Autenticación
Solo federada — no mantenemos almacén de contraseñas para usuarios SSO.
• Google OAuth 2.0 (PKCE)
• Microsoft Entra ID: SSO, acceso condicional, MFA y device compliance aplicados por el IdP del cliente.
Tokens de sesión: JWT con validez de 24h, transmitidos por cookies HttpOnly + Secure (samesite=lax) de forma que el JavaScript del cliente no puede leerlos. Los tokens expirados los rechaza el gateway con HTTP 401, exigiendo nueva autenticación.
Clave de firma del JWT (`JWT_SECRET`) almacenada en un Kubernetes Secret sobre etcd cifrado por Scaleway. Procedimiento de rotación documentado, ejecutado al menos anualmente o tras cualquier incidente que afecte al secreto.
Autorización (RBAC)
• Scope por organización: cada llamada resuelve un contexto derivado del JWT.
• Roles: admin (facturación, miembros, settings) y member (uso operativo).
• Aislamiento por workspace: cross-org reads bloqueados a nivel operador, no solo en API.
• Acciones sensibles (borrar workspace, cambio de billing, regenerar API key) requieren admin.
• API keys: por organización, rotables, scope read o read-write.
Audit logging
Eventos capturados:
• Autenticación: sign-in, sign-out, refresh, bloqueo por IP sospechosa.
• Privilegiados: cambios de facturación, alta/baja de miembros, cambio de rol, cambio de subencargado.
• Sujeto de datos: exportación, borrado, opt-out.
• Overrides de admin.
Retención: 90 días hot, 13 meses cold. Exportable a JSON/CSV para Business y Enterprise.
Controles de red
• Tráfico público entra vía Scaleway LB; solo TLS 1.2+.
• Pod-to-pod: service mesh interno; NetworkPolicies restringen tráfico cross-namespace.
• Egreso: solo a APIs de YouTube/TikTok/Instagram, Stripe, RapidAPI y canales de actualización del OS.
• Sin SSH en nodos de producción; acceso admin via Scaleway IAM con audit log.
Rate limiting y protección frente a abuso
Límites de tasa aplicados en el gateway de cara al cliente:
• Peticiones autenticadas: 240 / minuto por token (dimensionado para los bursts en frío de los dashboards).
• Peticiones anónimas: 40 / minuto por IP.
• Lecturas de brand-profile (logos, feeds de menciones): presupuesto separado de 180 / minuto para que las páginas con muchas marcas no compitan con el resto del dashboard.
Excederlos devuelve HTTP 429 con cabecera `Retry-After`. Ventana deslizante de 60 segundos.
WAF upstream: Scaleway Load Balancer ofrece protecciones L4 básicas (SYN flood, límites de conexión) antes de la capa de rate-limit.
Gestión de vulnerabilidades
• Escaneo de dependencias: pip-audit en cada build Python, npm audit en cada build JS; CI falla en High/Critical.
• Escaneo de imágenes: Scaleway Container Registry.
• SLAs de parche: CVE Crítico ≤ 7 días, Alto ≤ 30, Medio ≤ 90.
• Buzón de divulgación responsable: security@yourbrandontime.com — acuse en 2 días hábiles, actualización en 5.
Backups y DR
Cadencia:
• PostgreSQL: pg_dump diario 02:00 Europe/Madrid → Object Storage, retención 10 días.
• MongoDB: mongodump diario 02:30 → Object Storage, retención 10 días.
• Elasticsearch: repositorio de snapshots contra Object Storage; recuperación por índice probada.
• Config de aplicación: versionada en Git; helm charts fijados.
Objetivos: RPO ≤ 24h, RTO ≤ 8h.
Respuesta a incidentes
• On-call rotativo 24/7.
• Healthchecks sintéticos cada 60s sobre API gateway, throughput del pipeline, backlog de cola, ES heap, RabbitMQ.
• Alertas: warning → Discord; critical → Discord + email + paging.
• Comunicación a clientes: status page (roadmap), banner in-app, email a workspaces afectados.
• Notificación de brecha 72h por canal de contacto del DPA.
• Post-mortem en 14 días para incidentes con impacto material.
Pruebas de terceros
Estado actual:
• Infraestructura Scaleway subyacente: SOC 2 Type II e ISO 27001 (informe disponible vía portal Scaleway).
• Pentest a nivel de aplicación: no completado a Mayo 2026.
Podemos contratar pentest externo bajo demanda (4-6 semanas) y compartir resumen ejecutivo bajo MNDA. Prospects Enterprise que lo necesiten como gating item pueden escribir a info@yourbrandontime.com.
Cómo escalar un problema de seguridad
Email: security@yourbrandontime.com
Clave PGP pública:
Descarga: https://yourbrandontime.com/security/yourbrandontime-security.asc
Fingerprint: 8434 1ABF FEBF F870 E55C 003A 8CAF 6554 9FE2 7AC2
Expira: 2028-05-12
Descubrimiento: https://yourbrandontime.com/.well-known/security.txt (RFC 9116)
Para incidentes activos con datos de cliente: incluir "INCIDENT" en el asunto — ruta directa al on-call.