Raccogli i log del proxy web Netskope
Questo documento spiega come importare i log del proxy web Netskope in Google Security Operations utilizzando Cloud Storage V2.
Netskope fornisce un gateway web sicuro cloud-native che ispeziona e controlla il traffico web in tempo reale. I log delle transazioni web (WebTx) acquisiscono record dettagliati di ogni sessione HTTP e HTTPS elaborata dal proxy Netskope, tra cui l'identità dell'utente, l'applicazione, la categoria dell'URL, i verdetti relativi alle minacce e alla DLP e i metadati di rete.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto Google Cloud con l'API Cloud Storage abilitata
- Autorizzazioni per creare e gestire i bucket Cloud Storage
- Autorizzazioni per gestire le policy di Identity and Access Management (IAM) sui bucket Cloud Storage
- Accesso privilegiato al tenant Netskope con credenziali di amministratore
Opzione 1: streaming dei log di Netskope su Cloud Storage
Utilizza questa opzione se hai un abbonamento Netskope Log Streaming attivato sul tuo tenant. Netskope Log Streaming invia i file di log WebTx direttamente al tuo bucket Cloud Storage come file .gzip compressi a un intervallo fisso di 240 secondi.
Crea un bucket Cloud Storage
- Vai alla consoleGoogle Cloud .
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome globalmente univoco (ad esempio netskope-webtx-logs)Tipo di località Scegli in base alle tue esigenze (Regione, a due regioni, multiregionale) Località Seleziona la località più vicina alla tua organizzazione (ad esempio, us-central1)Classe di archiviazione Standard (consigliato per i log ad accesso frequente) Controllo degli accessi Uniforme (consigliato) Strumenti di protezione (Facoltativo) Abilita il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Crea un service account Google Cloud
Netskope Log Streaming richiede un service account Google Cloud con autorizzazioni in scrittura per il tuo bucket Cloud Storage. Il file della chiave JSON di questo account di servizio viene utilizzato da Netskope per l'autenticazione durante l'invio dei file di log.
- Nella console Google Cloud , vai a IAM e amministrazione > Account di servizio.
- Fai clic su Crea account di servizio.
- Fornisci i seguenti dettagli di configurazione:
- Nome del service account: inserisci
netskope-log-streaming - Descrizione account di servizio: inserisci
Service account for Netskope Log Streaming to push WebTx logs to GCS
- Nome del service account: inserisci
- Fai clic su Crea e continua.
- Nella sezione Concedi a questo account di servizio l'accesso al progetto:
- Fai clic su Seleziona un ruolo.
- Cerca e seleziona Storage Object Creator.
- Fai clic su Continua.
- Fai clic su Fine.
Genera la chiave JSON
- Nella console Google Cloud , vai a IAM e amministrazione > Service account, fai clic sul account di servizio
netskope-log-streaming. - Seleziona la scheda Chiavi.
- Fai clic su Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON come tipo di chiave.
- Fai clic su Crea.
Un file di chiave JSON viene scaricato automaticamente. Salva questo file in modo sicuro. Nella sezione successiva, incollerai i contenuti completi di questo file in Netskope.
Concedi le autorizzazioni in scrittura su un bucket Cloud Storage
- Nella console Google Cloud , vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
netskope-webtx-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: inserisci l'indirizzo email del account di servizio (ad esempio
netskope-log-streaming@YOUR_PROJECT_ID.iam.gserviceaccount.com) - Assegna i ruoli: seleziona Storage Object Creator
- Aggiungi entità: inserisci l'indirizzo email del account di servizio (ad esempio
Fai clic su Salva.
Crea il flusso di log
- Accedi al tenant Netskope con le credenziali di amministratore.
- Vai a Impostazioni > Strumenti > Streaming dei log.
- Fai clic su Crea stream.
- Nel campo Nome, inserisci un nome leggibile per lo stream. Ad esempio,
Google SecOps WebTx GCS. - Seleziona GCP Cloud Storage come tipo di destinazione.
Fornisci i seguenti dettagli di configurazione:
Bucket: inserisci il nome del bucket Cloud Storage (ad esempio
netskope-webtx-logs).- (Facoltativo) Percorso: inserisci un percorso della cartella all'interno del bucket in cui verranno archiviati i log (ad esempio, `netskope/webtx/{%Y}`).
Chiave privata: incolla i contenuti completi del file della chiave JSON generato nella sezione precedente, come un singolo oggetto JSON che inizia con
{e termina con}. Include i campitype,project_id,private_key_id,private_key,client_emaileclient_id.
Esamina le Opzioni di pubblicazione: la frequenza di push è di 240 secondi.
Fai clic su Salva (o Crea) per attivare lo stream. Netskope convalida le credenziali scrivendo un oggetto di test denominato
netskope-test-file.txtnel bucket.
Configura un feed in Google SecOps per importare i log Netskope WebTx da Cloud Storage
Per creare il feed Google SecOps e concedere le autorizzazioni IAM, segui questi passaggi:
Recupera il account di servizio Google SecOps
Google SecOps utilizza un account di servizio univoco per leggere i dati dal bucket Cloud Storage. Devi concedere a questo account di servizio l'accesso al tuo bucket.
- Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad es.
Netskope WebTx Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona Netskope Web Proxy come Tipo di log.
- Fai clic su Ottieni service account.
Verrà visualizzato un indirizzo email univoco del account di servizio, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia questo indirizzo email per utilizzarlo nel passaggio successivo.
Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URL bucket di archiviazione: inserisci l'URI del bucket Cloud Storage con il percorso del prefisso:
gs://netskope-webtx-logs/netskope/webtx/- Sostituisci:
netskope-webtx-logs: il nome del tuo bucket Cloud Storage.netskope/webtx/: il prefisso del percorso configurato in Netskope Log Streaming (lascia vuoto per la directory principale).
- Sostituisci:
Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Non eliminare mai i file: non eliminare mai i file dall'origine (opzione consigliata per i test).
- Elimina i file trasferiti e le directory vuote: elimina i file e le directory vuote dall'origine dopo il completamento di un recupero riuscito.
Età massima dei file: includi i file modificati negli ultimi giorni (il valore predefinito è 180 giorni)
Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset
Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Controlla la nuova configurazione del feed di notizie nella schermata Finalizza e poi fai clic su Invia.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
Il account di servizio Google SecOps richiede due ruoli nel bucket Cloud Storage: Storage Object Viewer per leggere gli oggetti di log e un ruolo a livello di bucket per leggere i metadati del bucket.
- Vai a Cloud Storage > Bucket.
- fai clic sul nome del bucket (ad esempio
netskope-webtx-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'indirizzo email del account di servizio Google SecOps (ad esempio,
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com) - Assegna i ruoli: seleziona entrambe le seguenti opzioni:
- Storage Object Viewer: legge gli oggetti di log.
- Storage Legacy Bucket Reader: legge i metadati del bucket. Se hai selezionato l'opzione di eliminazione Elimina i file trasferiti e le directory vuote, seleziona Storage Legacy Bucket Writer, che concede anche l'autorizzazione di eliminazione.
- Aggiungi entità: incolla l'indirizzo email del account di servizio Google SecOps (ad esempio,
- Fai clic su Salva.
Opzione 2: utilizza Netskope Cloud Exchange Log Shipper per Cloud Storage
Utilizza questa opzione se hai eseguito il deployment della piattaforma Netskope Cloud Exchange con il modulo Log Shipper configurato. Log Shipper estrae i log WebTx dal tuo tenant Netskope e li invia come file .gzip compressi a un bucket Cloud Storage, che Google SecOps legge tramite un feed Cloud Storage V2.
Prima di iniziare (Cloud Exchange)
Assicurati di soddisfare i seguenti prerequisiti aggiuntivi per questa opzione:
- Un tenant Netskope Cloud Exchange con il plug-in Tenant e il modulo Log Shipper già configurati.
- Il plug-in di origine Netskope CLS configurato in Log Shipper (estrae i dati dal tenant Netskope).
- Un bucket Cloud Storage creato per archiviare i log di WebTx. Se non ne hai creato uno, segui i passaggi descritti in Crea un bucket Cloud Storage.
- Un service account Google Cloud con accesso in scrittura al bucket Cloud Storage. Se non ne hai creato uno, segui i passaggi descritti in Crea un service account Google Cloud , Genera la chiave JSON e Concedi le autorizzazioni in scrittura su un bucket Cloud Storage.
Configura il plug-in di destinazione Cloud Storage
- In Cloud Exchange, vai a Impostazioni > Plugin Store.
- Cerca e seleziona il plug-in Google Cloud SCC (Google GCS).
- Fai clic su Configura nuovo plug-in (o aggiungi una nuova configurazione del plug-in).
- Fornisci i seguenti dettagli di configurazione:
- Configuration Name (Nome configurazione): inserisci un nome descrittivo (ad esempio
GCS WebTx Destination). - Mappatura: seleziona un file di mappatura. Per i log WebTx inviati come file
.gziporiginali, non viene applicata alcuna trasformazione di mappatura. - Bucket: inserisci il nome del bucket Cloud Storage (ad esempio
netskope-webtx-logs). - (Facoltativo) Percorso: inserisci il percorso di una cartella (ad esempio
netskope/webtx/). - File della chiave: incolla i contenuti completi del file della chiave JSON del account di servizio, non solo il valore
private_key.
- Configuration Name (Nome configurazione): inserisci un nome descrittivo (ad esempio
- Fai clic su Salva.
- La nuova configurazione del plug-in verrà visualizzata nella pagina Log Shipper > Plug-in.
Configura una regola aziendale (facoltativo)
Per impostazione predefinita, la regola aziendale Tutti filtra tutti gli avvisi e gli eventi. Se vuoi filtrare i log WebTx in modo specifico, crea una nuova regola aziendale:
- In Log Shipper, vai a Business Rules (Regole aziendali).
- Fai clic su Crea nuova regola.
- Inserisci un Nome regola (ad esempio
WebTx Only). - Configura i filtri in modo da includere solo i dati WebTx.
- Fai clic su Salva.
Configura la distribuzione dei log
- In Log Shipper, vai a Invio di log.
- Fai clic su Aggiungi configurazione di distribuzione dei log.
- Fornisci i seguenti dettagli di configurazione:
- Configurazione origine: seleziona il plug-in di origine Netskope CLS (ad esempio
WebTxCLSoNetskope CLS). - Destination Configuration (Configurazione destinazione): seleziona il plug-in di destinazione Cloud Storage che hai configurato (ad esempio,
GCS WebTx Destination). - Regola aziendale: seleziona una regola aziendale (ad esempio
AlloWebTx Only).
- Configurazione origine: seleziona il plug-in di origine Netskope CLS (ad esempio
Fai clic su Salva.
Per ottenere altri dati storici, fai clic sull'icona Estrai dati storici dalle azioni di Pubblicazione dei log.
Seleziona un intervallo di date Storico Da e A e fai clic su Estrai.
Configura un feed in Google SecOps per importare i log Netskope WebTx da Cloud Storage
Segui gli stessi passaggi dell'opzione Netskope Log Streaming per creare un feed Google SecOps e concedere le autorizzazioni IAM:
- Recupera il service account Google SecOps: crea un feed con Google Cloud Storage V2 come tipo di origine e Proxy web Netskope come tipo di log.
- Concedi le autorizzazioni IAM al service account Google SecOps: concedi i ruoli Storage Object Viewer e Storage Legacy Bucket Reader (utilizza Storage Legacy Bucket Writer se utilizzi l'opzione di eliminazione) sul bucket Cloud Storage al account di servizio Google SecOps.
Verifica la pubblicazione dei log
Per verificare che i log WebTx vengano inviati al bucket Cloud Storage:
- In Cloud Exchange, vai a Log Shipper > Log Delivery.
- Controlla le colonne Total Logs/WebTx Sent to External Receiver (Totale log/WebTx inviati al ricevitore esterno) e Total WebTx Sent to Storage Bucket (Totale WebTx inviati al bucket di archiviazione) per verificare che i dati vengano inviati alla destinazione.
- Nel bucket GCS, verifica che i file
.gzipvengano scritti dal Log Shipper.
Configura le impostazioni globali di Log Shipper (facoltativo)
Solo gli amministratori possono modificare le impostazioni globali di Log Shipper. Vai a Impostazioni > Log Shipper. Sono presenti due schede: Generale e Mappature.
Nella scheda Generali, puoi configurare la strategia di ripetizione per l'invio dei log:
- Predefinito (3 tentativi): in caso di mancato recapito dei log, Log Shipper avvierà 3 tentativi di invio dei log alla destinazione. Se tutti e tre i tentativi di ripetizione non vanno a buon fine, il batch di log corrispondente verrà ignorato.
Riprova fino al recapito riuscito: tentativi illimitati fino al recapito riuscito dei log.
Puoi anche attivare la codifica UTF-8 per avvisi, eventi e WebTx per garantire una gestione fluida dei dati codificati in UTF-8. Per impostazione predefinita, questa funzionalità è disattivata.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
| applicationType | security_result.detection_fields[].key: "applicationType", security_result.detection_fields[].value: applicationType | Mappato direttamente dal campo CEF corrispondente |
| appcategory | security_result.category_details[]: appcategory | Mappato direttamente dal campo CEF corrispondente |
| browser | security_result.detection_fields[].key: "browser", security_result.detection_fields[].value: browser | Mappato direttamente dal campo CEF corrispondente |
| c-ip | principal.asset.ip[]: c-ip, principal.ip[]: c-ip | Mappato direttamente dal campo JSON corrispondente |
| cci | security_result.detection_fields[].key: "cci", security_result.detection_fields[].value: cci | Mappato direttamente dal campo CEF corrispondente |
| ccl | security_result.confidence: valore derivato, security_result.confidence_details: ccl | security_result.confidence viene derivato in base al valore di ccl: "excellent" o "high" viene mappato a HIGH_CONFIDENCE, "medium" viene mappato a MEDIUM_CONFIDENCE, "low" o "poor" viene mappato a LOW_CONFIDENCE e "unknown" o "not_defined" viene mappato a UNKNOWN_CONFIDENCE. security_result.confidence_details viene mappato direttamente da ccl. |
| clientBytes | network.sent_bytes: clientBytes | Mappato direttamente dal campo CEF corrispondente |
| cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: cs-access-method | Mappato direttamente dal campo JSON corrispondente |
| cs-app | additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: cs-app, principal.application: cs-app | Mappato direttamente dal campo JSON corrispondente |
| cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: cs-app-activity | Mappato direttamente dal campo JSON corrispondente |
| cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: cs-app-category | Mappato direttamente dal campo JSON corrispondente |
| cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: cs-app-cci | Mappato direttamente dal campo JSON corrispondente |
| cs-app-ccl | additional.fields[].key: "x-cs-app-ccl", additional.fields[].value.string_value: cs-app-ccl | Mappato direttamente dal campo JSON corrispondente |
| cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: cs-app-from-user, principal.user.email_addresses[]: cs-app-from-user | Mappato direttamente dal campo JSON corrispondente |
| cs-app-instance-id | additional.fields[].key: "x-cs-app-instance-id", additional.fields[].value.string_value: cs-app-instance-id | Mappato direttamente dal campo JSON corrispondente |
| cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: cs-app-object-name | Mappato direttamente dal campo JSON corrispondente |
| cs-app-object-type | additional.fields[].key: "x-cs-app-object-type", additional.fields[].value.string_value: cs-app-object-type | Mappato direttamente dal campo JSON corrispondente |
| cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: cs-app-suite | Mappato direttamente dal campo JSON corrispondente |
| cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: cs-app-tags | Mappato direttamente dal campo JSON corrispondente |
| cs-bytes | network.sent_bytes: cs-bytes | Mappato direttamente dal campo JSON corrispondente |
| cs-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: cs-content-type | Mappato direttamente dal campo JSON corrispondente |
| cs-dns | target.asset.hostname[]: cs-dns, target.hostname: cs-dns | Mappato direttamente dal campo JSON corrispondente |
| cs-host | target.asset.hostname[]: cs-host, target.hostname: cs-host | Mappato direttamente dal campo JSON corrispondente |
| cs-method | network.http.method: cs-method | Mappato direttamente dal campo JSON corrispondente |
| cs-referer | network.http.referral_url: cs-referer | Mappato direttamente dal campo JSON corrispondente |
| cs-uri | additional.fields[].key: "cs-uri", additional.fields[].value.string_value: cs-uri | Mappato direttamente dal campo JSON corrispondente |
| cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: cs-uri-path | Mappato direttamente dal campo JSON corrispondente |
| cs-uri-port | additional.fields[].key: "cs-uri-port", additional.fields[].value.string_value: cs-uri-port | Mappato direttamente dal campo JSON corrispondente |
| cs-uri-scheme | network.application_protocol: cs-uri-scheme | Mappato direttamente dal campo JSON corrispondente dopo la conversione in lettere maiuscole |
| cs-user-agent | network.http.parsed_user_agent: user agent analizzato, network.http.user_agent: cs-user-agent | network.http.parsed_user_agent viene derivato analizzando il campo cs-user-agent utilizzando il filtro "parseduseragent" |
| cs-username | principal.user.userid: cs-username | Mappato direttamente dal campo JSON corrispondente |
| data | metadata.event_timestamp.seconds: secondi dall'epoca dai campi di data e ora, metadata.event_timestamp.nanos: 0 | La data e l'ora vengono combinate e convertite in secondi e nanosecondi epoch. I nanosecondi sono impostati su 0. |
| dispositivo | intermediary.hostname: device | Mappato direttamente dal campo CEF corrispondente |
| dst | target.ip[]: dst | Mappato direttamente dal campo CEF corrispondente |
| dst_country | target.location.country_or_region: dst_country | Mappato direttamente dal campo grokked corrispondente |
| dst_ip | target.asset.ip[]: dst_ip, target.ip[]: dst_ip | Mappato direttamente dal campo grokked corrispondente |
| dst_location | target.location.city: dst_location | Mappato direttamente dal campo grokked corrispondente |
| dst_region | target.location.state: dst_region | Mappato direttamente dal campo grokked corrispondente |
| dst_zip | Non mappato | Questo campo non è mappato all'UDM |
| duser | target.user.email_addresses[]: duser, target.user.user_display_name: duser | Mappato direttamente dal campo CEF corrispondente |
| dvchost | about.hostname: dvchost, target.asset.hostname[]: dvchost, target.hostname: dvchost | Mappato direttamente dal campo CEF corrispondente |
| event_timestamp | metadata.event_timestamp.seconds: event_timestamp | Mappato direttamente dal campo grokked corrispondente |
| nome host | target.asset.hostname[]: hostname, target.hostname: hostname | Mappato direttamente dal campo CEF corrispondente |
| ID incidente | security_result.detection_fields[].key: "IncidentID", security_result.detection_fields[].value: IncidentID | Mappato direttamente dal campo CEF corrispondente |
| intermediario | intermediary: intermediary | Mappato direttamente dal campo CEF corrispondente |
| md5 | target.file.md5: md5 | Mappato direttamente dal campo CEF corrispondente |
| messaggio | Vari campi UDM | Il campo del messaggio viene analizzato in base al fatto che contenga o meno "CEF". In questo caso, viene trattato come un log CEF. In caso contrario, viene analizzato come stringa delimitata da spazi o come JSON. |
| mwDetectionEngine | additional.fields[].key: "mwDetectionEngine", additional.fields[].value.string_value: mwDetectionEngine | Mappato direttamente dal campo CEF corrispondente |
| mwType | metadata.description: mwType | Mappato direttamente dal campo CEF corrispondente |
| os | principal.platform: valore derivato | La piattaforma è derivata dal campo os: "Windows" viene mappato a WINDOWS, "MAC" a MAC e "LINUX" a LINUX |
| pagina | network.http.referral_url: page | Mappato direttamente dal campo CEF corrispondente |
| referer | network.http.referral_url: referer | Mappato direttamente dal campo CEF corrispondente |
| requestClientApplication | network.http.parsed_user_agent: user agent analizzato, network.http.user_agent: requestClientApplication | network.http.parsed_user_agent deriva dall'analisi del campo requestClientApplication utilizzando il filtro "parseduseragent" |
| request_method | network.http.method: request_method | Mappato direttamente dal campo grokked corrispondente |
| rs-status | additional.fields[].key: "rs-status", additional.fields[].value.string_value: rs-status, network.http.response_code: rs-status | Mappato direttamente dal campo JSON corrispondente |
| s-ip | target.asset.ip[]: s-ip, target.ip[]: s-ip | Mappato direttamente dal campo JSON corrispondente |
| sc-bytes | network.received_bytes: sc-bytes | Mappato direttamente dal campo JSON corrispondente |
| sc-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: sc-content-type | Mappato direttamente dal campo JSON corrispondente |
| sc-status | network.http.response_code: sc-status | Mappato direttamente dal campo JSON corrispondente |
| serverBytes | network.received_bytes: serverBytes | Mappato direttamente dal campo CEF corrispondente |
| sha256 | target.file.sha256: sha256 | Mappato direttamente dal campo CEF corrispondente |
| src | principal.ip[]: src | Mappato direttamente dal campo CEF corrispondente |
| src_country | principal.location.country_or_region: src_country | Mappato direttamente dal campo grokked corrispondente |
| src_ip | principal.asset.ip[]: src_ip, principal.ip[]: src_ip | Mappato direttamente dal campo grokked corrispondente |
| src_location | principal.location.city: src_location | Mappato direttamente dal campo grokked corrispondente |
| src_region | principal.location.state: src_region | Mappato direttamente dal campo grokked corrispondente |
| src_latitude | Non mappato | Questo campo non è mappato all'UDM |
| src_longitude | Non mappato | Questo campo non è mappato all'UDM |
| src_zip | Non mappato | Questo campo non è mappato all'UDM |
| suser | principal.user.user_display_name: suser | Mappato direttamente dal campo CEF corrispondente |
| target_host | target.asset.hostname[]: target_host, target.hostname: target_host | Mappato direttamente dal campo grokked corrispondente |
| tempo | metadata.event_timestamp.seconds: secondi dall'epoca dai campi di data e ora, metadata.event_timestamp.nanos: 0 | La data e l'ora vengono combinate e convertite in secondi e nanosecondi epoch. I nanosecondi sono impostati su 0. |
| timestamp | metadata.event_timestamp.seconds: timestamp | Mappato direttamente dal campo CEF corrispondente |
| ts | metadata.event_timestamp.seconds: secondi dall'epoca da ts, metadata.event_timestamp.nanos: 0 | Il timestamp viene convertito in secondi e nanosecondi epoch. I nanosecondi sono impostati su 0. |
| url | target.url: url | Mappato direttamente dal campo CEF corrispondente |
| user_agent | network.http.parsed_user_agent: user agent analizzato, network.http.user_agent: user_agent | network.http.parsed_user_agent viene derivato analizzando il campo user_agent utilizzando il filtro "parseduseragent" |
| user_key | principal.user.email_addresses[]: user_key | Mappato direttamente dal campo grokked corrispondente |
| versione | Non mappato | Questo campo non è mappato all'UDM |
| x-c-browser | additional.fields[].key: "x-c-browser", additional.fields[].value.string_value: x-c-browser | Mappato direttamente dal campo JSON corrispondente |
| x-c-browser-version | additional.fields[].key: "x-c-browser-version", additional.fields[].value.string_value: x-c-browser-version | Mappato direttamente dal campo JSON corrispondente |
| x-c-country | principal.location.country_or_region: x-c-country | Mappato direttamente dal campo JSON corrispondente |
| x-c-device | additional.fields[].key: "x-c-device", additional.fields[].value.string_value: x-c-device | Mappato direttamente dal campo JSON corrispondente |
| x-c-latitude | principal.location.region_coordinates.latitude: x-c-latitude | Mappato direttamente dal campo JSON corrispondente |
| x-c-local-time | security_result.detection_fields[].key: "x-c-local-time", security_result.detection_fields[].value: x-c-local-time | Mappato direttamente dal campo JSON corrispondente |
| x-c-location | principal.location.name: x-c-location | Mappato direttamente dal campo JSON corrispondente |
| x-c-longitude | principal.location.region_coordinates.longitude: x-c-longitude | Mappato direttamente dal campo JSON corrispondente |
| x-c-os | principal.platform: valore derivato | La piattaforma è derivata dal campo x-c-os: "Windows" viene mappato a WINDOWS, "MAC" a MAC e "LINUX" a LINUX |
| x-c-region | principal.location.state: x-c-region | Mappato direttamente dal campo JSON corrispondente |
| x-c-zipcode | additional.fields[].key: "x-c-zipcode", additional.fields[].value.string_value: x-c-zipcode | Mappato direttamente dal campo JSON corrispondente |
| x-category | additional.fields[].key: "x-category", additional.fields[].value.string_value: x-category | Mappato direttamente dal campo JSON corrispondente |
| x-category-id | additional.fields[].key: "x-category-id", additional.fields[].value.string_value: x-category-id | Mappato direttamente dal campo JSON corrispondente |
| x-cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: x-cs-access-method | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app | principal.application: x-cs-app, additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: x-cs-app | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: x-cs-app-activity | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: x-cs-app-category | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: x-cs-app-cci | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: x-cs-app-from-user | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-object-id | additional.fields[].key: "x-cs-app-object-id", additional.fields[].value.string_value: x-cs-app-object-id | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: x-cs-app-object-name | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-object-type | additional.fields[].key: "x-cs-app-object-type", additional.fields[].value.string_value: x-cs-app-object-type | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: x-cs-app-suite | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: x-cs-app-tags | Mappato direttamente dal campo JSON corrispondente |
| x-cs-app-to-user | additional.fields[].key: "x-cs-app-to-user", additional.fields[].value.string_value: x-cs-app-to-user | Mappato direttamente dal campo JSON corrispondente |
| x-cs-dst-ip | security_result.detection_fields[].key: "x-cs-dst-ip", security_result.detection_fields[].value: x-cs-dst-ip, target.asset.ip[]: x-cs-dst-ip, target.ip[]: x-cs-dst-ip | Mappato direttamente dal campo JSON corrispondente |
| x-cs-dst-port | security_result.detection_fields[].key: "x-cs-dst-port", security_result.detection_fields[].value: x-cs-dst-port, target.port: x-cs-dst-port | Mappato direttamente dal campo JSON corrispondente |
| x-cs-http-version | security_result.detection_fields[].key: "x-cs-http-version", security_result.detection_fields[].value: x-cs-http-version | Mappato direttamente dal campo JSON corrispondente |
| x-cs-page-id | additional.fields[].key: "x-cs-page-id", additional.fields[].value.string_value: x-cs-page-id | Mappato direttamente dal campo JSON corrispondente |
| x-cs-session-id | network.session_id: x-cs-session-id | Mappato direttamente dal campo JSON corrispondente |
| x-cs-site | additional.fields[].key: "x-cs-site", additional.fields[].value.string_value: x-cs-site | Mappato direttamente dal campo JSON corrispondente |
| x-cs-sni | network.tls.client.server_name: x-cs-sni | Mappato direttamente dal campo JSON corrispondente |
| x-cs-src-ip | principal.asset.ip[]: x-cs-src-ip, principal.ip[]: x-cs-src-ip, security_result.detection_fields[].key: "x-cs-src-ip", security_result.detection_fields[].value: x-cs-src-ip | Mappato direttamente dal campo JSON corrispondente |
| x-cs-src-ip-egress | principal.asset.ip[]: x-cs-src-ip-egress, principal.ip[]: x-cs-src-ip-egress, security_result.detection_fields[].key: "x-cs-src-ip-egress", security_result.detection_fields[].value: x-cs-src-ip-egress | Mappato direttamente dal campo JSON corrispondente |
| x-cs-src-port | principal.port: x-cs-src-port, security_result.detection_fields[].key: "x-cs-src-port", security_result.detection_fields[].value: x-cs-src-port | Mappato direttamente dal campo JSON corrispondente |
| x-cs-ssl-cipher | network.tls.cipher: x-cs-ssl-cipher | Mappato direttamente dal campo JSON corrispondente |
| x-cs-ssl-fronting-error | security_result.detection_fields[].key: "x-cs-ssl-fronting-error", security_result.detection_fields[].value: x-cs-ssl-fronting-error | Mappato direttamente dal campo JSON corrispondente |
| x-cs-ssl-handshake-error | security_result.detection_fields[].key: "x-cs-ssl-handshake-error", security_result.detection_fields[].value: x-cs-ssl-handshake-error | Mappato direttamente dal campo JSON corrispondente |
| x-cs-ssl-ja3 | network.tls.client.ja3: x-cs-ssl-ja3 | Mappato direttamente dal campo JSON corrispondente |
| x-cs-ssl-version | network.tls.version: x-cs-ssl-version | Mappato direttamente dal campo JSON corrispondente |
| x-cs-timestamp | metadata.event_timestamp.seconds: x-cs-timestamp | Mappato direttamente dal campo JSON corrispondente |
| x-cs-traffic-type | additional.fields[].key: "trafficType", additional.fields[].value.string_value: x-cs-traffic-type | Mappato direttamente dal campo JSON corrispondente |
| x-cs-tunnel-src-ip | security_result.detection_fields[].key: "x-cs-tunnel-src-ip", security_result.detection_fields[].value: x-cs-tunnel-src-ip | Mappato direttamente dal campo JSON corrispondente |
| x-cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: x-cs-uri-path | Mappato direttamente dal campo JSON corrispondente |
| x-cs-url | target.url: x-cs-url | Mappato direttamente dal campo JSON corrispondente |
| x-cs-userip | security_result.detection_fields[].key: "x-cs-userip", security_result.detection_fields[].value: x-cs-userip | Mappato direttamente dal campo JSON corrispondente |
| x-other-category | security_result.category_details[]: x-other-category | Mappato direttamente dal campo JSON corrispondente |
| x-other-category-id | security_result.detection_fields[].key: "x-other-category-id", security_result.detection_fields[].value: x-other-category-id | Mappato direttamente dal campo JSON corrispondente |
| x-policy-action | security_result.action: valore derivato, security_result.action_details: x-policy-action | security_result.action viene derivato convertendo x-policy-action in lettere maiuscole. Se il valore in maiuscolo è "ALLOW" o "BLOCK", viene utilizzato direttamente. In caso contrario, non viene mappato. security_result.action_details viene mappato direttamente da x-policy-action. |
| x-policy-dst-host | security_result.detection_fields[].key: "x-policy-dst-host", security_result.detection_fields[].value: x-policy-dst-host | Mappato direttamente dal campo JSON corrispondente |
| x-policy-dst-host-source | security_result.detection_fields[].key: "x-policy-dst-host-source", security_result.detection_fields[].value: x-policy-dst-host-source | Mappato direttamente dal campo JSON corrispondente |
| x-policy-dst-ip | security_result.detection_fields[].key: "x-policy-dst-ip", security_result.detection_fields[].value: x-policy-dst-ip | Mappato direttamente dal campo JSON corrispondente |
| x-policy-name | security_result.rule_name: x-policy-name | Mappato direttamente dal campo JSON corrispondente |
| x-policy-src-ip | security_result.detection_fields[].key: "x-policy-src-ip", security_result.detection_fields[].value: x-policy-src-ip | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-enddate | network.tls.server.certificate.not_after.seconds: secondi dall'epoca da x-r-cert-enddate | La data viene convertita in secondi epoch |
| x-r-cert-expired | additional.fields[].key: "x-r-cert-expired", additional.fields[].value.string_value: x-r-cert-expired | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-incomplete-chain | additional.fields[].key: "x-r-cert-incomplete-chain", additional.fields[].value.string_value: x-r-cert-incomplete-chain | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-issuer-cn | network.tls.server.certificate.issuer: x-r-cert-issuer-cn | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-mismatch | additional.fields[].key: "x-r-cert-mismatch", additional.fields[].value.string_value: x-r-cert-mismatch | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-revoked | additional.fields[].key: "x-r-cert-revoked", additional.fields[].value.string_value: x-r-cert-revoked | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-self-signed | additional.fields[].key: "x-r-cert-self-signed", additional.fields[].value.string_value: x-r-cert-self-signed | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-startdate | network.tls.server.certificate.not_before.seconds: secondi dall'epoca da x-r-cert-startdate | La data viene convertita in secondi epoch |
| x-r-cert-subject-cn | network.tls.server.certificate.subject: x-r-cert-subject-cn | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-untrusted-root | additional.fields[].key: "x-r-cert-untrusted-root", additional.fields[].value.string_value: x-r-cert-untrusted-root | Mappato direttamente dal campo JSON corrispondente |
| x-r-cert-valid | additional.fields[].key: "x-r-cert-valid", additional.fields[].value.string_value: x-r-cert-valid | Mappato direttamente dal campo JSON corrispondente |
| x-request-id | additional.fields[].key: "requestId", additional.fields[].value.string_value: x-request-id | Mappato direttamente dal campo JSON corrispondente |
| x-rs-file-category | additional.fields[].key: "x-rs-file-category", additional.fields[].value.string_value: x-rs-file-category | Mappato direttamente dal campo JSON corrispondente |
| x-rs-file-type | additional.fields[].key: "x-rs-file-type", additional.fields[].value.string_value: x-rs-file-type | Mappato direttamente dal campo JSON corrispondente |
| x-s-country | target.location.country_or_region: x-s-country | Mappato direttamente dal campo JSON corrispondente |
| x-s-dp-name | additional.fields[].key: "x-s-dp-name", additional.fields[].value.string_value: x-s-dp-name | Mappato direttamente dal campo JSON corrispondente |
| x-s-latitude | target.location.region_coordinates.latitude: x-s-latitude | Mappato direttamente dal campo JSON corrispondente |
| x-s-location | target.location.name: x-s-location | Mappato direttamente dal campo JSON corrispondente |
| x-s-longitude | target.location.region_coordinates.longitude: x-s-longitude | Mappato direttamente dal campo JSON corrispondente |
| x-s-region | target.location.state: x-s-region | Mappato direttamente dal campo JSON corrispondente |
| x-s-zipcode | additional.fields[].key: "x-s-zipcode", additional.fields[].value.string_value: x-s-zipcode | Mappato direttamente dal campo JSON corrispondente |
| x-sr-ssl-cipher | security_result.detection_fields[].key: "x-sr-ssl-cipher", security_result.detection_fields[].value: x-sr-ssl-cipher | Mappato direttamente dal campo JSON corrispondente |
| x-sr-ssl-client-certificate-error | security_result.detection_fields[].key: "x-sr-ssl-client-certificate-error", security_result.detection_fields[].value: x-sr-ssl-client-certificate-error | Mappato direttamente dal campo JSON corrispondente |
| x-sr-ssl-engine-action | security_result.detection_fields[].key: "x-sr-ssl-engine-action", security_result.detection_fields[].value: x-sr-ssl-engine-action | Mappato direttamente dal campo JSON corrispondente |
| x-sr-ssl-engine-action-reason | security_result.detection_fields[].key: "x-sr-ssl-engine-action-reason", security_result.detection_fields[].value: x-sr-ssl-engine-action-reason | Mappato direttamente dal campo JSON corrispondente |
| x-sr-ssl-handshake-error | security_result.detection_fields[].key: "x-sr-ssl-handshake-error", security_result.detection_fields[].value: x-sr-ssl-handshake-error | Mappato direttamente dal campo JSON corrispondente |
| x-sr-ssl-ja3s | network.tls.server.ja3s: x-sr-ssl-ja3s | Mappato direttamente dal campo JSON corrispondente |
| x-sr-ssl-malformed-ssl | security_result.detection_fields[].key: "x-sr-ssl-malformed-ssl", security_result.detection_fields[].value: x-sr-ssl-malformed-ssl | Mappato direttamente dal campo JSON corrispondente |
| x-sr-ssl-version | security_result.detection_fields[].key: "x-sr-ssl-version", security_result.detection_fields[].value: x-sr-ssl-version | Mappato direttamente dal campo JSON corrispondente |
| x-s-custom-signing-ca-error | security_result.detection_fields[].key: "x-s-custom-signing-ca-error", security_result.detection_fields[].value: x-s-custom-signing-ca-error | Mappato direttamente dal campo JSON corrispondente |
| x-ssl-bypass | security_result.detection_fields[].key: "SSL BYPASS", security_result.detection_fields[].value: x-ssl-bypass o x-ssl-bypass-reason | Se x-ssl-bypass è "Yes" ed è presente x-ssl-bypass-reason, viene utilizzato il valore di x-ssl-bypass-reason. In caso contrario, viene utilizzato il valore di x-ssl-bypass. |
| x-ssl-policy-action | security_result.detection_fields[].key: "x-ssl-policy-action", security_result.detection_fields[].value: x-ssl-policy-action | Mappato direttamente dal campo JSON corrispondente |
| x-ssl-policy-categories | security_result.category_details[]: x-ssl-policy-categories | Mappato direttamente dal campo JSON corrispondente |
| x-ssl-policy-dst-host | security_result.detection_fields[].key: "x-ssl-policy-dst-host", security_result.detection_fields[].value: x-ssl-policy-dst-host | Mappato direttamente dal campo JSON corrispondente |
| x-ssl-policy-dst-host-source | security_result.detection_fields[].key: "x-ssl-policy-dst-host-source", security_result.detection_fields[].value: x-ssl-policy-dst-host-source | Mappato direttamente dal campo JSON corrispondente |
| x-ssl-policy-dst-ip | security_result.detection_fields[].key: "x-ssl-policy-dst-ip", security_result.detection_fields[].value: x-ssl-policy-dst-ip | Mappato direttamente dal campo JSON corrispondente |
| x-ssl-policy-name | security_result.rule_name: x-ssl-policy-name | Mappato direttamente dal campo JSON corrispondente |
| x-ssl-policy-src-ip | security_result.detection_fields[].key: "x-ssl-policy-src-ip", security_result.detection_fields[].value: x-ssl-policy-src-ip | Mappato direttamente dal campo JSON corrispondente |
| x-sr-dst-ip | security_result.detection_fields[].key: "x-sr-dst-ip", security_result.detection_fields[].value: x-sr-dst-ip | Mappato direttamente dal campo JSON corrispondente |
| x-sr-dst-port | security_result.detection_fields[].key: "x-sr-dst-port", security_result.detection_fields[].value: x-sr-dst-port | Mappato direttamente dal campo JSON corrispondente |
| A X | additional.fields[].key: "xType", additional.fields[].value.string_value: x-type | Mappato direttamente dal campo JSON corrispondente |
| x-transaction-id | additional.fields[].key: "transactionId", additional.fields[].value.string_value: x-transaction-id | Mappato direttamente dal campo JSON corrispondente |
| metadata.vendor_name | Impostalo su "Netskope" | |
| metadata.product_name | Imposta su "Netskope Webproxy" se non è già presente | |
| metadata.log_type | Imposta su "NETSKOPE_WEBPROXY" |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.