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 Storage di Cloud abilitata
- Autorizzazioni per creare e gestire bucket Cloud Storage
- Autorizzazioni per gestire i criteri IAM (Identity and Access Management) nei 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 attivato un abbonamento a Netskope Log Streaming 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 singola, 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 a cui si accede di frequente) Controllo dell'accesso 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 il push dei file di log.
- Nella Google Cloud console, vai a IAM e amministrazione > Service Accounts.
- Fai clic su Crea account di servizio.
- Fornisci i seguenti dettagli di configurazione:
- Nome del service account: inserisci
netskope-log-streaming - Descrizione service account: 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 della 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'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'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 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 l'intero contenuto del file di chiave JSON generato nella sezione precedente come singolo oggetto JSON che inizia con
{e termina con}. Include i campitype,project_id,private_key_id,private_key,client_emaileclient_id.
Rivedi 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:
Recuperare il account di servizio Google SecOps
Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket Cloud Storage. Devi concedere a questo account di servizio l'accesso al tuo bucket.
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed di notizie.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio
Netskope WebTx Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona Proxy web Netskope 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 radice).
- 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 file trasferiti e directory vuote: elimina i file e le directory vuote dall'origine dopo il completamento di un recupero riuscito.
Età massima del file: includi i file modificati nell'ultimo numero di 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 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 ha bisogno di due ruoli nel tuo bucket Cloud Storage: Storage Object Viewer per leggere gli oggetti 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 ruoli: seleziona entrambi i seguenti ruoli:
- Visualizzatore oggetti Storage: legge gli oggetti log.
- Storage Legacy Bucket Reader: legge i metadati del bucket. Se hai selezionato l'opzione di eliminazione Elimina file trasferiti e 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 implementato la 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 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 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:
- Nome configurazione: inserisci un nome descrittivo (ad esempio,
GCS WebTx Destination). - Mappatura: seleziona un file di mappatura. Per i log WebTx pushati come file
.gziporiginali, non viene applicata alcuna trasformazione di mapping. - Bucket: inserisci il nome del bucket Cloud Storage (ad esempio,
netskope-webtx-logs). - (Facoltativo) Percorso: inserisci un percorso della cartella (ad esempio
netskope/webtx/). - File della chiave: incolla l'intero contenuto del file JSON della chiave dell'account di servizio, non solo il valore
private_key.
- Nome configurazione: inserisci un nome descrittivo (ad esempio,
- Fai clic su Salva.
- La nuova configurazione del plug-in verrà visualizzata nella pagina Plug-in > Log Shipper.
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 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 pubblicazione dei log.
- Fornisci i seguenti dettagli di configurazione:
- Configurazione origine: seleziona il plug-in di origine Netskope CLS (ad esempio
WebTxCLSoNetskope CLS). - 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 WebTx di Netskope da Cloud Storage
Segui gli stessi passaggi dell'opzione di streaming dei log di Netskope 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 Log totali/WebTx inviati al destinatario esterno e WebTx totali inviati al bucket di archiviazione per verificare che i dati vengano inviati alla destinazione.
- Nel bucket GCS, verifica che i file
.gzipvengano scritti da Log Shipper.
(Facoltativo) Configura le impostazioni globali di Log Shipper
Solo gli amministratori possono modificare le impostazioni globali di Log Shipper. Vai a Impostazioni > Log Shipper. Sono presenti due schede: Generale e Mapping.
Nella scheda Generali, puoi configurare la strategia di ripetizione per l'invio dei log:
- Predefinito (3 tentativi): in caso di mancata consegna dei log, Log Shipper avvierà 3 tentativi di push dei log alla destinazione. Se tutti e tre i tentativi di ripetizione non vanno a buon fine, il relativo gruppo di log verrà ignorato.
Riprova fino alla consegna riuscita: tentativi illimitati fino alla consegna riuscita dei log.
Puoi anche attivare la codifica UTF-8 per avvisi, eventi e WebTx per garantire una gestione ottimale 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" corrisponde a HIGH_CONFIDENCE, "medium" corrisponde a MEDIUM_CONFIDENCE, "low" o "poor" corrisponde a LOW_CONFIDENCE e "unknown" o "not_defined" corrisponde 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 maiuscolo |
| cs-user-agent | network.http.parsed_user_agent: Parsed user agent, network.http.user_agent: cs-user-agent | network.http.parsed_user_agent viene derivato dall'analisi del 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 di epoca. 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 a 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 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 viene derivato 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 a UDM |
| src_longitude | Non mappato | Questo campo non è mappato a 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 data e ora, metadata.event_timestamp.nanos: 0 | La data e l'ora vengono combinate e convertite in secondi e nanosecondi di epoca. 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 ricavato 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 a 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: Derived value | La piattaforma deriva dal campo x-c-os: "Windows" corrisponde a WINDOWS, "MAC" corrisponde a MAC e "LINUX" corrisponde 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: Derived value, security_result.action_details: x-policy-action | security_result.action viene derivato convertendo x-policy-action in maiuscolo. 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 dalla data di inizio del certificato 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" e x-ssl-bypass-reason è presente, 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 |
| x-type | 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.