Raccogliere i log di Auth0

Supportato in:

Panoramica

Questo parser estrae gli eventi dei log di Auth0 dai messaggi in formato JSON. Inizializza i campi UDM, analizza il payload JSON, mappa i campi pertinenti allo schema UDM e classifica gli eventi in base al campo type, impostando azioni di sicurezza e tipi di eventi appropriati.

Prima di iniziare

  • Assicurati di avere un'istanza Google SecOps.
  • Un account Auth0 con le autorizzazioni necessarie.

Configura un feed in Google SecOps per importare i log di Auth0

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log Auth0).
  4. Seleziona Webhook come Tipo di origine.
  5. Seleziona AUTH_ZERO come Tipo di log.
  6. Fai clic su Avanti.
  7. (Facoltativo) Specifica i valori per i seguenti parametri di input:
    • Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio \n.
    • Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
    • Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
  8. Fai clic su Avanti.
  9. Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
  10. Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
  11. Copia e memorizza la chiave segreta. Non potrai più visualizzare questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
  12. Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL endpoint nell'applicazione client.
  13. Fai clic su Fine.

Crea una chiave API per il feed webhook

  1. Vai alla console Google Cloud > Credenziali.

    Vai a credenziali

  2. Fai clic su Crea credenziali e poi seleziona Chiave API.

  3. Limita l'accesso della chiave API all'API Google Security Operations.

Specifica l'URL dell'endpoint

  1. Nell'applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
  2. Attiva l'autenticazione specificando la chiave API e la chiave segreta nell'intestazione personalizzata nel seguente formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Consiglio: specifica la chiave API come intestazione anziché nell'URL. Se il client webhook non supporta le intestazioni personalizzate, puoi specificare la chiave API e la chiave segreta utilizzando parametri di ricerca nel seguente formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Sostituisci quanto segue:

  • ENDPOINT_URL: l'URL dell'endpoint del feed.
  • API_KEY: la chiave API per l'autenticazione in Google Security Operations.
  • SECRET: la chiave segreta che hai generato per autenticare il feed.

Configurare il webhook Auth0 per Google SecOps

  1. Accedi alla dashboard di Auth0.
  2. Vai a Monitoraggio > Stream.
  3. Fai clic su Crea stream di log.
  4. Fai clic sul pulsante Webhook personalizzato e assegna un nome a tua scelta. Ad esempio: Webhook Google SecOps.
  5. Configura quanto segue:
    • URL del payload: inserisci l'URL dell'endpoint API Google SecOps.
    • Content-Type: imposta l'intestazione Content-Type su application/json. In questo modo, Google SecOps viene a conoscenza del formato dei dati inviati.
    • (Facoltativo) Token di autorizzazione: configura un segreto per una maggiore sicurezza. Verrà utilizzato per verificare l'autenticità delle richieste webhook.

Personalizza il payload: puoi personalizzare il payload inviato a Google SecOps modificando la categoria evento. In questo modo puoi selezionare punti dati specifici dall'evento Auth0 e formattarli in base alle esigenze di Google SecOps. Per informazioni dettagliate sulle variabili di contesto e sulle opzioni di scripting disponibili, consulta la documentazione di Auth0. Assicurati che il payload finale sia conforme al formato UDM di Google SecOps previsto.

  1. Fai clic su Salva per creare l'webhook.
  2. Attiva l'evento associato all'hook (ad esempio, registra un nuovo utente, accedi).
  3. Verifica che i log vengano inviati a Google SecOps controllando il feed nella console Google SecOps.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
