InfraGuard

Resolución de problemas de seguridad

Un tablero de casos que hace pasar los incidentes y las brechas de seguridad por un flujo abierto→en análisis→causa→resuelto→cerrado, y que hace seguimiento automático de los hallazgos críticos promovidos desde el Diagnóstico de seguridad.

Descripción general — qué hace

Seguridad ▸ Resolución de problemas gestiona la respuesta a incidentes y brechas de seguridad como un único tablero de casos con una tubería de cinco etapas:

open → investigating → cause_identified → resolved → closed

Cada caso lleva una estructura de informe 500 (causa directa / causa raíz / resolución / acción preventiva) y una línea de tiempo auditable. Esta pantalla es un espejo del controlador de Servicio ▸ Resolución de problemas: comparte la misma tabla infr_incident, pero filtra por area='security' para mantener los casos de seguridad separados de los incidentes de servicio.

Los casos llegan a este tablero por dos vías:

  1. Alta manual — un operador crea el caso. Orígenes seleccionables: manual · agency · quarantine.
  2. Promoción desde el diagnóstico — los hallazgos fail + crit del Diagnóstico de seguridad se promueven automáticamente a casos (source=detection). Es un origen exclusivo del sistema que los operadores no pueden elegir a mano.

Esta consola no toca directamente el crontab ni los cortafuegos remotos. Es una herramienta de flujo de trabajo que registra y hace seguimiento del proceso de respuesta humano. Las acciones reales de bloqueo o cuarentena están en Lista de bloqueo y Bloqueo automático.


Cuándo utilizarla


Disposición

Franja de KPI

KPI Definición
total Total de casos con area='security'
active Suma de open + investigating + cause_identified
resolved Suma de resolved + closed
MTTR Minutos medios de los casos que tienen a la vez occurred_at y resolved_at
downtime Suma de downtime_min en todos los casos
uptime target OpsPolicy::slaDefaults()['uptime_target']

Tablero de casos

Los casos se ordenan por:

  1. Rango de estado — open → investigating → cause_identified → resolved → closed
  2. Rango de gravedad — crit → warn → info
  3. Más recientes primero — id descendente

Cada tarjeta muestra el título, la gravedad, el estado, la etiqueta de origen, el proyecto o servicio vinculado, la hora de ocurrencia, el tiempo de caída y el número de eventos.

Ventana de detalle

Al abrir un caso, la ventana se divide en dos paneles:

Al pulsar la tubería de estados de la parte superior se abre un diálogo de transición de etapa que muestra la guía de «qué hacer en esta etapa» y permite actualizar en línea los campos de informe de esa etapa.


Cómo utilizarla

Crear un caso (manual)

  1. Pulse [Registrar caso] en la parte superior.
  2. Introduzca el título (obligatorio), la gravedad y el origen (manual / agency / quarantine).
  3. Opcionalmente, indique proyecto, servicio, URL, hora de ocurrencia, impacto y tiempo de caída (minutos).
  4. [Guardar] — se crea un caso nuevo con status=open, area=security y detected_at=now(), y se escribe un evento created en la línea de tiempo.

detection no aparece en la lista de orígenes: es un origen exclusivo del sistema que el Diagnóstico de seguridad genera automáticamente.

Transiciones de estado (tubería)

Pulse el estado de destino en la tubería de la ventana de detalle. Trabajo recomendado en cada etapa:

Etapa Qué hacer en esta etapa
open Devolver el caso a recepción (antes del análisis)
investigating Confirmar los síntomas, acotar el impacto y redactar el resumen
cause_identified Determinar y registrar la causa directa y la causa de fondo (raíz)
resolved Registrar el método de recuperación y la acción preventiva
closed Verificar que las acciones y la prevención están aplicadas y cerrar el caso

Reglas de transición del lado del servidor:

Notas de colaboración

Añadir una nota en la ventana de detalle registra un evento kind=note en la línea de tiempo. No existe una tabla de notas independiente: las notas se consolidan en infr_incident_event.

Eliminación

