OP.CONT.3 Pruebas periódicas
Documentos de referencia
- ISO/IEC 27000:
- 27031:2011 - Guidelines for information and communication technology readiness for business continuity
- 27002:2013:
- 17.1.3 - Verify, review and evaluate information security continuity
- NIST SP 800-53 rev4:
- [CP-4] Contingency Plan Testing
- [CP-3] Contingency Training
- Otras referencias:
- ISO 22301:2019 - Security and resilience — Business continuity management systems
- NIST SP 800-34 Rev.1 - Contingency Planning Guide for Federal Information Systems
- FDA Cybersecurity in Medical Devices: Quality System Considerations
Guía de implantación
- El plan de continuidad estará sujeto a pruebas periódicas que permitan comprobar su efectividad y detectar deficiencias en su diseño o implementación.
Las pruebas periódicas incluirán aspectos como:
- Disponibilidad e integridad de los respaldos
- Funcionalidad de los sitios alternativos
- Coordinación entre los equipos
- Procedimientos de comunicación
- Tiempos de ejecución de los procedimientos de recuperación
Implementación en Legit Health Plus
Marco de testing de continuidad
El programa de pruebas periódicas de Legit Health Plus está diseñado para validar la efectividad del plan de continuidad, garantizar que los RTO/RPO definidos se pueden cumplir, y mantener la preparación del equipo para situaciones reales de crisis.
Objetivos del programa de testing
- Validar RTO/RPO: Confirmar que se cumplen objetivos de 30 min RTO y 5 min RPO
- Verificar procedimientos: Asegurar que todos los procedimientos documentados funcionan
- Entrenar equipos: Mantener competencias del personal en respuesta a crisis
- Detectar gaps: Identificar puntos débiles antes de que ocurran incidentes reales
- Cumplir regulaciones: Satisfacer requisitos de testing de FDA, MDR y NIS2
Tipos de pruebas implementadas
Pruebas técnicas automatizadas
- Backup recovery tests: Diarios, automáticos
- Failover tests: Semanales, programados fuera de horas de servicio
- Database replication tests: Continuos, monitorización 24×7
Ejercicios de simulación
- Table-top exercises: Trimestrales, para management y coordinadores
- Technical drills: Mensuales, para equipos técnicos
- Full disaster simulations: Semestrales, end-to-end con todos los equipos
Programa de pruebas estructurado
Cronograma anual de testing
Enero:
- Technical Drill: Fallo base datos principal
- Backup Recovery Test: Full restore Q4 data
- Table-top: Incidente prolongado fin de semana
Febrero:
- Automated Tests: Continuos
- Communication Drill: Cascade de alertas
Marzo:
- Technical Drill: Fallo servicio diagnóstico IA
- Table-top Exercise: Decisiones sobre modo degradado
- Quarterly Review: Análisis métricas Q1
Abril:
- Full Simulation: Fallo multi-región AWS
- Backup Recovery Test: Point-in-time recovery
Mayo:
- Technical Drill: Fallo conectividad principal
- Communication Test: Notificación autoridades
Junio:
- Semi-annual BCP Review: Actualización plan
- Table-top: Coordinación con terceros críticos
Julio:
- Full Simulation: Cyberattack + Recovery
- Technical Drill: Activación sitio respaldo
Agosto:
- Vacation Coverage Test: Equipos reducidos
- Communication Drill: Gestión de crisis en verano
Septiembre:
- Technical Drill: Fallo integración EMR/HIS
- Table-top: Cumplimiento regulatorio en crisis
- Quarterly Review: Análisis métricas Q3
Octubre:
- Full Simulation: Escenario pandemia (trabajo remoto)
- Backup Recovery: Complete system restore
Noviembre:
- Technical Drill: Fallo múltiples componentes
- Annual BCP Audit: Revisión completa plan
Diciembre:
- Year-end Simulation: Preparación para holidays
- Annual Review: Métricas, mejoras, planificación
Niveles de pruebas por complejidad
Nivel 1 - Pruebas automáticas diarias
- Objetivo: Validar componentes básicos sin intervención manual
- Duración: < 30 minutos
- Impacto: Cero en operaciones normales
PRO-CONT-TEST-001: Pruebas automáticas diarias del plan de continuidad
Objetivo: Ejecutar validaciones automáticas diarias de componentes críticos del plan de continuidad sin impacto en operaciones normales.
Frecuencia: Diariamente a las 02:00 AM (horario con menor carga)
Duración total: < 30 minutos
Impacto en servicio: Ninguno (pruebas no invasivas)
Prueba 1: Integridad de backups
PRO-CONT-TEST-001-A: Verificación de integridad de backups de últimas 24 horas
Qué se verifica:
- Obtención del último backup:
- Identificar el backup más reciente (debe tener < 24 horas)
- Registrar antigüedad del backup en horas
- Validación de checksum:
- Verificar la suma de verificación (checksum) del archivo de backup
- Confirmar que el backup no está corrupto
- Resultado: válido o inválido
- Prueba de restauración parcial:
- Restaurar una pequeña muestra de datos en entorno aislado
- Verificar que la restauración completa exitosamente
- No afecta al sistema de producción
- Resultado: exitoso o fallido
Criterios de éxito:
- Checksum válido: SÍ
- Restauración parcial exitosa: SÍ
- Antigüedad del backup: < 24 horas
Estado de la prueba:
- PASS: Si checksum válido Y restauración parcial exitosa
- FAIL: Si cualquiera de las verificaciones falla
- ERROR: Si la prueba no puede ejecutarse (genera alerta inmediata)
Acción en caso de fallo:
- Generar alerta inmediata al equipo DevOps
- Escalar a DBA si no se resuelve en 30 minutos
- Investigar causa raíz del fallo de backup
Información registrada:
- Nombre de la prueba: 'backup_integrity'
- Timestamp de ejecución
- Validez del checksum
- Resultado de restauración parcial
- Antigüedad del backup en horas
- Estado final (PASS/FAIL/ERROR)
Prueba 2: Disponibilidad de sistemas de respaldo
PRO-CONT-TEST-001-B: Verificación de sistemas secundarios listos para failover
Sistemas verificados:
| Sistema | Propósito | Verificaciones |
|---|---|---|
| diagnosis-service-standby | Servicio de diagnóstico IA de respaldo | Salud del servicio, sincronización de datos |
| database-read-replica | Réplica de lectura de PostgreSQL | Salud del servicio, sincronización de datos |
| auth-service-backup | Servicio de autenticación de respaldo | Salud del servicio, sincronización de datos |
Qué se verifica para cada sistema:
- Salud del sistema (health check):
- Verificar que el sistema está ejecutándose
- Verificar que responde a health checks
- Verificar que recursos (CPU, memoria, disco) están en rangos normales
- Resultado: saludable o no saludable
- Estado de sincronización de datos:
- Verificar que los datos están actualizados con el sistema primario
- Medir retraso de replicación (debe ser < 5 segundos)
- Confirmar que no hay errores de sincronización
- Resultado: sincronizado o desincronizado
- Evaluación de disponibilidad:
- Sistema considerado "listo" si salud OK Y sincronización OK
- Contar cuántos de los 3 sistemas están listos
Criterios de éxito:
- Sistemas verificados: 3
- Sistemas listos: 3 (100%)
- Todos los sistemas deben estar saludables y sincronizados
Estado de la prueba:
- PASS: Si los 3 sistemas están listos (health OK + sync OK)
- FAIL: Si algún sistema no está listo
Acción en caso de fallo:
- Identificar qué sistema(s) no están listos
- Generar alerta con detalles específicos
- DevOps debe investigar y corregir dentro de 2 horas
- Si no se resuelve, escalar a arquitecto de sistemas
Información registrada:
- Nombre de la prueba: 'failover_readiness'
- Timestamp de ejecución
- Número de sistemas verificados: 3
- Número de sistemas listos
- Detalles por sistema (nombre, salud, sincronización, disponibilidad)
- Estado final (PASS/FAIL)
Nivel 2 - Ejercicios técnicos mensuales
- Objetivo: Validar procedimientos técnicos específicos con equipos
- Duración: 1-2 horas
- Impacto: Mínimo, fuera de horario de servicio cuando sea posible
Nivel 3 - Simulaciones completas semestrales
- Objetivo: Validar plan completo con todos los stakeholders
- Duración: 4-8 horas
- Impacto: Planificado y comunicado con antelación
Procedimientos de testing detallados
Technical Drill: Fallo del servicio de diagnóstico IA
Preparación (1 semana antes)
- Notificación al equipo: DevOps, Development, QA
- Preparación del entorno: Copia de seguridad del estado actual
- Definición del escenario: Fallo específico a simular
- Criterios de éxito: RTO ≤ 30 min, RPO ≤ 5 min, funcionalidad completa
Ejecución del drill
Paso 1: Simulación del fallo (T+0)
Acciones técnicas de simulación:
Opción A - Fallo completo (recomendado para drill mensual):
- Escalar el deployment del servicio primario de diagnóstico a 0 réplicas
- Esto simula un fallo total del servicio (caída completa)
- Permite validar la detección automática y procedimientos de failover
Opción B - Degradación de rendimiento:
- Reducir límites de memoria del contenedor de diagnóstico a 128Mi
- Esto provoca problemas de rendimiento sin detener el servicio
- Genera alertas de recursos sin causar indisponibilidad total
- Útil para validar umbrales de alertas
Responsable: DevOps Lead
Registro: Documentar en bitácora del drill qué opción se usó y a qué hora
Paso 2: Detección y alerta (T+0 a T+3)
- Verificar que alertas se generan automáticamente
- Confirmar notificaciones al equipo de respuesta
- Validar escalado según procedimientos
Paso 3: Diagnóstico inicial (T+3 a T+8)
- Equipo técnico identifica fallo del servicio
- Evaluación de opciones: reparación vs. failover
- Decisión de activar failover automático
Paso 4: Activación de respaldo (T+8 a T+20)
Acciones técnicas de activación del respaldo:
-
Activar servicio secundario:
- Escalar el deployment del servicio secundario de diagnóstico a 3 réplicas
- Tiempo estimado: 30-60 segundos para que los pods estén listos
- Verificar que los 3 pods reportan estado "Running"
-
Redirigir tráfico al servicio secundario:
- Modificar el selector del load balancer de diagnóstico
- Cambiar de apuntar a 'diagnosis-primary' a 'diagnosis-secondary'
- El cambio es inmediato, pero puede tardar 5-10 segundos en propagarse
-
Verificar conectividad con base de datos:
- Desde un pod del servicio secundario, hacer health check a la réplica de lectura de BD
- Confirmar respuesta exitosa (HTTP 200)
- Si falla, verificar configuración de red y DNS
Responsable: DevOps Engineer
Tiempo objetivo: Completar estos 3 pasos en < 5 minutos
Registro: Anotar tiempo real que tomó cada paso en bitácora del drill
Paso 5: Verificación funcional (T+20 a T+30)
- Ejecutar suite de tests de diagnóstico automatizados
- Validar con imágenes de prueba conocidas
- Confirmar que auditoría y logging funcionan
Criterios de evaluación
Éxito completo (Target):
- RTO ≤ 30 minutos ✅
- RPO = 0 (sin pérdida de datos) ✅
- Funcionalidad completa restaurada ✅
- Todos los procedimientos seguidos ✅
Éxito parcial (Aceptable):
- RTO ≤ 45 minutos ⚠️
- RPO ≤ 5 minutos ⚠️
- Funcionalidad crítica restaurada ⚠️
- Desviaciones menores de procedimiento ⚠️
Fallo (Requiere acción correctiva):
- RTO > 45 minutos ❌
- Pérdida de datos clínicos ❌
- Funcionalidad crítica no disponible ❌
- Procedimientos no seguidos ❌
Table-top Exercise: Gestión de crisis prolongada
Scenario setup
Escenario: Ataque DDoS sostenido + Fallo hardware
Contexto: Miércoles 15:30, hora pico de consultas ambulatorias Situación inicial:
- DDoS ataque detectado a las 15:00
- Medidas de mitigación iniciales han fallado
- A las 15:25 falla servidor principal de base de datos
- 85 profesionales sanitarios conectados
- 23 diagnósticos en proceso
Información adicional disponible durante ejercicio:
- Proveedor cloud reporta "widespread issues" en región
- Cliente importante (Hospital Clínico) pregunta por status
- Medios locales empiezan a reportar "problemas técnicos"
- Es época de gripe, alta demanda de servicios dermatológicos
Participantes y roles
- Crisis Manager (CTO): Toma decisiones estratégicas
- Medical Safety Officer (CMO): Evalúa impacto clínico
- Communications Lead: Gestiona comunicación externa
- Technical Lead (DevOps): Lidera respuesta técnica
- Legal/Compliance: Evalúa obligaciones regulatorias
Desarrollo del ejercicio (90 minutos)
Fase 1: Evaluación inicial (15 min)
- Cada participante recibe briefing de su perspectiva
- Discusión grupal sobre severidad e impacto
- Decisión sobre activación del plan de continuidad
Fase 2: Primeras decisiones (20 min)
- ¿Activar modo degradado inmediatamente?
- ¿Qué comunicar al Hospital Clínico?
- ¿Cuándo notificar a AEMPS/INCIBE?
- Asignación de responsabilidades inmediatas
Fase 3: Complicaciones adicionales (25 min)
- T+30: Respaldo principal también afectado
- T+45: Medio de comunicación llama pidiendo statement
- T+60: Dermatólogo reporta caso urgente de posible melanoma
- Reevaluación de decisiones y estrategia
Fase 4: Resolución y recuperación (20 min)
- T+75: Servicios parcialmente restaurados
- Decisiones sobre comunicación post-incidente
- Planificación de análisis post-mortem
- Evaluación de lecciones aprendidas
Fase 5: Debrief (10 min)
- ¿Qué decisiones fueron correctas?
- ¿Qué información faltó?
- ¿Qué procedimientos necesitan mejora?
Pruebas de componentes específicos
Testing de backups y recuperación
Backup integrity testing (automatizado diario)
PRO-CONT-TEST-002: Verificación automática de integridad de backups
Objetivo: Validar que los backups de la base de datos clínica pueden restaurarse correctamente y contienen datos íntegros.
Frecuencia: Diaria (automática a las 02:00 AM)
Duración: 15-20 minutos
Ubicación de backups: /backups/legit-health/
Log de ejecución: /var/log/backup-test.log
Pasos del procedimiento:
- Identificación del backup más reciente:
- Buscar en el directorio de backups el archivo
.sql.gzmás reciente - Si no se encuentra ningún backup: ERROR - Alerta inmediata al equipo DevOps
- Registrar en log qué archivo de backup se va a verificar
- Buscar en el directorio de backups el archivo
- Creación de entorno de prueba aislado:
- Crear base de datos temporal
bcp_test_restore - Esta DB es solo para testing, completamente aislada de producción
- Si no se puede crear: ERROR - Problema con servidor de BD, escalar a DBA
- No afecta a las bases de datos de producción
- Crear base de datos temporal
- Restauración del backup:
- Descomprimir y restaurar el backup en la base de datos temporal
- Si la restauración falla: ERROR - Backup corrupto o incompleto
- Eliminar DB temporal y registrar fallo
- Alerta crítica: backup no utilizable para recuperación
- Verificación de integridad de datos críticos:
- Contar registros en tablas principales:
- Pacientes (
patients): Número total de pacientes registrados - Estudios (
patient_studies): Número total de estudios dermatológicos - Diagnósticos (
diagnostic_results): Número total de resultados de IA
- Pacientes (
- Contar registros en tablas principales:
- Validación de umbrales mínimos:
- Pacientes: Debe haber ≥ 100 registros
- Estudios: Debe haber ≥ 1,000 registros
- Lógica: Si los números son inferiores a estos umbrales, indica:
- Backup incompleto
- Restauración parcial
- Corrupción de datos
- Si falla validación: ERROR - Backup no confiable
- Registrar los counts obtenidos en el log
- Limpieza del entorno de prueba:
- Eliminar la base de datos temporal
bcp_test_restore - Liberar recursos del servidor
- Completar en todos los casos (éxito o error)
- Eliminar la base de datos temporal
- Registro y reporte de resultados:
- En caso de éxito:
- Registrar en log: timestamp, estado EXITOSO, y counts de cada tabla
- Ejemplo: "2025-01-15 02:18:45: Test de backup EXITOSO - P:15,847 S:124,392 D:98,234"
- Enviar métricas al sistema de monitorización
- Actualizar dashboard con último test exitoso
- En caso de error:
- Registrar en log: timestamp, tipo de error, detalles
- Generar alerta crítica al equipo DevOps
- No actualizar métricas de éxito
- En caso de éxito:
Criterios de éxito:
- Backup encontrado: SÍ
- Restauración exitosa: SÍ
- Pacientes ≥ 100: SÍ
- Estudios ≥ 1,000: SÍ
- DB temporal eliminada: SÍ
Métricas reportadas al sistema de monitorización:
- Estado del test: success/failure
- Número de pacientes restaurados
- Número de estudios restaurados
- Número de diagnósticos restaurados
Acciones en caso de fallo:
- Alerta inmediata al equipo DevOps (Slack, PagerDuty)
- Investigar causa raíz dentro de 1 hora
- Si el problema es con backups recientes, verificar:
- Proceso de generación de backups
- Espacio en disco
- Permisos de archivos
- Integridad del sistema de almacenamiento
- Escalar a DBA si no se resuelve en 2 horas
Responsable: Ejecución automática (cron job), monitoreo por DevOps Team
Full system restore testing (trimestral)
- Objetivo: Validar recuperación completa desde backup
- Entorno: Infraestructura de testing separada
- Duración: 4-6 horas
- Criterios éxito: Sistema completamente funcional, datos íntegros
Testing de failover automático
Database failover testing
PRO-CONT-TEST-003: Test automatizado de failover de base de datos
Objetivo: Validar que el procedimiento de promoción de read replica funciona correctamente y cumple los objetivos de tiempo de recuperación.
Frecuencia: Trimestral (cada 3 meses)
Duración: 15-30 minutos
Entorno: Entorno de pre-producción o ventana de mantenimiento programada
Infraestructura involucrada:
- Base de datos principal:
legit-health-prod.cluster-xxx.eu-west-1.rds.amazonaws.com - Réplica de lectura:
legit-health-replica.cluster-yyy.eu-west-1.rds.amazonaws.com - Región: eu-west-1 (Irlanda)
Procedimiento de ejecución del test:
Fase 1: Validación pre-test (0-2 min)
PRO-CONT-TEST-003-A: Verificación del estado inicial
Qué se verifica:
- Estado de la base de datos principal:
- Debe estar en estado "available" (disponible)
- Si no está disponible: ABORTAR TEST - No se puede continuar sin estado inicial válido
- Estado de la réplica de lectura:
- Debe estar en estado "available" (disponible)
- Si no está disponible: ABORTAR TEST - La réplica debe estar funcional antes del test
- Lag de replicación:
- Medir el retraso entre datos en primary vs replica
- Umbral aceptable: < 1 segundo
- Si el lag es > 1 segundo: ABORTAR TEST - Indica problema de replicación que debe resolverse primero
- Ejemplo de lag alto: "Replication lag alto: 5.3s" - Investigar causa antes de continuar
Resultado: "✓ Estado inicial validado correctamente"
Fase 2: Simulación del fallo (2-3 min)
Acciones:
- Simular fallo de la base de datos principal
- En entorno de test: Detener temporalmente la instancia principal usando AWS Console o CLI
- Nota importante: En producción real, esto sería un fallo genuino, no una simulación
- Registro: Anotar timestamp exacto cuando se simula el fallo
Fase 3: Activación del failover (3-15 min)
PRO-CONT-TEST-003-B: Promoción de read replica a primary
Pasos técnicos:
- Iniciar promoción:
- Registrar timestamp de inicio del failover
- Ejecutar comando de promoción en AWS RDS
- Especificar identificador: 'legit-health-replica'
- La réplica dejará de replicar y se convertirá en instancia primaria independiente
- Espera de completado:
- Monitorizar estado de la réplica en AWS
- Esperar hasta que el estado sea 'available'
- AWS RDS maneja automáticamente:
- Finalización de replicación
- Aplicación de transacciones pendientes
- Cambio de modo a read-write
- Actualización de configuración
- Registro del tiempo:
- Calcular tiempo total de failover (desde inicio hasta disponibilidad)
- Objetivo: < 15 minutos
- Este tiempo incluye todo el proceso de promoción
Resultado esperado: "✓ Read replica promocionada exitosamente"
Fase 4: Validación post-failover (15-20 min)
Qué se valida:
-
Nueva instancia primaria funcional:
- Verificar que la antigua réplica ahora acepta operaciones de escritura
- Confirmar que no está en modo recovery
- Validar que endpoints están actualizados
-
Conectividad de aplicaciones:
- Verificar que servicios pueden conectarse a la nueva primary
- Probar operaciones de lectura y escritura
- Validar que autenticación funciona correctamente
Fase 5: Generación de informe (20-25 min)
Métricas recolectadas:
- Tiempo total de failover (objetivo: < 15 min)
- Estado inicial (PASS/FAIL)
- Resultado de promoción (SUCCESS/ERROR)
- Conectividad de aplicaciones (OK/FAIL)
- Timestamp de inicio y fin
Informe del test:
- Resumen ejecutivo con resultado global
- Tiempos medidos vs objetivos
- Problemas encontrados (si los hay)
- Recomendaciones de mejora
Ejemplo de salida: "Test completado en 12.4 segundos"
Criterios de éxito:
- Estado inicial válido: SÍ
- Promoción exitosa: SÍ
- Tiempo de failover < 15 min: SÍ
- Conectividad de aplicaciones: SÍ
- Pérdida de datos: NO (RPO = 0)
Documentación post-test:
- Completar R-110-004 (Informe de prueba de continuidad)
- Incluir todos los tiempos medidos
- Registrar lecciones aprendidas
- Actualizar procedimientos si se identifican mejoras
Responsables:
- Ejecución: DBA + DevOps Lead
- Supervisi ón: CTO o Arquitecto de Sistemas
- Documentación: QA Lead
Métricas y evaluación de pruebas
KPIs de testing de continuidad
- Test Success Rate: % de pruebas que cumplen criterios de éxito
- RTO Achievement: Tiempo real vs. objetivo (30 min target)
- RPO Achievement: Pérdida de datos vs. objetivo (5 min target)
- Procedure Adherence: % procedimientos seguidos correctamente
- Team Response Time: Tiempo hasta activación de equipos
- Communication Effectiveness: Tiempo notificaciones críticas