# Runbook de incidentes con agentes de IA

Plantilla de https://vericto.com/es/docs/incident-playbook. Completa cada `____`, guarda una
copia donde el equipo de guardia pueda leerla sin el dashboard y revísala después de cada
simulacro y de cada incidente.

Última revisión: ____ por ____

## 1. Quién decide

| Rol | Persona | Suplente | Cómo contactarla |
| --- | --- | --- | --- |
| Responsable del incidente (decide bloquear y desbloquear) | ____ | ____ | ____ |
| Owner o admin de Vericto de guardia (ejecuta el bloqueo) | ____ | ____ | ____ |
| Responsable de la base de datos (rota credenciales) | ____ | ____ | ____ |
| Responsable del agente (corrige el agente) | ____ | ____ | ____ |
| Contacto de seguridad / compliance | ____ | ____ | ____ |

- Cualquiera que vea a un agente comportarse mal puede pedir un bloqueo; decide el responsable del incidente.
- No esperes a conocer la causa para bloquear: bloquear es reversible, y desbloquear necesita al responsable del incidente.
- Escala a ____ si no se puede contactar al responsable del incidente en ____ minutos.

## 2. Inventario de agentes

| Agente | Nombre de la API key en Vericto | Usuario de base de datos | Bases de datos | Principal (registro) | Responsable |
| --- | --- | --- | --- | --- | --- |
| ____ | ____ | ____ | ____ | ____ | ____ |
| ____ | ____ | ____ | ____ | ____ | ____ |

Intervalo de sincronización de reglas del proxy de cada base de producción con agentes: ____ s (recomendado: 30 s).

## 3. Bloquear al agente

- [ ] Anota la hora (T0): ____
- [ ] Dashboard → Respuesta a incidentes → Bloquear un agente. Elige la API key, el usuario de base de datos (en una base o en todas), el principal o "Bloquear todos los agentes". Motivo: ____ (ticket ____).
- [ ] Confirma que el bloqueo figura como activo y lee la cobertura y los avisos (modo monitor, proxies que no pueden aplicarlo).
- [ ] Si la credencial está comprometida: revoca la API key (irreversible) y rota la contraseña del usuario de base de datos: ____
- [ ] Revoca toda política de confianza OIDC o conexión MCP que usara el agente: ____
- [ ] Avisa al responsable del agente y a los interesados: ____

## 4. Verificar que se aplicó

- [ ] El panel de incidentes muestra cada proxy como sincronizado después del bloqueo.
- [ ] Primera sentencia rechazada en cada vía, según el panel o el Audit Trail:

| Vía | Primer rechazo (hora) | Segundos desde T0 |
| --- | --- | --- |
| API de runtime / SDK | ____ | ____ |
| MCP check_sql / CLI | ____ | ____ |
| Proxy TCP (base ____) | ____ | ____ |

- [ ] El registro de auditoría muestra `agent.blocked` con el actor, el motivo, el objetivo y la hora.
- [ ] La alerta llegó a los canales: ____

## 5. Desbloquear

- [ ] El responsable del incidente aprobó el desbloqueo: ____ (hora ____)
- [ ] Dashboard → Respuesta a incidentes → Desbloquear, con el motivo: ____
- [ ] El agente vuelve a funcionar en cada vía: ____

## 6. Registro de simulacros

Criterio de aprobación: vías de API en menos de 5 s; proxy TCP dentro del intervalo de sincronización más 10 s.

| Fecha | Objetivo | T0 | API de runtime | MCP / CLI | Proxy TCP | Desbloqueado a las | Aprobado / no | Lo ejecutó |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |

## 7. Revisión posterior al incidente

- [ ] Reporte del incidente descargado del panel (bloqueo, entradas de auditoría, propagación, primeros rechazos).
- [ ] Audit Trail exportado para la ventana del incidente: ____ a ____
- [ ] Entradas del registro de auditoría del bloqueo y del desbloqueo guardadas.
- [ ] Reportes de checks de la CLI y del MCP de la key del agente guardados.
- [ ] Cronología escrita: detección ____, decisión ____, bloqueo ____, primer rechazo ____, desbloqueo ____
- [ ] Causa raíz y corrección: ____
- [ ] Pendientes (allowlist, columnas sensibles, reglas, intervalo de sincronización, este runbook): ____