Al eliminar un caso se eliminan también sus filas de infr_incident_event y la acción queda escrita en el registro de auditoría. (El análisis de diagnóstico original que hay detrás de un caso promovido es independiente y no se elimina.)

Resolución automática de los casos promovidos

Cuando el Diagnóstico de seguridad ingiere el resultado de una sonda, DiagnosticsService::reconcileCases() reconcilia los casos por host:

La resolución automática solo se dispara cuando la comprobación de diagnóstico vuelve a superarse. Los casos creados manualmente (manual/agency/quarantine) nunca se resuelven de forma automática: un operador debe hacerlos avanzar por la tubería.


Fuentes de datos

Tablas

Tabla Función
infr_incident Cuerpo del caso (filtrado por area='security'). Estado, gravedad, origen, campos del informe 500, horas de ocurrencia/resolución/cierre, fingerprint, occurrence_count
infr_incident_event Línea de tiempo del caso (creación, nota, cambio de estado, …)
infr_project Lista de proyectos para la vinculación
infr_service Lista de servicios para la vinculación

Enumeraciones

STATUSES   = [open, investigating, cause_identified, resolved, closed]
SEVERITIES = [info, warn, crit]
SOURCES    = [manual, pulse, alert, agency, quarantine, detection]   # todos
manual-selectable sources = [manual, agency, quarantine]
OPEN_STATUSES (dedup targets) = [open, investigating, cause_identified]
AREAS = [service, security]   # eje de división de la tabla compartida

Campos del informe (estructura 500)

Campo Significado
summary Resumen del síntoma y del impacto
direct_cause Causa inmediata (p. ej. MySQL Too many connections)
root_cause Causa de fondo o raíz (p. ej. fuga de conexiones de un script)
resolution Recuperación aplicada durante el incidente
action_taken Acción preventiva de cara al futuro
downtime_min Tiempo de caída (minutos): origen del KPI downtime
impact Alcance afectado

Puntos de la API

Método · ruta Finalidad
GET /security/resolution Renderizado inicial del tablero
GET /security/resolution/live Refresco por sondeo (casos, KPI, marca de tiempo)
POST /security/resolution/save Crear o actualizar un caso
POST /security/resolution/transition Transición de estado (+ nota o actualización de informe opcionales)
POST /security/resolution/note Añadir una nota de colaboración
POST /security/resolution/delete Eliminar un caso

Acceso


Resolución de incidencias y preguntas frecuentes

P. Un caso que veo en el tablero de Servicio no aparece aquí. Ambos tableros comparten la misma tabla infr_incident, pero se separan por area. Esta pantalla muestra únicamente area='security'. Encontrará los incidentes de servicio en Servicio ▸ Resolución de problemas.

P. No puedo crear un caso con el origen detection. Es el comportamiento esperado. detection es un origen exclusivo del sistema que el Diagnóstico de seguridad crea automáticamente a partir de los hallazgos fail+crit. El alta manual solo ofrece manual, agency y quarantine.

P. Un caso promovido automáticamente ha pasado él solo a resuelto. Cuando la comprobación de diagnóstico subyacente se supera en un análisis posterior, reconcileCases() resuelve automáticamente el caso abierto: resolution se rellena con el texto de resolución automática y se añade un evento de cambio de estado.

P. El MTTR aparece en blanco. El MTTR solo se calcula para los casos que tienen a la vez occurred_at y resolved_at. Los casos sin hora de ocurrencia, o aún sin resolver, quedan excluidos.

P. ¿Puedo indicar una fecha de cierre pasada? Sí. Introduzca un valor en el campo fecha de cierre del diálogo de cierre (la misma interfaz que la hora de ocurrencia) y se guardará tal cual. Si lo deja vacío, el servidor rellena now() solo si todavía no existe ningún valor.

P. ¿Eliminar un caso elimina también su análisis de diagnóstico? No. Un caso promovido y el análisis de diagnóstico que lo originó son independientes. Al eliminar un caso solo se eliminan los eventos de línea de tiempo vinculados a él.


Contenido relacionado

보안 문제 해결 보드
보안 문제 해결 보드