Uniqkey puede transmitir los eventos de seguridad de su organización a su SIEM (Microsoft Sentinel, Splunk, Elastic, Wazuh o cualquier herramienta que pueda consultar una API REST). Este artículo explica cómo activar la integración en el Admin Portal, cómo funciona la API de eventos y qué puede esperar de los datos.
Quién puede utilizarlo
- La integración se activa para cada organización por un administrador de la organización en el Admin Portal.
- Su SIEM necesita acceso HTTPS saliente al endpoint de eventos de Uniqkey.
- Los eventos son las mismas entradas del registro de auditoría que ya puede ver en Audit logs en el Admin Portal. No se exporta nada que no sea visible allí y nunca se incluyen secretos del vault, contraseñas ni claves.
Paso 1: Activar la integración y generar un token
- Inicie sesión en el Admin Portal como administrador.
- Vaya a Integrations y abra la pestaña SIEM.
- Copie el API endpoint que aparece en la parte superior del widget. Esta es la URL que consultará su SIEM.
- Switch the SIEM toggle on, or click Generate Token. A dialog shows your new token.
- Copie el token and store it in your SIEM's secret store. El token solo se muestra una vez. Después de cerrar el cuadro de diálogo, no podrá volver a mostrarse.
Gestionar el token posteriormente:
- Regenerate Token issues a new token and immediately invalidates the old one. Update your SIEM before or right after regenerating, otherwise polling stops.
- Al desactivar SIEM se elimina el token y se desactiva la integración. Su SIEM recibirá
403 Forbidden until a new token is generated. - Hay un token por organización. Si varias herramientas necesitan el feed, comparten el mismo token.
- La generación o eliminación de un token también queda registrada en el registro de auditoría.
Paso 2: Configurar su SIEM
Todos los conectores SIEM necesitan las mismas tres cosas:
| Configuración | Valor |
|---|---|
| Solicitud | GET on the API endpoint copied from the SIEM tab (.../api/v1/events) |
| Autenticación | HTTP header Authorization: Bearer <your token> |
| Paginación | Persist the cursor from every response and send it back as the cursor query parameter on the next request. Keep polling while has_more is true. |
Una consulta cada 5 minutos es una buena configuración predeterminada. Los eventos están disponibles aproximadamente 2 minutos después de producirse (consulte «Qué esperar de los datos» más abajo), por lo que consultar con una frecuencia superior a cada 2 minutos no aporta ninguna ventaja.
Prueba rápida con curl
curl -s "https://<endpoint>/api/v1/events?limit=5" \ -H "Authorization: Bearer <your token>"
A working setup returns HTTP 200 with a JSON body like the one in the "Response" section. 401 means the Authorization header is missing or not a Bearer token. 403 means the token is unknown, was regenerated, or the integration is disabled.
Referencia de la API
Solicitud
GET /api/v1/events
| Parámetro de consulta | Descripción |
|---|---|
cursor | Marcador de posición de una respuesta anterior. Devuélvalo sin cambios. Cuando está presente, determina dónde comienza la página; start is ignored. |
start | Límite de tiempo inferior, inclusivo, ISO 8601 (por ejemplo 2026-09-01T00:00:00Z). Utilícelo para la primera consulta o para un backfill. Se presupone UTC cuando no se especifica ninguna zona horaria. |
end | Límite de tiempo superior, exclusivo, ISO 8601. Se aplica junto con cursor, lo que permite paginar un backfill limitado. |
limit | Eventos por página. Valor predeterminado: 200; máximo: 1000. Los valores fuera del intervalo se limitan, no se rechazan. |
category | Filtre por una o varias categorías. Repita el parámetro o separe los valores con comas: ?category=authentication,credential_access. Si se omite, se incluyen todas las categorías. |
Una solicitud sin parámetros es válida y devuelve el historial de su organización desde el principio, página por página.
El cursor es opaco. No lo construya, analice ni modifique. Su formato puede cambiar sin previo aviso, pero un cursor recibido seguirá funcionando.
Respuesta
{
"events": [ ... ],
"has_more": true,
"cursor": "eyJUIjoiMjAyNi0wOS0wMVQwOToxNDoyMi4xMTdaIiwiSSI6Ijlh..."
}
- Los eventos se devuelven empezando por los más antiguos.
has_moretells you whether to request the next page right away. Loop onhas_more, not on an emptyeventsarray: a page can be empty while more data remains.cursoris always present, including on empty pages and whenhas_moreisfalse. Store it as your checkpoint after every response.
Los errores devuelven HTTP 400 con un código legible por máquina:
{ "error": { "code": "invalid_cursor", "message": "Cursor is not valid. Submit the cursor from a previous response verbatim." } }
| Código | Significado |
|---|---|
invalid_cursor | The cursor was modified or is not from this API. Restart from a start time. |
invalid_category | Valor de categoría desconocido. El mensaje enumera los valores válidos. |
JSON delimitado por líneas
Si su collector prefiere un evento por línea (entradas REST genéricas de Splunk, Elastic, log shippers), envíe Accept: application/x-ndjson. El cuerpo contendrá un evento JSON por línea sin envoltorio y los campos de paginación pasarán a los headers de respuesta:
Content-Type: application/x-ndjson X-Next-Cursor: eyJUIjoi... X-Has-More: true
Los headers ofrecen las mismas garantías que el cuerpo JSON: el cursor siempre está presente, incluso en una página vacía.
Formato del evento
{
"id": "9a1c7f2e-4b13-4a8e-9f21-0c2b7d5e8a44",
"timestamp": "2026-09-01T09:14:22.117Z",
"category": "credential_access",
"action": "get_vault_password_details",
"action_id": "daf12269-a58f-4e3a-ab01-05b1293a7cac",
"action_source": "extension",
"outcome": "success",
"organization_id": "d5ecd732-4a67-418c-9dea-38a097fba1f6",
"actor": { "id": "3f2a...", "email": "jane.doe@example.com", "type": "user" },
"client": { "system": "extension", "ip": "185.23.44.9" },
"target": { "type": "vault", "id": "7c9d...", "name": "GitHub build account" }
}
| Campo | Descripción |
|---|---|
id | ID único del evento. Utilícelo para eliminar duplicados. |
timestamp | Momento en que ocurrió el evento, en UTC. |
category | Una de las categorías indicadas a continuación. Es estable: una acción determinada nunca cambia de categoría. |
action | Nombre de acción legible, por ejemplo login_to_extension. No es único (la misma acción desde dos interfaces comparte un nombre) ni se garantiza que sea estable. Utilícelo para mostrarlo. |
action_id | Identificador estable del tipo de acción. Cree reglas de detección basadas en este campo, no en action. |
action_source | Qué parte de Uniqkey define la acción: extension, mobile, web_portal, partner_portal, scim_service, desktop_extension, queue_messages, breach. Utilícelo para distinguir dos eventos con la misma action. |
outcome | success or failure. See the note under "What to expect". |
organization_id | El ID de su organización. |
actor.id, actor.email | El empleado que realizó la acción, cuando corresponda. |
actor.type | user, scim, system, supporter (a partner support user), or breach. |
client.system | De dónde procede la solicitud: extension, mobile, web, desktop, or undefined. Muchos eventos contienen undefined; prefiera action_source cuando necesite identificar la interfaz. |
client.ip | IP de origen de la solicitud, cuando se registra. Puede no estar presente. |
target.type, target.id, target.name | El objeto sobre el que se realizó la acción: vault, employee, group, employee_group, resource_collection, or tag. name es el nombre del objeto en el momento del evento y puede no estar presente (las etiquetas nunca incluyen un nombre). |
Categorías
| Categoría | Contiene |
|---|---|
authentication | Inicios y cierres de sesión, ciclo de vida de la contraseña maestra, inicio de sesión SSO y sesiones de navegador y portal de confianza |
account_management | Ciclo de vida de los empleados y cambios de perfil: invitados, activados, archivados y eliminados, incluido el aprovisionamiento SCIM |
privilege_management | Privilegios de administrador concedidos o revocados y acceso de soporte de partners concedido |
group_management | Grupos, grupos de empleados, colecciones de recursos, etiquetas y sus miembros |
credential_access | Se visualizó o copió un secreto, o se solicitaron, aprobaron o rechazaron sus detalles. Es la categoría con mayor volumen de eventos. |
credential_management | Elementos del vault y passkeys creados, editados o eliminados |
sharing | Cualquier cambio que afecte a quién puede acceder a una credencial: comparticiones, revocaciones, caducidades, movimientos y desvinculaciones |
data_export | Datos que salen del sistema de forma masiva, como las exportaciones de logins |
policy_management | Configuración de seguridad, restricciones y plantillas de restricciones, períodos de retención y configuración del proveedor SSO |
device_management | Dispositivos y aplicaciones complementarias vinculados o desvinculados y registro pasivo de la extensión |
organization_management | Detalles de la organización, dominios verificados, archivado y restauración de la organización y generación o eliminación del token SIEM |
threat_detection | Eventos de supervisión de filtraciones de datos y reutilización de contraseñas |
other | Eventos genéricos sin significado de seguridad por sí mismos, además de eventos registrados antes de que existiera la categorización actual |
Como cada evento incluye una categoría, puede dirigir varios conectores al mismo endpoint con diferentes category filtros, por ejemplo para enviar credential_access a un nivel de almacenamiento más económico y mantener el resto en su nivel de análisis.
Qué esperar de los datos
- La entrega se realiza al menos una vez. En determinadas condiciones, un evento puede entregarse dos veces. Elimine duplicados mediante
id. - Los eventos aparecen aproximadamente 2 minutos después de producirse. El feed retiene deliberadamente los 2 minutos más recientes para que no se omita ningún evento mientras aún se completan las escrituras. Por este motivo, su SIEM no debe consultar con una frecuencia superior a cada 2 minutos.
- El historial está limitado por el período de retención del registro de auditoría. El feed proporciona lo que conserva su organización. Consulte Data Cleanup & Retention en la configuración de la organización. Si su collector permanece inactivo durante más tiempo que el período de retención, los eventos caducados no podrán recuperarse. Mantenga el collector en ejecución continua.
outcomeno es una señal de inicio de sesión fallido. Uniqkey no registra actualmente los intentos de inicio de sesión fallidos, por lo que cada eventoauthenticationes correcto.failuresolo se utiliza para acciones cuyo propósito es registrar una denegación, por ejemplo una solicitud de aprobación rechazada en la aplicación móvil. No cree detecciones de fuerza bruta basadas en este feed.client.ipno siempre está presente. Los eventos generados por procesos en segundo plano, SCIM o algunos flujos de cliente no incluyen IP. El valor se obtiene de la solicitud recibida y debe considerarse como informado por el cliente, no verificado por la infraestructura.- Nunca se incluyen datos confidenciales. Las contraseñas, notas seguras, números de tarjeta, claves y otros contenidos cifrados del vault nunca salen del límite de conocimiento cero. El feed solo contiene los metadatos visibles en el registro de auditoría del Admin Portal.
Notas por SIEM
Uniqkey todavía no proporciona paquetes de conectores preconfigurados. El endpoint sigue las mismas convenciones que otros proveedores de identidad y gestores de contraseñas, por lo que funciona el mecanismo estándar de consulta REST de cada SIEM.
- Microsoft Sentinel: use a Codeless Connector or a Logic App with API key authentication (
Authorizationheader, prefixBearer). Configure paging on thecursorresponse field, sent back as thecursorquery parameter, and usehas_moreas the loop condition. The API acceptsstartandcursortogether, which is how the Codeless Connector Framework sends its second page. - Splunk: a REST modular input or an Add-on Builder input works. Send
Accept: application/x-ndjsonso each event is indexed as its own record, and readX-Next-CursorandX-Has-Morefor checkpointing. - Elastic: the Elastic Agent or Filebeat HTTP JSON / CEL input can poll the endpoint, persist
cursoras its cursor state, and loop onhas_more. NDJSON mode is also supported. - Wazuh: Wazuh has no native REST poller. Run a small scheduled script that polls the endpoint, keeps the
cursorin a state file, and writes events as JSON lines to a log file that a Wazuh agent monitors withlog_format: json.
Solución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
401 Unauthorized | No Authorization header, or it does not start with Bearer | Compruebe el formato del header en el conector SIEM. |
403 Forbidden | El token es incorrecto, se volvió a generar o se desactivó la integración. | Genere un nuevo token en la pestaña SIEM y actualice el SIEM. |
400 invalid_cursor | El cursor se editó, se truncó o procede de otra organización. | Reset the connector checkpoint and restart from a start time |
400 invalid_category | Error tipográfico en el filtro de categoría | Utilice uno de los valores de la tabla de categorías. |
| El feed está vacío, pero el Admin Portal muestra eventos. | Los eventos tienen menos de 2 minutos o el filtro de categoría los excluye. | Espere o elimine el filtro. |
| El conector se detiene después de un tiempo. | Se perdió el checkpoint o se volvió a generar el token. | Confirme que el cursor se guarda y que el token del SIEM coincide con el más reciente. |
| Faltan eventos antiguos | El período de retención del registro de auditoría ha expirado para esos eventos. | Compruebe el período de retención y mantenga el collector en ejecución continua. |
| Eventos duplicados | Normal con la entrega at-least-once | Deduplicate on id |
Cuando contacte con soporte, incluya el ID de su organización, la URL exacta de la solicitud sin el token, el estado HTTP y el cuerpo de la respuesta.