Recopilar registros de Auth0
Información general
Este analizador extrae eventos de registro de Auth0 de mensajes con formato JSON. Inicializa los campos de UDM, analiza la carga útil JSON, asigna los campos relevantes al esquema de UDM y clasifica los eventos en función del campo type, definiendo las acciones de seguridad y los tipos de eventos adecuados.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps.
- Una cuenta de Auth0 con los permisos necesarios.
Configurar feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir feed.
- En la página siguiente, haga clic en Configurar un solo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de Auth0).
- Selecciona Webhook como Tipo de fuente.
- Selecciona AUTH_ZERO como Tipo de registro.
- Haz clic en Siguiente.
- Opcional: especifica los valores de los siguientes parámetros de entrada:
- Delimitador de división: el delimitador que se usa para separar las líneas de registro, como
\n
. - Espacio de nombres de recursos: el espacio de nombres de recursos.
- Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
- Delimitador de división: el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
- Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
- Copia y guarda la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta, pero esta acción hará que la clave secreta anterior quede obsoleta.
- En la pestaña Detalles, copie la URL del endpoint del feed del campo Información del endpoint. Debes especificar esta URL de endpoint en tu aplicación cliente.
- Haz clic en Listo.
Crear una clave de API para la feed de webhook
Ve a la Google Cloud consola > Credenciales.
Haz clic en Crear credenciales y, a continuación, selecciona Clave de API.
Restringe el acceso de la clave de API a la API Chronicle.
Especificar la URL del endpoint
- En tu aplicación cliente, especifica la URL del endpoint HTTPS proporcionada en el feed de webhook.
Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado con el siguiente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendación: Especifica la clave de API como encabezado en lugar de hacerlo en la URL. Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta mediante parámetros de consulta con el siguiente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Haz los cambios siguientes:
ENDPOINT_URL
: URL del endpoint del feed.API_KEY
: la clave de API para autenticarte en Google Security Operations.SECRET
: la clave secreta que has generado para autenticar el feed.
Configurar el webhook de Auth0 para Google SecOps
- Accede al panel de control de Auth0.
- Vaya a Monitorización > Streams.
- Haz clic en Create Log Stream (Crear flujo de registros).
- Haz clic en el botón Webhook personalizado y asigna el nombre que quieras. Por ejemplo, Webhook de Google SecOps.
- Configure lo siguiente:
- URL de carga útil: introduce la URL del endpoint de la API de Google SecOps.
- Content-Type: asigna el valor application/json al encabezado Content-Type. De esta forma, Google SecOps sabe el formato de los datos que se envían.
- Opcional: Token de autorización: configura un secreto para aumentar la seguridad. Se usará para verificar la autenticidad de las solicitudes de webhook.
Personalizar la carga útil: puedes personalizar la carga útil que se envía a Google SecOps modificando la categoría del evento. De esta forma, puedes seleccionar puntos de datos específicos del evento de Auth0 y darles el formato que necesites para Google SecOps. Consulta la documentación de Auth0 para obtener información sobre las variables de contexto y las opciones de scripting disponibles. Asegúrate de que la carga útil final se ajusta al formato UDM de Google SecOps esperado.
- Haz clic en Guardar para crear el webhook.
- Activa el evento asociado al hook (por ejemplo, registrar un nuevo usuario o iniciar sesión).
- Comprueba que los registros se envían a Google SecOps consultando el feed en la consola de Google SecOps.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
client_id |
principal.asset.product_object_id |
Se asigna directamente desde el campo client_id . |
client_name |
principal.hostname |
Se asigna directamente desde el campo client_name . |
connection |
security_result.description |
Se asigna directamente desde el campo connection . |
connection_id |
security_result.rule_id |
Se asigna directamente desde el campo connection_id . |
date |
metadata.event_timestamp |
Se ha analizado a partir del campo date con el formato ISO 8601. |
description |
metadata.description |
Se asigna directamente desde el campo description . |
details.error |
security_result.detection_fields |
Asignado desde el campo details.error . La clave es "Error". |
details.error.oauthError |
security_result.detection_fields |
Asignado desde el campo details.error.oauthError . La clave es "oauthError". |
details.error.type |
security_result.detection_fields |
Asignado desde el campo details.error.type . La clave es "oauth_error_type". |
details.ipOnAllowlist |
security_result.detection_fields |
Asignado desde el campo details.ipOnAllowlist . La clave es "ipOnAllowlist". |
details.link |
target.url |
Se asigna directamente desde el campo details.link , si está presente. De lo contrario, se deriva de otros campos (consulta más abajo). |
details.request.auth.strategy |
security_result.detection_fields |
Asignado desde el campo details.request.auth.strategy . La clave es "strategy". |
details.request.body.app_metadata.blockedReason |
security_result.detection_fields |
Asignado desde el campo details.request.body.app_metadata.blockedReason . La clave es "blockedReason". |
details.request.body.app_metadata.customer_id |
target.user.product_object_id |
Se asigna directamente desde el campo details.request.body.app_metadata.customer_id . |
details.request.body.app_metadata.migrated |
security_result.detection_fields |
Asignado desde el campo details.request.body.app_metadata.migrated . La clave es "migrated". |
details.request.channel |
security_result.detection_fields |
Asignado desde el campo details.request.channel . La clave es "channel". |
details.request.method |
network.http.method |
Se asigna directamente desde el campo details.request.method después de convertirlo a mayúsculas. |
details.request.path |
target.url |
Se asigna directamente desde el campo details.request.path si details.link no está presente. De lo contrario, se deriva de otros campos (consulta la información que aparece más abajo). |
details.response.body.email |
target.user.email_addresses |
Se asigna directamente desde el campo details.response.body.email . |
details.response.body.email_verified |
security_result.detection_fields |
Asignado desde el campo details.response.body.email_verified . La clave es "email_verified". |
details.response.body.nickname |
target.user.user_display_name |
Se asigna directamente desde el campo details.response.body.nickname . |
details.response.body.user_id |
target.user.userid |
Se asigna directamente desde el campo details.response.body.user_id . |
details.response.statusCode |
network.http.response_code |
Se asigna directamente desde el campo details.response.statusCode después de convertirlo en un número entero. |
details.return_to |
target.url |
Se asigna directamente desde el campo details.return_to si no están presentes details.link y details.request.path . De lo contrario, se deriva de otros campos (consulta la información que aparece más abajo). |
details.session_id |
network.session_id |
Se asigna directamente desde el campo details.session_id . |
details.stats.loginsCount |
additional.fields |
Asignado desde el campo details.stats.loginsCount . La clave es "loginsCount". |
details.requiresVerification |
security_result.detection_fields |
Asignado desde el campo details.requiresVerification . La clave es "requiresVerification". |
details.to |
target.user.email_addresses |
Se asigna directamente desde el campo details.to . |
hostname |
target.hostname |
Se asigna directamente desde el campo hostname . |
ip |
principal.ip |
Se asigna directamente desde el campo ip . |
js_data.audience |
target.url |
Se asigna directamente desde el campo js_data.audience si no están presentes details.link , details.request.path y details.return_to . |
js_data.details.body.email_verified |
security_result.detection_fields |
Asignado desde el campo js_data.details.body.email_verified . La clave es "email_verified". |
js_data.details.body.is_signup |
security_result.detection_fields |
Asignado desde el campo js_data.details.body.is_signup . La clave es "is_signup". |
js_data.details.body.transaction.redirect_uri |
target.url |
Se asigna directamente desde el campo js_data.details.body.transaction.redirect_uri si no se incluyen los campos details.link , details.request.path , details.return_to y js_data.audience . |
js_data.scope |
security_result.detection_fields |
Asignado desde el campo js_data.scope . La clave es "scope". |
js_data.tracking_id |
security_result.detection_fields |
Asignado desde el campo js_data.tracking_id . La clave es "tracking_id". |
log_id |
metadata.product_log_id |
Se asigna directamente desde el campo log_id . |
metadata.log_type |
metadata.log_type |
Se asigna directamente desde el campo log_type . |
metadata.product_name |
metadata.product_name |
Se ha asignado el valor "AUTH_ZERO". |
metadata.vendor_name |
metadata.vendor_name |
Se ha asignado el valor "AUTH_ZERO". |
metadata.product_event_type |
metadata.product_event_type |
Se asigna directamente desde el campo type . |
network.http.parsed_user_agent |
network.http.parsed_user_agent |
Analizado a partir del campo user_agent . |
network.http.user_agent |
network.http.user_agent |
Se asigna directamente desde el campo user_agent . |
security_result.action |
security_result.action |
Determinado por el campo type (ALLOW o BLOCK). Consulta el código del analizador para ver las asignaciones específicas. |
strategy |
security_result.detection_fields |
Asignado desde el campo strategy . La clave es "strategy". |
strategy_type |
security_result.detection_fields |
Asignado desde el campo strategy_type . La clave es "strategy_type". |
target.user.email_addresses |
target.user.email_addresses |
Se asigna directamente desde el campo user_name si es una dirección de correo electrónico. De lo contrario, se obtiene de otros campos (consulta la información anterior). |
target.user.userid |
target.user.userid |
Se asigna directamente desde el campo user_id o desde details.response.body.user_id o user_name si user_id no está presente. |
user_agent |
network.http.user_agent |
Se asigna directamente desde el campo user_agent . |
user_id |
target.user.userid |
Se asigna directamente desde el campo user_id . |
user_name |
target.user.email_addresses |
Se asigna directamente desde el campo user_name . Se asigna el valor "MACHINE" si security_result.action es "ALLOW" y type es "slo", "sapi", "s", "ss" o "ssa". Asigna el valor "OTP" si extensions.auth.type es "MACHINE" y type es "slo". Se determina mediante una combinación de campos, como type , client_name , ip , hostname y has_user . Consulta el código del analizador para ver las asignaciones específicas. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.