Raccogliere i log di Auth0
Panoramica
Questo parser estrae gli eventi di 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 soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Account Auth0 con le autorizzazioni necessarie.
Configurare i feed
Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:
- Impostazioni SIEM > Feed
- Hub dei contenuti > Pacchetti di contenuti
Configura i feed da Impostazioni SIEM > Feed
Per configurare un feed:
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Auth0 Logs).
- Seleziona Webhook come Tipo di origine.
- Seleziona AUTH_ZERO come Tipo di log.
- Fai clic su Avanti.
- (Facoltativo) Specifica i valori per i seguenti parametri di input:
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
. - Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
- Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
- Copia e memorizza la chiave segreta. Non puoi visualizzare di nuovo questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
- Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL dell'endpoint nell'applicazione client.
- Fai clic su Fine.
Configurare i feed dall'hub dei contenuti
Specifica i valori per i seguenti campi:
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
.
Opzioni avanzate
- Nome feed: un valore precompilato che identifica il feed.
- Tipo di origine: metodo utilizzato per raccogliere i log in Google SecOps.
- Spazio dei nomi dell'asset: lo spazio dei nomi associato al feed.
Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.
Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
Copia e memorizza la chiave segreta. Non puoi visualizzare di nuovo questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL dell'endpoint nell'applicazione client.
Crea una chiave API per il feed webhook
Vai alla consoleGoogle Cloud > Credenziali.
Fai clic su Crea credenziali e poi seleziona Chiave API.
Limita l'accesso della chiave API all'API Chronicle.
Specifica l'URL dell'endpoint
- Nella tua applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
Attiva l'autenticazione specificando la chiave API e la chiave segreta come parte dell'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 a Google Security Operations.SECRET
: la chiave segreta che hai generato per autenticare il feed.
Configura il webhook Auth0 per Google SecOps
- Accedi alla dashboard Auth0.
- Vai a Monitoraggio > Stream.
- Fai clic su Crea stream di log.
- Fai clic sul pulsante Webhook personalizzato e assegnagli un nome a tua scelta. Ad esempio: Webhook Google SecOps.
- Configura quanto segue:
- URL payload: inserisci l'URL dell'endpoint API Google SecOps.
- Content-Type: imposta l'intestazione Content-Type su application/json. Indica a Google SecOps il formato dei dati inviati.
- (Facoltativo) Token di autorizzazione: configura un secret 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.
- Fai clic su Salva per creare il webhook.
- Attiva l'evento associato all'hook (ad esempio, registra un nuovo utente, accedi).
- Verifica che i log vengano inviati a Google SecOps controllando il feed nella console Google SecOps.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
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 |
Analizzato 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 è "Errore". |
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 derivato da altri campi (vedi sotto). |
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 maiuscolo. |
details.request.path |
target.url |
Mappato direttamente dal campo details.request.path se details.link non è presente, altrimenti derivato da altri campi (vedi sotto). |
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 sotto). |
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 |
Imposta su "AUTH_ZERO". |
metadata.vendor_name |
metadata.vendor_name |
Imposta 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 |
Analizzato 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). Visualizza 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 è 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 "MACHINE" 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 . Visualizza il codice del parser per mappature specifiche. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.