Registro de seguridad
Problema y propósito
El registro de seguridad es un flujo independiente de entradas sobre quién inició sesión en el clúster, quién cambió roles y configuraciones, y qué ocurrió con las máquinas virtuales. Reside en su propia tabla de la base de datos de vStack Center, separado de los registros de diagnóstico de los componentes, y se abre en una pantalla dedicada: Security Event Log.
Sus requisitos son distintos de los de un registro de diagnóstico. Una entrada del registro de seguridad no debe poder sustituirse ni eliminarse sin que se detecte: las investigaciones de incidentes y las auditorías normativas se basan en ella. Por eso, cada entrada lleva un hash SHA-256 que la vincula con las demás, y el clúster puede recorrer toda la cadena e indicar dónde está rota.
Esto plantea preguntas que los administradores necesitan resolver. ¿Qué eventos requieren actuar y cuáles son actividad de fondo? ¿Qué significa el estado «cadena rota»? ¿Adónde va el registro cuando la tabla crece, y en qué se diferencia un archivo de una exportación?
Esta página explica el modelo. Para leer y filtrar eventos, consulte Cómo leer el registro y filtrar eventos; para exportar el registro, descargar un archivo e iniciar una verificación de integridad, consulte Cómo exportar el registro, descargar un archivo y verificar la integridad.
Modelo y entidades
Entrada de evento
Una entrada es un conjunto plano de campos. Tiene tres partes: qué ocurrió y cuándo, quién fue el actor y qué objeto se vio afectado.
| Campo | Qué muestra |
|---|---|
id | identificador numérico de la entrada; se usa para ordenar y direccionar |
event_uuid | UUID del evento |
ts | hora del evento, una marca de tiempo Unix en segundos |
event_type | código del tipo de evento, como auth.login.success |
user_id | identificador del usuario que realizó la acción |
username | nombre del usuario que realizó la acción |
object_type | tipo del objeto sobre el que se realizó la acción |
object_id | identificador del objeto |
object_name | nombre del objeto |
result | resultado: success o failure |
details | información adicional |
remote_ip | dirección del cliente |
request_id | UUID de la solicitud al clúster que generó la entrada |
record_hash | hash SHA-256 de la entrada: un eslabón de la cadena |
acknowledged | marca del usuario actual que indica que el evento se ha leído |
Los campos de actor y de objeto están vacíos cuando el evento no los tiene: el inicio
de sesión en el clúster no tiene objeto, y un evento del sistema no tiene usuario. El
campo request_id vincula el evento con la solicitud al clúster que lo generó: un
buen punto de partida para una investigación cuando una sola acción ha producido
varias entradas.
Estos mismos campos se convierten en columnas del archivo cuando el registro se exporta a CSV o JSON. La tabla en pantalla muestra solo algunos de ellos; el resto aparece en la ficha de cada entrada.
Catálogo de tipos
Un tipo de evento es un código de cadena con puntos: auth.login.success,
auth.login.failure. El clúster mantiene la lista de tipos: cada código tiene una
categoría, un nivel de gravedad y un nombre legible. Este catálogo alimenta el filtro
por tipo de evento y las etiquetas de la tabla, de modo que el conjunto de tipos lo
determina la versión del clúster y no el cliente.
Eventos de los propios nodos
Antes de la versión 3.0.5, el registro solo recogía eventos del plano de gestión. En la 3.0.5 se añadieron los eventos del sistema operativo de los nodos y los del software de virtualización: llegan desde los agentes de los nodos y entran en la misma cadena de hashes.
| Tipo de evento | Qué describe la entrada | Categoría | Gravedad |
|---|---|---|---|
os.ssh_login_success | inicio de sesión SSH correcto en un nodo | auth | info |
os.ssh_login_failure | inicio de sesión SSH fallido en un nodo | auth | warning |
os.user_local_created | creación de una cuenta local en un nodo | auth | notice |
os.user_local_deleted | eliminación de una cuenta local en un nodo | auth | notice |
os.sysctl_changed | cambio de un parámetro del kernel de un nodo (sysctl) | config | warning |
os.boot | arranque de un nodo | system | notice |
os.shutdown | apagado normal de un nodo | system | notice |
os.shutdown_unclean | apagado anómalo de un nodo | system | error |
os.kernel_panic | kernel panic en un nodo | system | critical |
system.service_stopped_unclean | finalización anómala del software de virtualización: terminación del proceso, un fallo o un corte de alimentación en la máquina de gestión | system | error |
vm.console_connected | conexión a la consola de una VM mediante WSS | vm | info |
vm.console_connect_failed | conexión fallida a la consola de una VM | vm | warning |
De estos eventos, solo os.kernel_panic suma al recuento de eventos críticos: su
gravedad es critical, y el contador cuenta los tres niveles superiores. Los
apagados anómalos, tanto de un nodo como del software de virtualización, tienen
gravedad error: no suman al contador, pero sí activan notificaciones por correo
electrónico cuando el umbral es error o inferior.
Las entradas os.shutdown_unclean y system.service_stopped_unclean aparecen en el
siguiente arranque, y no en el momento del fallo: hasta entonces, nada puede
notificarlo. En una instalación limpia, el primer arranque no genera una entrada
falsa.
Categorías y gravedad
Una categoría agrupa los tipos por área. Las entradas y las exportaciones usan un código corto, mientras que el panel de filtros muestra la etiqueta de la interfaz; tres de las seis son distintas:
| Código en la entrada | Etiqueta en el panel de filtros | Área |
|---|---|---|
auth | authentication | autenticación y gestión de accesos |
vm | virtual machines | máquinas virtuales |
config | configuration | configuración de la infraestructura |
role | role | gestión de roles |
system | system | eventos del sistema |
integrity | integrity | supervisión de la integridad |
La gravedad tiene siete niveles, de mayor a menor: emergency, alert, critical,
error, warning, notice, info. El clúster considera críticos los tres niveles
superiores: emergency, alert y critical. Son los niveles que se usan para el
contador de no leídos y para la configuración de notificaciones por correo
electrónico.
Cómo funciona
Cadena de hashes
Cada entrada almacena su propio hash SHA-256 en el campo record_hash, que la
vincula con las entradas contiguas del registro. Eliminar o sustituir una entrada
intermedia rompe el vínculo: los hashes de las entradas posteriores dejan de
coincidir, y la verificación indica el identificador de la entrada en la que se
rompió la cadena.
Este diseño otorga al registro su propiedad principal: solo admite anexar entradas. El registro se puede leer, marcar como leído, exportar y archivar, pero las entradas individuales no se pueden editar ni eliminar. El archivado es la única forma de reducir el tamaño de la tabla.
Verificación de la integridad
La verificación de la cadena se ejecuta en segundo plano. Al iniciarla, el clúster reparte el trabajo de inmediato: divide el registro en partes iguales y las asigna a procesos de trabajo (workers) que procesan sus partes de forma simultánea. Mientras la verificación está en curso, el botón de inicio muestra el porcentaje completado; cuando termina, aparece a su lado un informe con la hora, el resultado y el número de entradas comprobadas.
El resultado es uno de cinco estados. El clúster mantiene el conjunto de estados y sus etiquetas.
| Estado | Significado |
|---|---|
| Never Started | todavía no se ha iniciado ninguna verificación en el clúster |
| Running | la verificación está en curso; el informe muestra el porcentaje completado |
| Completed | la verificación ha terminado; la cadena está intacta |
| Failed | la verificación no ha terminado |
| Chain Broken | la cadena está rota; el informe muestra el identificador de la entrada en la que se rompió |
Cada worker tiene sus propios estados: Running, Completed, Failed, Chain Broken, Stopped, Pending. Sirven para investigar una verificación que se ha detenido: muestran si ha fallado un worker o todos.
En el clúster solo se ejecuta una verificación a la vez. Hasta que termina, se rechaza cualquier otra solicitud de inicio.
Eventos críticos y respuesta
La marca de leído es personal. Responde a «¿ha revisado el usuario actual este evento?» y no a «¿lo ha investigado el equipo?»: dos administradores ven valores distintos para el mismo evento.
Dos mecanismos se basan en esta marca. El indicador de la cabecera muestra el número de eventos críticos no leídos del usuario actual, y las filas de esos eventos se resaltan en la tabla del registro. Marcar los eventos como leídos elimina ambas cosas, ya sea para los eventos seleccionados o para todos los eventos críticos no leídos a la vez. Volver a marcar el mismo evento no produce ningún error.
El tercer mecanismo es el correo electrónico. El clúster envía notificaciones a una
lista de direcciones, con un umbral de gravedad: los eventos por debajo del umbral no
generan correos. El umbral predeterminado es alert, que solo abarca las
infracciones de integridad. Los correos los envía el dispatcher de vStack Center a
través de un servidor SMTP configurado en la VM de gestión. Sin él, las
notificaciones no funcionan aunque estén habilitadas en la interfaz. La
configuración se describe en
Cómo configurar las notificaciones por correo electrónico del registro de seguridad.
Crecimiento de la tabla y archivado
El registro solo admite anexar entradas, por lo que su tabla crece, y ese crecimiento debe limitarse. El archivado automático traslada las entradas antiguas a un archivo CSV comprimido cuando la tabla supera el umbral de tamaño.
| Parámetro | Qué controla | Límites |
|---|---|---|
security_log_archive_enabled | si el archivado automático está habilitado | — |
security_log_archive_target_size | umbral de tamaño de la tabla del registro, en bytes | de 10 MB a 16 GB |
security_log_archive_path | directorio de almacenamiento de los archivos | longitud del nombre 1–256 |
security_log_disk_alert_threshold | umbral de espacio libre por debajo del cual el clúster emite una advertencia, en bytes | como mínimo 100 MB |
Un interruptor situado sobre la tabla del registro habilita y deshabilita el archivado automático. Los otros tres parámetros están en el formulario de configuración de archivos; ambos tamaños de ese formulario se indican en megabytes.
Un archivo es un fichero .csv.gz con un nombre como
security_log_a3f1b2c4_03_01_2025.csv.gz. Para un archivo completado, la lista
muestra el período, el tamaño, el número de entradas, la hora de archivado y la
suma de comprobación SHA-256. Un archivo que todavía se está creando también aparece
en la lista, pero sin estos campos: aún es pronto para descargarlo.
Un archivo y una exportación sirven para fines distintos. Una exportación es una selección puntual basada en filtros: el fichero se crea en un directorio temporal del nodo de gestión, se envía al navegador y se elimina. Un archivo almacena de forma permanente las entradas eliminadas de la tabla: el fichero reside en el directorio de archivos y permanece allí después de la descarga.
Quién puede ver qué
El registro de seguridad es un objeto de nivel de clúster. Está disponible para dos
roles globales: Cluster master (rol 1) y Security Admin (rol 6). Los
roles de VDC no pueden ver el registro: sus eventos abarcan todo el clúster.
El acceso lo conceden los privilegios, no el número de rol, así que compruebe el privilegio.
| id | Nombre en la ficha del rol | Concedido a | Qué permite |
|---|---|---|---|
| 10000 | View Security Log | Cluster master, Security Admin | leer eventos, el catálogo de tipos, el recuento de eventos críticos y el estado de la verificación |
| 10001 | Export Security Log | Cluster master, Security Admin | exportar eventos a CSV y JSON |
| 10002 | Verify Security Log | Cluster master, Security Admin | iniciar la verificación de la cadena de hashes |
| 10003 | View Security Archive | Cluster master, Security Admin | listar archivos |
| 10004 | Export Security Archive | Cluster master, Security Admin | descargar un archivo |
| 10005 | View Security Archive Settings | Cluster master, Security Admin | leer la configuración de archivos |
| 10006 | Edit Security Archive Settings | solo Cluster master | editar la configuración de archivos |
| 10007 | Acknowledge Security Event | Cluster master, Security Admin | marcar un evento como leído |
| 10008 | View Security Notify Settings | Cluster master, Security Admin | leer la configuración de correo electrónico |
| 10009 | Edit Security Notify Settings | solo Cluster master | editar la configuración de correo electrónico |
También hay dos privilegios de configuración de seguridad: View Security Settings
(9000) y Edit Security Settings (9001). Además de la edición, este último permite
leer la configuración de bloqueo; consulte
Sesiones y parámetros de inicio de sesión.
La distinción entre lectura y edición tiene consecuencias prácticas. Security Admin puede ver el registro, los archivos y ambos grupos de configuración, pero solo Cluster master puede cambiar los umbrales de archivado y la lista de destinatarios de correo electrónico. El modelo de privilegios y ámbitos se describe en la referencia de roles y privilegios.
Limitaciones
Una exportación está limitada a 100 000 entradas. Una sola exportación no puede devolver más: el fichero se crea en el disco del nodo de gestión, y el límite se aplica al tamaño de esta operación. Solución alternativa: acote la selección con filtros y un intervalo de tiempo, u obtenga el registro por partes; las entradas históricas se almacenan en archivos.
Las exportaciones no se almacenan en el clúster. El fichero se crea en un directorio temporal, se envía al navegador y se elimina. Solución alternativa: para el almacenamiento a largo plazo, use un archivo en lugar de una exportación; para obtener de nuevo la misma selección, repita la exportación.
Solo se ejecuta una verificación de la cadena a la vez. Una segunda solicitud de inicio se rechaza hasta que termina la primera verificación. Solución alternativa: espere a que termine la verificación en curso; su progreso aparece como porcentaje en el botón, y el identificador de la entrada en la que se rompió la cadena aparece en el informe de la última verificación.
Un archivo incompleto no se puede descargar. Un fichero que todavía se está creando aparece en la lista, pero las solicitudes de descarga se rechazan. Solución alternativa: espere hasta que la entrada muestre una suma de comprobación, un número de entradas y una hora de archivado.
La marca de leído es personal. No sirve para evaluar el trabajo de un turno: solo refleja al usuario actual. La solución alternativa es un proceso acordado y no una solución técnica: haga el seguimiento de si un evento se ha investigado mediante un proceso externo, y use la marca como filtro personal.
Métodos de la API
Operaciones de la API tratadas en esta página: security-event-list,
security-event-get, security-event-types, security-event-critical-count,
security-event-acknowledge, security-event-notify-settings-get,
security-event-notify-settings-set, security-event-export,
security-event-archive-list, security-event-archive-export,
security-event-archive-settings-get, security-event-archive-settings-set,
security-event-log-verify, security-event-log-status,
security-verification-statuses — consulte la
referencia de la API.
Lecturas adicionales
- Cómo leer el registro y filtrar eventos: la pantalla del registro, los filtros de la lista, una entrada individual y la marca de leído.
- Cómo exportar el registro, descargar un archivo y verificar la integridad: exportación a CSV y JSON, archivos, configuración de archivos e inicio de la verificación de la cadena.
- Cómo configurar las notificaciones por correo electrónico del registro de seguridad: el servidor SMTP, los destinatarios, el umbral de gravedad y el contenido de los correos.
- Roles y privilegios: cómo se determina el acceso por privilegio y ámbito.
- No se puede abrir un archivo comprimido descargado del registro de seguridad:
solución de problemas de un fichero
.csv.gzdañado.