client_id principal.asset.product_object_id Mappato direttamente dal campo client_id.
client_name principal.hostname Mappato direttamente dal campo client_name.
connection security_result.description Mappato direttamente dal campo connection.
connection_id security_result.rule_id Mappato direttamente dal campo connection_id.
date metadata.event_timestamp Analizzata dal campo date utilizzando il formato ISO8601.
description metadata.description Mappato direttamente dal campo description.
details.error security_result.detection_fields Mappato dal campo details.error. La chiave è "Error".
details.error.oauthError security_result.detection_fields Mappato dal campo details.error.oauthError. La chiave è "oauthError".
details.error.type security_result.detection_fields Mappato dal campo details.error.type. La chiave è "oauth_error_type".
details.ipOnAllowlist security_result.detection_fields Mappato dal campo details.ipOnAllowlist. La chiave è "ipOnAllowlist".
details.link target.url Mappato direttamente dal campo details.link, se presente, altrimenti dedotto da altri campi (vedi di seguito).
details.request.auth.strategy security_result.detection_fields Mappato dal campo details.request.auth.strategy. La chiave è "strategy".
details.request.body.app_metadata.blockedReason security_result.detection_fields Mappato dal campo details.request.body.app_metadata.blockedReason. La chiave è "blockedReason".
details.request.body.app_metadata.customer_id target.user.product_object_id Mappato direttamente dal campo details.request.body.app_metadata.customer_id.
details.request.body.app_metadata.migrated security_result.detection_fields Mappato dal campo details.request.body.app_metadata.migrated. La chiave è "migrated".
details.request.channel security_result.detection_fields Mappato dal campo details.request.channel. La chiave è "channel".
details.request.method network.http.method Mappato direttamente dal campo details.request.method dopo la conversione in lettere maiuscole.
details.request.path target.url Mappato direttamente dal campo details.request.path se details.link non è presente, altrimenti derivato da altri campi (vedi di seguito).
details.response.body.email target.user.email_addresses Mappato direttamente dal campo details.response.body.email.
details.response.body.email_verified security_result.detection_fields Mappato dal campo details.response.body.email_verified. La chiave è "email_verified".
details.response.body.nickname target.user.user_display_name Mappato direttamente dal campo details.response.body.nickname.
details.response.body.user_id target.user.userid Mappato direttamente dal campo details.response.body.user_id.
details.response.statusCode network.http.response_code Mappato direttamente dal campo details.response.statusCode dopo la conversione in numero intero.
details.return_to target.url Mappato direttamente dal campo details.return_to se details.link e details.request.path non sono presenti, altrimenti derivato da altri campi (vedi di seguito).
details.session_id network.session_id Mappato direttamente dal campo details.session_id.
details.stats.loginsCount additional.fields Mappato dal campo details.stats.loginsCount. La chiave è "loginsCount".
details.requiresVerification security_result.detection_fields Mappato dal campo details.requiresVerification. La chiave è "requiresVerification".
details.to target.user.email_addresses Mappato direttamente dal campo details.to.
hostname target.hostname Mappato direttamente dal campo hostname.
ip principal.ip Mappato direttamente dal campo ip.
js_data.audience target.url Mappato direttamente dal campo js_data.audience se details.link, details.request.path e details.return_to non sono presenti.
js_data.details.body.email_verified security_result.detection_fields Mappato dal campo js_data.details.body.email_verified. La chiave è "email_verified".
js_data.details.body.is_signup security_result.detection_fields Mappato dal campo js_data.details.body.is_signup. La chiave è "is_signup".
js_data.details.body.transaction.redirect_uri target.url Mappato direttamente dal campo js_data.details.body.transaction.redirect_uri se details.link, details.request.path, details.return_to e js_data.audience non sono presenti.
js_data.scope security_result.detection_fields Mappato dal campo js_data.scope. La chiave è "scope".
js_data.tracking_id security_result.detection_fields Mappato dal campo js_data.tracking_id. La chiave è "tracking_id".
log_id metadata.product_log_id Mappato direttamente dal campo log_id.
metadata.log_type metadata.log_type Mappato direttamente dal campo log_type.
metadata.product_name metadata.product_name Impostato su "AUTH_ZERO".
metadata.vendor_name metadata.vendor_name Impostato su "AUTH_ZERO".
metadata.product_event_type metadata.product_event_type Mappato direttamente dal campo type.
network.http.parsed_user_agent network.http.parsed_user_agent Analizzati dal campo user_agent.
network.http.user_agent network.http.user_agent Mappato direttamente dal campo user_agent.
security_result.action security_result.action Determinato dal campo type (ALLOW o BLOCK). Consulta il codice del parser per mappature specifiche.
strategy security_result.detection_fields Mappato dal campo strategy. La chiave è "strategy".
strategy_type security_result.detection_fields Mappato dal campo strategy_type. La chiave è "strategy_type".
target.user.email_addresses target.user.email_addresses Mappato direttamente dal campo user_name se si tratta di un indirizzo email, altrimenti derivato da altri campi (vedi sopra).
target.user.userid target.user.userid Mappato direttamente dal campo user_id o details.response.body.user_id o user_name se user_id non è presente.
user_agent network.http.user_agent Mappato direttamente dal campo user_agent.
user_id target.user.userid Mappato direttamente dal campo user_id.
user_name target.user.email_addresses Mappato direttamente dal campo user_name. Imposta su "MACCHINA" se security_result.action è "ALLOW" e type è "slo", "sapi", "s", "ss" o "ssa". Imposta su "OTP" se extensions.auth.type è "MACHINE" e type è "slo". Determinato da una combinazione di campi, tra cui type, client_name, ip, hostname e has_user. Consulta il codice del parser per mappature specifiche.

Modifiche

2024-03-07

  • Correzione di bug:
  • "data.user_name" è stato mappato a "target.user.email_addresses".
  • "data.details.body.email_verified" e "data.details.body.is_signup" sono stati mappati a "security_result.detection_fields".
  • È stata mappata la stringa "data.details.body.transaction.redirect_uri" a "target.url".

2023-06-19

  • Parser appena creato.