Documentación de Oktavia · Decisiones
Guías de decisión
Cuando hay más de una forma de hacerlo: qué auditoría ejecutar, cómo modelar la intención, qué alcance usar, cómo clasificar campos, cómo migrar a la fuente de verdad y cómo preparar evidencia.
Qué auditoría ejecutar
El Engine ofrece la auditoría completa, una en seco, pasos sueltos y una verificación de acceso. Elegir bien ahorra tiempo de los equipos y evita leer resultados viejos como si fueran nuevos.
| Situación | Ejecuta | Por qué |
|---|---|---|
| Primera vez, o después de cambios en la red | run_all con scope=all | Necesitas estado fresco de todo: discovery, respaldo, inventario, topología, render, compliance y vulnerabilidades. |
| Cambiaste o agregaste reglas | compliance_dry | Evalúa las reglas nuevas sobre el snapshot que ya tienes, sin tocar equipos. Segundos en lugar de minutos. |
| Acabas de aplicar un cambio en un equipo | run_all con scope=device, o service_check desde Argos | Verifica sólo lo que cambió; el service_check confirma en vivo interfaz, ping, OSPF o ruta por defecto. |
| Hay equipos sin respuesta o la bóveda cambió | ping_ssh_check | Separa «no alcanzable» de «credencial incorrecta» antes de gastar un discovery completo. |
| Editaste la intención y quieres ver la configuración resultante | render_configs | Regenera la configuración deseada sin recolectar nada. |
| Quieres un respaldo antes de una ventana de cambio | backup_config con el alcance del sitio | Deja los .cfg o JSON lógicos de ese sitio sin correr compliance. |
| Un sitio con Meraki o SD-WAN | Lanza desde la UI | La UI parte el alcance por plataforma y lanza meraki_compliance o sdwan_compliance como acompañantes. |
| Operación diaria | Scheduler: run_all nocturno con ingest: true más ping_ssh_check | Resultados frescos cada mañana sin intervención, y vulnerabilidades en un job aparte por tenant. |
Cómo acotar
- Usa
scope=siteosite_typepara auditorías rutinarias de una región o un arquetipo;devicespara una lista concreta. - Los filtros
filter_roles,filter_platformsylifecyclerecortan dentro del alcance.lifecycle=activeexcluye equipos en preparación o en baja. max_workersalto acelera, pero cada worker es una sesión SSH simultánea: empieza en 3 o 4 en redes con enlaces lentos.completed_with_errorses terminal: revisa el estado por equipo del job para ver qué equipos fallaron y por qué, y vuelve a lanzar sólo esos.
Cómo modelar la intención
La intención es el estándar de la red escrito de forma que una máquina lo compare con la realidad. La regla de diseño de la plataforma es intención primero: el Configurador define el estado deseado; el discovery observa y sugiere, no decide.
- Empieza por lo que ya es estándar. DNS, NTP, syslog, SNMP, SSH, VTY, banners, reloj. Son los servicios que casi todos los equipos comparten; van en
defaultsy producen cumplimiento visible desde la primera auditoría. - Declara en el alcance más amplio que sea cierto. Si todos los switches de acceso llevan el mismo blindaje de puertos, va en
by_role.lan_switch, no en cada equipo. Ver Cuándo usar cada alcance. - Usa los servicios del catálogo, no líneas sueltas. Un servicio trae plantilla por plataforma, formulario y checks. Una línea suelta en una regla manual no genera configuración ni se adapta al fabricante.
- Parte del respaldo cuando no sepas el valor. La plataforma propone un bloque
servicesdesde el running. Revísalo y promueve lo que sea estándar; lo que sea excepción, déjalo como excepción consciente. - Cierra con las reglas de estado. Cuando la configuración ya cumple, declara los vecinos BGP y OSPF esperados, las VLAN del trunk y la raíz STP: así compliance detecta fallas de operación y no sólo de configuración.
- Habilita y deshabilita por catálogo. Un servicio deshabilitado en el catálogo del tenant apaga sus checks en cascada. Es la forma correcta de «todavía no auditamos esto».
Las listas se reemplazan, no se suman. Si defaults declara tres servidores NTP y by_site declara uno, el sitio queda con uno. Si querías cuatro, escribe los cuatro en el sitio.
Dos trampas documentadas: los carriles de API (FortiGate, Junos, Meraki, SD-WAN) en modo estricto consideran drift lo que sobra, así que una intención parcial produce fallos esperables; y el targets vacío de una regla ya no significa «todos los equipos», hay que marcar apply_to_all.
Cuándo usar defaults, by_site, by_role, by_platform o by_device
Los alcances se fusionan en este orden y el último gana: defaults → by_site → by_site_type → by_role → by_platform → by_model → by_tag → by_filter → by_device. La fusión es recursiva para diccionarios; las listas se reemplazan completas.
| Alcance | Úsalo para | Ejemplo | Evita |
|---|---|---|---|
defaults | El estándar de toda la organización | Dominio, servidores NTP corporativos, política de SSH, banner legal | Valores que cambian por región o por equipo |
by_site | Lo que depende de dónde está el equipo | DNS y syslog locales, zona horaria, VLAN propias del sitio | Repetir lo mismo en veinte sitios: eso es by_site_type |
by_site_type | Diseños por arquetipo: oficina, centro de datos, punto de venta | Hardening de puertos más estricto en punto de venta; redistribución distinta en centro de datos | Confundirlo con rol: el arquetipo es del sitio, no del equipo |
by_role | Lo que distingue la función del equipo | bgp, gre_tunnels e ip_sla en wan_router; vlan_database y port_hardening en lan_switch | Declarar en rol algo que en realidad depende del sistema operativo |
by_platform | Lo que depende del sistema operativo | Banners con sintaxis de IOS; ajustes que sólo existen en IOS-XE | Usarlo para distinguir modelos: existe by_model |
by_model | Diferencias de hardware | Modelos sin PoE o sin storm-control | Casi siempre lo cubren las capacidades de plataforma automáticas |
by_tag | Grupos transversales que no son sitio, rol ni plataforma | Primary_router y Secondary_router con prioridades HSRP distintas | Etiquetas que nadie mantiene |
by_filter | Combinaciones con nombre | «Routers WAN de oficinas en IOS-XE» | Filtros que se solapan sin un orden claro |
by_device | La excepción | ASN y vecinos BGP, direcciones de interfaces, un túnel único | Convertirlo en el lugar donde vive todo: si veinte equipos tienen el mismo override, factoriza |
Regla práctica
Pregunta «¿qué tendría que cambiar para que este valor cambie?». Si la respuesta es «la organización», va en defaults; «el sitio», en by_site; «el tipo de sitio», en by_site_type; «la función del equipo», en by_role; «el sistema operativo», en by_platform; «este equipo en particular», en by_device. La herramienta de estandarización del Configurador factoriza automáticamente los servicios idénticos de varios equipos al alcance más amplio que los contiene, sólo si todos coinciden.
Cómo clasificar campos
Antes de agregar un dato a la plataforma conviene decidir de qué naturaleza es. Cada naturaleza tiene su archivo, su dueño y su forma de cambiar.
| Naturaleza | Pregunta que lo identifica | Dónde va | Quién lo cambia | Ejemplos |
|---|---|---|---|---|
| Identidad | ¿Sin esto no sabemos qué equipo es ni cómo llegar? | Inventario base | Una persona, al dar de alta | name, hostname, platform, vendor, group |
| Clasificación | ¿Decide qué estándar aplica? | Inventario base y catálogos globales | Una persona, con los catálogos de roles y tipos de sitio | site, site_type, role, lifecycle, etiquetas |
| Intención | ¿Es lo que queremos que el equipo tenga? | service_vars.json por alcance | Una persona, en el Configurador | Servidores NTP, comunidad SNMP, VLAN, vecinos BGP esperados, blindaje de puertos |
| Regla | ¿Es cómo comprobamos que lo tiene? | intended.json | El Configurador la genera; las de estado se editan en Cumplimiento | Líneas requeridas, vecinos esperados, umbrales de CPU |
| Observado | ¿Lo dice el equipo? | Snapshot normalizado y device_inventory.json | Nadie: lo trae el discovery | model, serial_number, os_version, interfaces, vecinos, rutas, CPU |
| Derivado | ¿Lo calcula la plataforma a partir de otros? | capabilities, device_caps, resúmenes | El Engine | config_render, poe_supported, score_awarded |
| Secreto | ¿Permite entrar al equipo o a un servicio? | Bóveda de credenciales | Un administrador de la organización | Usuario y contraseña SSH, comunidad SNMP, token de API |
Casos que confunden
- La IP de gestión es identidad (
hostnamedel inventario base) aunque también aparezca observada (ip_address). La declarada manda para conectarse; la observada sirve para detectar que alguien la cambió. - La comunidad SNMP es intención (se configura en el equipo) y secreto (Telegraf la usa para leer). Va en la intención como servicio y en la bóveda como credencial
snmp; los reportes la redactan. - El ASN y los vecinos BGP son intención por equipo (
by_device), pero la plataforma también los observa. La reglastate_bgp_neighborscompara ambos. - La versión de software es observada, pero la versión mínima es intención: el servicio
software_versiony la norma de versión en Cumplimiento → Software. - Las etiquetas son clasificación cuando una persona las pone (
device_tags.json) y derivadas cuando salen de una regla (interface_tags.jsonconprefixocontains).
Cómo migrar desde CSV y YAML hacia la fuente de verdad
Muchas instalaciones empiezan con el inventario en archivos del Engine (el CSV de equipos y el inventario interno) y credenciales en archivos locales o variables de entorno. El destino es el inventario por tenant en la UI y la bóveda. Se puede hacer sin perder historial.
- Congela el punto de partida. Corre una auditoría completa y guarda un snapshot del Gemelo con una nota («antes de migrar»). Es la referencia para comparar después.
- Crea la organización en la UI y asigna a los usuarios. Si vienes de una instalación de un solo tenant, el slug
defaultya existe. - Da de alta los catálogos en Provisioning: tipos de sitio, roles y sitios con los mismos códigos que usa el CSV. Un rol que no exista en el catálogo hará que la importación rechace el equipo.
- Importa el CSV en Inventario → Importar, en modo fusión. Revisa
devices_without_management_ipy corrige los equipos cuyohostnameera un FQDN que la UI no pudo convertir en IP. - Migra las credenciales con el comando de importación a la bóveda de la UI, primero en modo de prueba (
--dry-run), revisa el resumen y repite en firme. Comprueba en Integraciones → Credenciales que el alcance de cada una sea el que esperas (global, sitio o equipo). - Sincroniza el inventario con «Sincronizar inventario»: el Engine genera el inventario de la organización desde la fuente de verdad. A partir de aquí, el inventario de la UI manda y los archivos del Engine dejan de afectar las auditorías.
- Mueve la intención. Si tenías
service_vars.jsonen el Engine, impórtalo en el Configurador (JSON o CSV). Si tenías reglas de estado enintended.json, impórtalas en Cumplimiento → Reglas en CSV. Las reglas de configuración se regeneran al guardar los servicios. - Audita de nuevo y compara con el snapshot del paso 1. Las diferencias deberían ser cero o explicables (por ejemplo, un equipo que quedó sin IP de gestión).
- Cierra la puerta trasera. Activa en el Engine el modo «sólo bóveda», que rechaza credenciales de archivos o variables, y borra los archivos locales y las variables legadas que las contenían.
Qué se conserva
Los jobs y artefactos anteriores se conservan, igual que la copia vigente de la organización; los snapshots del Gemelo no se tocan. Lo único que cambia de dueño es el inventario y las credenciales.
Para instalaciones con varios tenants, el paquete de tenant (ZIP con vista previa) mueve una organización completa entre instalaciones sin repetir los pasos.
Cómo preparar evidencia para compliance
Un auditor externo quiere tres cosas: cuál era el estándar, qué se midió contra él y cuándo. Oktavia produce las tres como artefactos; el trabajo es elegirlos y conservarlos.
Qué conservar de cada corte
| Pregunta del auditor | Artefacto | Cómo obtenerlo |
|---|---|---|
| ¿Cuál era el estándar vigente? | intended.json del tenant y service_vars.json | Cumplimiento → Reglas y Configurador → exportar (JSON o csv_review, que cruza con inventario) |
| ¿Qué equipos estaban en alcance? | device_inventory.csv | export_inventory_csv o Inventario → Exportar |
| ¿Qué se midió y con qué resultado? | compliance_results.json, compliance_tests.csv, device_summary.csv, site_summary.csv | Artefactos del job; export_*_csv |
| ¿Cuál era la configuración real? | El respaldo .cfg de cada equipo o su respaldo lógico JSON | Respaldos → descargar por sitio (ZIP) |
| ¿Qué se corrigió, quién lo aprobó y cuándo? | Cambios del Gemelo (CHG-…) con aprobador, ticket y resultado | Job Reports → Cambios del Gemelo |
| ¿Quién accedió a qué? | Eventos de auditoría de seguridad; registro de evidencia del MCP | Seguridad → Acceso; registro de evidencia por organización |
Procedimiento recomendado
- Programa la auditoría del corte con el scheduler y
output_pathhacia un directorio de evidencia: el Engine copia inventario, resumen, resultados y configuraciones en un directorio por job. - Agrega al mismo job los pasos
export_compliance_csv,export_device_summary_csvyexport_site_summary_csv. - Congela un snapshot del Gemelo con el
job_iddel corte y la nota del periodo. Queda inmutable y sirve para el diff del siguiente corte. - Exporta la intención vigente ese día; sin ella los resultados no se pueden reproducir.
- Conserva el
job_id: enlaza inventario, reglas, resultados y configuraciones del mismo instante.
Cómo presentarlo
site_summary.csvabre la conversación: puntaje por sitio con total, pasados y fallados.compliance_tests.csvresponde el detalle: cada prueba con equipo, regla, severidad, resultado, tipo de remediación, ticket y fecha de ejecución.- Separa las tres clases de no cumplimiento:
compliance_failurees hallazgo;data_missingypipeline_inconsistencyson limitaciones de medición y se explican aparte. - Los artefactos ya vienen redactados (sin contraseñas ni comunidades). No compartas los snapshots crudos del discovery.
- Para un hallazgo corregido, la cadena completa es: prueba fallida en el corte N, cambio
CHG-…aprobado con ticket, prueba pasada en el corte N+1. - El veredicto del ciclo cerrado ya trae la comparación antes y después por equipo (corregidas, regresiones, fallas nuevas, siguen fallando): adjúntalo al cambio.
Reporte de red PCI DSS
Para un auditor de PCI, Oktavia genera el reporte de red de PCI DSS v4.0.1 por sitio, sobre los requisitos 1, 2, 6.3.3, 7, 8 y 10. El alcance del entorno de datos de tarjetahabientes son los sitios de punto de venta. Cada requisito sale como cumple, no cumple o no evaluado; sólo cuenta si la familia de fabricante del equipo tiene una verificación para él, así que un «no evaluado» es una limitación de medición, no un hallazgo, y se explica aparte. Trae evidencia por equipo y se imprime en PDF. Apoya al QSA; no lo sustituye.