Collecter les journaux du proxy Web Netskope
Ce document explique comment ingérer des journaux de proxy Web Netskope dans Google Security Operations à l'aide de Cloud Storage V2.
Netskope fournit une passerelle Web sécurisée cloud native qui inspecte et contrôle le trafic Web en temps réel. Les journaux de transactions Web (WebTx) capturent des enregistrements détaillés de chaque session HTTP et HTTPS traitée par le proxy Netskope, y compris l'identité de l'utilisateur, l'application, la catégorie d'URL, les verdicts de menace et de DLP, et les métadonnées réseau.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Un projet Google Cloud avec l'API Cloud Storage activée
- Autorisations de créer et de gérer des buckets Cloud Storage
- Autorisations de gérer les stratégies IAM (Identity and Access Management) sur les buckets Cloud Storage
- Accès privilégié au locataire Netskope avec des identifiants d'administrateur
Option 1 : Streaming de journaux Netskope vers Cloud Storage
Utilisez cette option si un abonnement Netskope Log Streaming est activé sur votre locataire. Netskope Log Streaming envoie les fichiers journaux WebTx directement dans votre bucket Cloud Storage sous forme de fichiers .gzip compressés à un intervalle fixe de 240 secondes.
Créer un bucket Cloud Storage
- Accédez à la consoleGoogle Cloud .
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage > Buckets.
- Cliquez sur Créer un bucket.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Attribuez un nom au bucket Saisissez un nom unique (par exemple, netskope-webtx-logs).Type d'emplacement Choisissez celle qui correspond le mieux à vos besoins (régionale, birégionale ou multirégionale). Emplacement Sélectionnez l'emplacement le plus proche de votre organisation (par exemple, us-central1).Classe de stockage Standard (recommandé pour les journaux fréquemment consultés) Access control (Contrôle des accès) Uniforme (recommandé) Outils de protection Facultatif : Activez la gestion des versions d'objets ou la règle de conservation. Cliquez sur Créer.
Créer un compte de service Google Cloud
Netskope Log Streaming nécessite un compte de service Google Cloud avec des autorisations d'écriture sur votre bucket Cloud Storage. Le fichier de clé JSON de ce compte de service est utilisé par Netskope pour s'authentifier lors de l'envoi des fichiers journaux.
- Dans la console Google Cloud , accédez à IAM et administration > Comptes de service.
- Cliquez sur Créer un compte de service.
- Fournissez les informations de configuration suivantes :
- Nom du compte de service : saisissez
netskope-log-streaming. - Description du compte de service : saisissez
Service account for Netskope Log Streaming to push WebTx logs to GCS.
- Nom du compte de service : saisissez
- Cliquez sur Créer et continuer.
- Dans la section Autoriser ce compte de service à accéder au projet :
- Cliquez sur Sélectionner un rôle.
- Recherchez et sélectionnez Créateur d'objets Storage.
- Cliquez sur Continuer.
- Cliquez sur OK.
Générer la clé JSON
- Dans la console Google Cloud , accédez à IAM et administration > Comptes de service, puis cliquez sur le compte de service
netskope-log-streaming. - Sélectionnez l'onglet Keys (clés).
- Cliquez sur Ajouter une clé> Créer une clé.
- Sélectionnez JSON comme type de clé.
- Cliquez sur Créer.
Un fichier de clé JSON est téléchargé automatiquement. Enregistrez ce fichier de manière sécurisée. Vous collerez l'intégralité du contenu de ce fichier dans Netskope dans la section suivante.
Accorder des autorisations d'écriture sur un bucket Cloud Storage
- Dans la console Google Cloud , accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket (par exemple,
netskope-webtx-logs). - Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : saisissez l'adresse e-mail du compte de service (par exemple,
netskope-log-streaming@YOUR_PROJECT_ID.iam.gserviceaccount.com). - Attribuer des rôles : sélectionnez Créateur d'objets Storage.
- Ajouter des comptes principaux : saisissez l'adresse e-mail du compte de service (par exemple,
Cliquez sur Enregistrer.
Créer le flux de journaux
- Connectez-vous au locataire Netskope avec des identifiants d'administrateur.
- Accédez à Paramètres > Outils > Streaming de journaux.
- Cliquez sur Créer un flux.
- Dans le champ Nom, saisissez un nom lisible par l'humain pour le flux. Exemple :
Google SecOps WebTx GCS - Sélectionnez GCP Cloud Storage comme type de destination.
Fournissez les informations de configuration suivantes :
Bucket : saisissez le nom du bucket Cloud Storage (par exemple,
netskope-webtx-logs).- Chemin d'accès (facultatif) : saisissez le chemin d'accès à un dossier dans le bucket où les journaux seront stockés (par exemple, `netskope/webtx/{%Y}`).
Clé privée : collez l'intégralité du contenu du fichier de clé JSON généré dans la section précédente, sous la forme d'un seul objet JSON commençant par
{et se terminant par}. Il inclut les champstype,project_id,private_key_id,private_key,client_emailetclient_id.
Examinez les options de diffusion : la fréquence d'envoi est de 240 secondes.
Cliquez sur Enregistrer (ou Créer) pour activer le flux. Netskope valide les identifiants en écrivant un objet de test nommé
netskope-test-file.txtdans le bucket.
Configurer un flux dans Google SecOps pour ingérer les journaux Netskope WebTx depuis Cloud Storage
Suivez les étapes ci-dessous pour créer le flux Google SecOps et accorder les autorisations IAM :
Récupérer le compte de service Google SecOps
Google SecOps utilise un compte de service unique pour lire les données de votre bucket Cloud Storage. Vous devez accorder à ce compte de service l'accès à votre bucket.
- Accédez à Paramètres > Gestion des données > Flux. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Flux.
- Cliquez sur Ajouter un flux d'actualités.
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Netskope WebTx Logs). - Sélectionnez Google Cloud Storage V2 comme Type de source.
- Sélectionnez Netskope Web Proxy comme Type de journal.
- Cliquez sur Get Service Account (Obtenir un compte de service).
Une adresse e-mail de compte de service unique s'affiche, par exemple :
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopiez cette adresse e-mail pour l'utiliser à l'étape suivante.
Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
URL du bucket de stockage : saisissez l'URI du bucket Cloud Storage avec le chemin d'accès du préfixe :
gs://netskope-webtx-logs/netskope/webtx/- Remplacez :
netskope-webtx-logs: nom de votre bucket Cloud Storage.netskope/webtx/: préfixe de chemin d'accès configuré dans le flux de journaux Netskope (laissez ce champ vide pour la racine).
- Remplacez :
Option de suppression de la source : sélectionnez l'option de suppression de votre choix :
- Ne jamais supprimer les fichiers : ne supprime jamais les fichiers de la source (recommandé pour les tests).
- Supprimer les fichiers transférés et les répertoires vides : supprimez les fichiers et les répertoires vides de la source une fois la récupération terminée.
Âge maximal du fichier : incluez les fichiers modifiés au cours d'un certain nombre de jours (180 jours par défaut).
Espace de noms de l'élément : espace de noms de l'élément
Étiquettes d'ingestion : étiquette à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux d'actualités sur l'écran Finaliser, puis cliquez sur Envoyer.
Accorder des autorisations IAM au compte de service Google SecOps
Le compte de service Google SecOps a besoin de deux rôles sur votre bucket Cloud Storage : Lecteur des objets Storage pour lire les objets de journal et un rôle au niveau du bucket pour lire les métadonnées du bucket.
- Accédez à Cloud Storage > Buckets.
- cliquez sur le nom de votre bucket (par exemple,
netskope-webtx-logs). - Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps (par exemple,
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com). - Attribuer des rôles : sélectionnez les deux rôles suivants :
- Lecteur des objets de l'espace de stockage : lit les objets de journal.
- Lecteur des anciens buckets Storage : lit les métadonnées du bucket. Si vous avez sélectionné l'option de suppression Supprimer les fichiers transférés et les répertoires vides, sélectionnez plutôt Rédacteur d'ancien bucket Storage, qui accorde également l'autorisation de suppression.
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps (par exemple,
- Cliquez sur Enregistrer.
Option 2 : Utiliser Netskope Cloud Exchange Log Shipper pour Cloud Storage
Utilisez cette option si vous avez déployé la plate-forme Netskope Cloud Exchange avec le module Log Shipper configuré. Le Log Shipper extrait les journaux WebTx de votre locataire Netskope et les transfère sous forme de fichiers .gzip compressés vers un bucket Cloud Storage, que Google SecOps lit ensuite via un flux Cloud Storage V2.
Avant de commencer (Cloud Exchange)
Assurez-vous de remplir les conditions préalables supplémentaires suivantes pour cette option :
- Un locataire Netskope Cloud Exchange avec le plug-in Tenant et le module Log Shipper déjà configurés.
- Le plug-in source Netskope CLS configuré dans Log Shipper (qui extrait les données du locataire Netskope).
- Un bucket Cloud Storage créé pour stocker les journaux WebTx. Si vous n'en avez pas créé, suivez les étapes de la section Créer un bucket Cloud Storage.
- Un compte de service Google Cloud avec accès en écriture au bucket Cloud Storage. Si vous n'en avez pas créé, suivez les étapes décrites dans Créer un compte de service Google Cloud , Générer la clé JSON et Accorder des autorisations d'écriture sur un bucket Cloud Storage.
Configurer le plug-in de destination Cloud Storage
- Dans Cloud Exchange, accédez à Settings > Plugin Store (Paramètres > Store de plug-ins).
- Recherchez et sélectionnez le plug-in Google Cloud SCC (Google GCS).
- Cliquez sur Configure New Plugin (Configurer un nouveau plug-in) ou ajoutez une configuration de plug-in.
- Fournissez les informations de configuration suivantes :
- Nom de la configuration : saisissez un nom descriptif (par exemple,
GCS WebTx Destination). - Mappage : sélectionnez un fichier de mappage. Pour les journaux WebTx qui sont transférés en tant que fichiers
.gzipd'origine, aucune transformation de mappage n'est appliquée. - Bucket : saisissez le nom du bucket Cloud Storage (par exemple,
netskope-webtx-logs). - Chemin d'accès (facultatif) : saisissez le chemin d'accès d'un dossier (par exemple,
netskope/webtx/). - Fichier de clé : collez l'intégralité du contenu du fichier de clé JSON du compte de service, et pas seulement la valeur
private_key.
- Nom de la configuration : saisissez un nom descriptif (par exemple,
- Cliquez sur Enregistrer.
- La nouvelle configuration du plug-in s'affiche sur la page Log Shipper > Plug-ins.
Configurer une règle d'entreprise (facultatif)
Par défaut, la règle d'activité All (Tout) filtre toutes les alertes et tous les événements. Si vous souhaitez filtrer spécifiquement les journaux WebTx, créez une règle métier :
- Dans Log Shipper, accédez à Business Rules (Règles d'entreprise).
- Cliquez sur Créer une règle.
- Saisissez un nom de règle (par exemple,
WebTx Only). - Configurez vos filtres pour n'inclure que les données WebTx.
- Cliquez sur Enregistrer.
Configurer la diffusion des journaux
- Dans Log Shipper, accédez à Log Delivery.
- Cliquez sur Ajouter une configuration de diffusion des journaux.
- Fournissez les informations de configuration suivantes :
- Configuration de la source : sélectionnez le plug-in source Netskope CLS (par exemple,
WebTxCLSouNetskope CLS). - Configuration de la destination : sélectionnez le plug-in de destination Cloud Storage que vous avez configuré (par exemple,
GCS WebTx Destination). - Règle métier : sélectionnez une règle métier (par exemple,
AllouWebTx Only).
- Configuration de la source : sélectionnez le plug-in source Netskope CLS (par exemple,
Cliquez sur Enregistrer.
Pour obtenir des données historiques supplémentaires, cliquez sur l'icône Extraire les données historiques dans les actions Distribution des journaux.
Sélectionnez une plage de dates Historique du et au, puis cliquez sur Extraire.
Configurer un flux dans Google SecOps pour ingérer les journaux Netskope WebTx depuis Cloud Storage
Suivez les mêmes étapes que pour l'option de streaming de journaux Netskope afin de créer un flux Google SecOps et d'accorder des autorisations IAM :
- Récupérez le compte de service Google SecOps : créez un flux avec Google Cloud Storage V2 comme type de source et Proxy Web Netskope comme type de journal.
- Accordez des autorisations IAM au compte de service Google SecOps : accordez les rôles Lecteur des objets de l'espace de stockage et Lecteur de bucket Storage hérité (utilisez Rédacteur de bucket Storage hérité si vous utilisez l'option de suppression) sur le bucket Cloud Storage au compte de service Google SecOps.
Vérifier la diffusion des journaux
Pour vérifier que les journaux WebTx sont bien envoyés au bucket Cloud Storage :
- Dans Cloud Exchange, accédez à Log Shipper> Log Delivery (Expéditeur de journaux > Distribution des journaux).
- Vérifiez les colonnes Total Logs/WebTx Sent to External Receiver (Nombre total de journaux/WebTx envoyés au récepteur externe) et Total WebTx Sent to Storage Bucket (Nombre total de WebTx envoyés au bucket de stockage) pour confirmer que les données sont bien envoyées à la destination.
- Dans le bucket GCS, vérifiez que les fichiers
.gzipsont bien écrits par l'outil d'envoi de journaux.
Configurer les paramètres globaux de Log Shipper (facultatif)
Seuls les administrateurs peuvent modifier les paramètres globaux de l'outil d'expédition des journaux. Accédez à Settings > Log Shipper (Paramètres > Expéditeur de journaux). Il existe deux onglets : "Général" et "Mappages".
Dans l'onglet Général, vous pouvez configurer la stratégie de nouvelle tentative pour la diffusion des journaux :
- Par défaut (3 nouvelles tentatives) : en cas d'échec de l'envoi des journaux, Log Shipper effectue trois tentatives pour transférer les journaux vers la destination. Si les trois tentatives échouent, le lot de journaux correspondant sera supprimé.
Réessayer jusqu'à ce que la diffusion aboutisse : tentatives illimitées jusqu'à ce que la diffusion des journaux aboutisse.
Vous pouvez également activer l'encodage UTF-8 pour les alertes, les événements et WebTx afin de garantir un traitement fluide des données encodées en UTF-8. Par défaut, cette fonctionnalité est désactivée.
Table de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
| applicationType | security_result.detection_fields[].key: "applicationType", security_result.detection_fields[].value: applicationType | Mappé directement à partir du champ CEF correspondant |
| appcategory | security_result.category_details[]: appcategory | Mappé directement à partir du champ CEF correspondant |
| navigateur | security_result.detection_fields[].key: "browser", security_result.detection_fields[].value: browser | Mappé directement à partir du champ CEF correspondant |
| c-ip | principal.asset.ip[]: c-ip, principal.ip[]: c-ip | Mappé directement à partir du champ JSON correspondant |
| cci | security_result.detection_fields[].key: "cci", security_result.detection_fields[].value: cci | Mappé directement à partir du champ CEF correspondant |
| ccl | security_result.confidence : valeur dérivée, security_result.confidence_details : ccl | security_result.confidence est dérivé de la valeur de ccl : "excellent" ou "high" correspond à HIGH_CONFIDENCE, "medium" correspond à MEDIUM_CONFIDENCE, "low" ou "poor" correspond à LOW_CONFIDENCE, et "unknown" ou "not_defined" correspond à UNKNOWN_CONFIDENCE. security_result.confidence_details est directement mappé à partir de ccl. |
| clientBytes | network.sent_bytes: clientBytes | Mappé directement à partir du champ CEF correspondant |
| cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: cs-access-method | Mappé directement à partir du champ JSON correspondant |
| cs-app | additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: cs-app, principal.application: cs-app | Mappé directement à partir du champ JSON correspondant |
| cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: cs-app-activity | Mappé directement à partir du champ JSON correspondant |
| cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: cs-app-category | Mappé directement à partir du champ JSON correspondant |
| cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: cs-app-cci | Mappé directement à partir du champ JSON correspondant |
| cs-app-ccl | additional.fields[].key: "x-cs-app-ccl", additional.fields[].value.string_value: cs-app-ccl | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| cs-app-instance-id | additional.fields[].key: "x-cs-app-instance-id", additional.fields[].value.string_value: cs-app-instance-id | Mappé directement à partir du champ JSON correspondant |
| cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: cs-app-object-name | Mappé directement à partir du champ JSON correspondant |
| cs-app-object-type | additional.fields[].key: "x-cs-app-object-type", additional.fields[].value.string_value: cs-app-object-type | Mappé directement à partir du champ JSON correspondant |
| cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: cs-app-suite | Mappé directement à partir du champ JSON correspondant |
| cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: cs-app-tags | Mappé directement à partir du champ JSON correspondant |
| cs-bytes | network.sent_bytes: cs-bytes | Mappé directement à partir du champ JSON correspondant |
| cs-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: cs-content-type | Mappé directement à partir du champ JSON correspondant |
| cs-dns | target.asset.hostname[]: cs-dns, target.hostname: cs-dns | Mappé directement à partir du champ JSON correspondant |
| cs-host | target.asset.hostname[]: cs-host, target.hostname: cs-host | Mappé directement à partir du champ JSON correspondant |
| cs-method | network.http.method: cs-method | Mappé directement à partir du champ JSON correspondant |
| cs-referer | network.http.referral_url: cs-referer | Mappé directement à partir du champ JSON correspondant |
| cs-uri | additional.fields[].key: "cs-uri", additional.fields[].value.string_value: cs-uri | Mappé directement à partir du champ JSON correspondant |
| cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: cs-uri-path | Mappé directement à partir du champ JSON correspondant |
| cs-uri-port | additional.fields[].key: "cs-uri-port", additional.fields[].value.string_value: cs-uri-port | Mappé directement à partir du champ JSON correspondant |
| cs-uri-scheme | network.application_protocol: cs-uri-scheme | Mappé directement à partir du champ JSON correspondant après conversion en majuscules |
| cs-user-agent | network.http.parsed_user_agent : user-agent analysé, network.http.user_agent : cs-user-agent | network.http.parsed_user_agent est dérivé en analysant le champ cs-user-agent à l'aide du filtre "parseduseragent" |
| cs-username | principal.user.userid: cs-username | Mappé directement à partir du champ JSON correspondant |
| date | metadata.event_timestamp.seconds : secondes Epoch des champs de date et d'heure, metadata.event_timestamp.nanos : 0 | La date et l'heure sont combinées et converties en secondes et nanosecondes d'epoch. Les nanosecondes sont définies sur 0. |
| appareil | intermediary.hostname: device | Mappé directement à partir du champ CEF correspondant |
| dst | target.ip[]: dst | Mappé directement à partir du champ CEF correspondant |
| dst_country | target.location.country_or_region: dst_country | Mappé directement à partir du champ grokké correspondant |
| dst_ip | target.asset.ip[]: dst_ip, target.ip[]: dst_ip | Mappé directement à partir du champ grokké correspondant |
| dst_location | target.location.city: dst_location | Mappé directement à partir du champ grokké correspondant |
| dst_region | target.location.state: dst_region | Mappé directement à partir du champ grokké correspondant |
| dst_zip | Non mappé | Ce champ n'est pas mappé sur l'UDM |
| duser | target.user.email_addresses[]: duser, target.user.user_display_name: duser | Mappé directement à partir du champ CEF correspondant |
| dvchost | about.hostname: dvchost, target.asset.hostname[]: dvchost, target.hostname: dvchost | Mappé directement à partir du champ CEF correspondant |
| event_timestamp | metadata.event_timestamp.seconds: event_timestamp | Mappé directement à partir du champ grokké correspondant |
| nom d'hôte | target.asset.hostname[]: hostname, target.hostname: hostname | Mappé directement à partir du champ CEF correspondant |
| ID de l'incident | security_result.detection_fields[].key: "IncidentID", security_result.detection_fields[].value: IncidentID | Mappé directement à partir du champ CEF correspondant |
| intermédiaire | intermediary: intermediary | Mappé directement à partir du champ CEF correspondant |
| md5 | target.file.md5: md5 | Mappé directement à partir du champ CEF correspondant |
| message | Divers champs UDM | Le champ de message est analysé selon qu'il contient ou non "CEF". Si tel est le cas, il est traité comme un journal CEF. Sinon, il est analysé en tant que chaîne délimitée par des espaces ou JSON. |
| mwDetectionEngine | additional.fields[].key: "mwDetectionEngine", additional.fields[].value.string_value: mwDetectionEngine | Mappé directement à partir du champ CEF correspondant |
| mwType | metadata.description: mwType | Mappé directement à partir du champ CEF correspondant |
| os | principal.platform : valeur dérivée | La plate-forme est dérivée du champ "os" : "Windows" correspond à WINDOWS, "MAC" à MAC et "LINUX" à LINUX. |
| dans | network.http.referral_url: page | Mappé directement à partir du champ CEF correspondant |
| referer | network.http.referral_url: referer | Mappé directement à partir du champ CEF correspondant |
| requestClientApplication | network.http.parsed_user_agent : user-agent analysé, network.http.user_agent : requestClientApplication | network.http.parsed_user_agent est dérivé de l'analyse du champ requestClientApplication à l'aide du filtre "parseduseragent". |
| request_method | network.http.method: request_method | Mappé directement à partir du champ grokké correspondant |
| rs-status | additional.fields[].key: "rs-status", additional.fields[].value.string_value: rs-status, network.http.response_code: rs-status | Mappé directement à partir du champ JSON correspondant |
| s-ip | target.asset.ip[]: s-ip, target.ip[]: s-ip | Mappé directement à partir du champ JSON correspondant |
| sc-bytes | network.received_bytes: sc-bytes | Mappé directement à partir du champ JSON correspondant |
| sc-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: sc-content-type | Mappé directement à partir du champ JSON correspondant |
| sc-status | network.http.response_code: sc-status | Mappé directement à partir du champ JSON correspondant |
| serverBytes | network.received_bytes: serverBytes | Mappé directement à partir du champ CEF correspondant |
| sha256 | target.file.sha256: sha256 | Mappé directement à partir du champ CEF correspondant |
| src | principal.ip[]: src | Mappé directement à partir du champ CEF correspondant |
| src_country | principal.location.country_or_region: src_country | Mappé directement à partir du champ grokké correspondant |
| src_ip | principal.asset.ip[]: src_ip, principal.ip[]: src_ip | Mappé directement à partir du champ grokké correspondant |
| src_location | principal.location.city: src_location | Mappé directement à partir du champ grokké correspondant |
| src_region | principal.location.state: src_region | Mappé directement à partir du champ grokké correspondant |
| src_latitude | Non mappé | Ce champ n'est pas mappé sur l'UDM |
| src_longitude | Non mappé | Ce champ n'est pas mappé sur l'UDM |
| src_zip | Non mappé | Ce champ n'est pas mappé sur l'UDM |
| suser | principal.user.user_display_name: suser | Mappé directement à partir du champ CEF correspondant |
| target_host | target.asset.hostname[]: target_host, target.hostname: target_host | Mappé directement à partir du champ grokké correspondant |
| heure | metadata.event_timestamp.seconds : secondes Epoch des champs de date et d'heure, metadata.event_timestamp.nanos : 0 | La date et l'heure sont combinées et converties en secondes et nanosecondes d'epoch. Les nanosecondes sont définies sur 0. |
| code temporel | metadata.event_timestamp.seconds: timestamp | Mappé directement à partir du champ CEF correspondant |
| ts | metadata.event_timestamp.seconds : secondes Epoch à partir de ts, metadata.event_timestamp.nanos : 0 | Le code temporel est converti en secondes et nanosecondes d'epoch. Les nanosecondes sont définies sur 0. |
| url | target.url: url | Mappé directement à partir du champ CEF correspondant |
| user_agent | network.http.parsed_user_agent : user-agent analysé, network.http.user_agent : user_agent | network.http.parsed_user_agent est dérivé en analysant le champ user_agent à l'aide du filtre "parseduseragent" |
| user_key | principal.user.email_addresses[]: user_key | Mappé directement à partir du champ grokké correspondant |
| version | Non mappé | Ce champ n'est pas mappé sur l'UDM |
| x-c-browser | additional.fields[].key: "x-c-browser", additional.fields[].value.string_value: x-c-browser | Mappé directement à partir du champ JSON correspondant |
| x-c-browser-version | additional.fields[].key: "x-c-browser-version", additional.fields[].value.string_value: x-c-browser-version | Mappé directement à partir du champ JSON correspondant |
| x-c-country | principal.location.country_or_region: x-c-country | Mappé directement à partir du champ JSON correspondant |
| x-c-device | additional.fields[].key: "x-c-device", additional.fields[].value.string_value: x-c-device | Mappé directement à partir du champ JSON correspondant |
| x-c-latitude | principal.location.region_coordinates.latitude: x-c-latitude | Mappé directement à partir du champ JSON correspondant |
| x-c-local-time | security_result.detection_fields[].key: "x-c-local-time", security_result.detection_fields[].value: x-c-local-time | Mappé directement à partir du champ JSON correspondant |
| x-c-location | principal.location.name: x-c-location | Mappé directement à partir du champ JSON correspondant |
| x-c-longitude | principal.location.region_coordinates.longitude: x-c-longitude | Mappé directement à partir du champ JSON correspondant |
| x-c-os | principal.platform : valeur dérivée | La plate-forme est dérivée du champ x-c-os : "Windows" correspond à WINDOWS, "MAC" à MAC et "LINUX" à LINUX. |
| x-c-region | principal.location.state: x-c-region | Mappé directement à partir du champ JSON correspondant |
| x-c-zipcode | additional.fields[].key: "x-c-zipcode", additional.fields[].value.string_value: x-c-zipcode | Mappé directement à partir du champ JSON correspondant |
| x-category | additional.fields[].key: "x-category", additional.fields[].value.string_value: x-category | Mappé directement à partir du champ JSON correspondant |
| x-category-id | additional.fields[].key: "x-category-id", additional.fields[].value.string_value: x-category-id | Mappé directement à partir du champ JSON correspondant |
| x-cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: x-cs-access-method | Mappé directement à partir du champ JSON correspondant |
| x-cs-app | principal.application: x-cs-app, additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: x-cs-app | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: x-cs-app-activity | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: x-cs-app-category | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: x-cs-app-cci | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: x-cs-app-from-user | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-object-id | additional.fields[].key: "x-cs-app-object-id", additional.fields[].value.string_value: x-cs-app-object-id | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: x-cs-app-object-name | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-object-type | additional.fields[].key: "x-cs-app-object-type", additional.fields[].value.string_value: x-cs-app-object-type | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: x-cs-app-suite | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: x-cs-app-tags | Mappé directement à partir du champ JSON correspondant |
| x-cs-app-to-user | additional.fields[].key: "x-cs-app-to-user", additional.fields[].value.string_value: x-cs-app-to-user | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-cs-http-version | security_result.detection_fields[].key: "x-cs-http-version", security_result.detection_fields[].value: x-cs-http-version | Mappé directement à partir du champ JSON correspondant |
| x-cs-page-id | additional.fields[].key: "x-cs-page-id", additional.fields[].value.string_value: x-cs-page-id | Mappé directement à partir du champ JSON correspondant |
| x-cs-session-id | network.session_id: x-cs-session-id | Mappé directement à partir du champ JSON correspondant |
| x-cs-site | additional.fields[].key: "x-cs-site", additional.fields[].value.string_value: x-cs-site | Mappé directement à partir du champ JSON correspondant |
| x-cs-sni | network.tls.client.server_name: x-cs-sni | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-cs-ssl-cipher | network.tls.cipher: x-cs-ssl-cipher | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-cs-ssl-ja3 | network.tls.client.ja3: x-cs-ssl-ja3 | Mappé directement à partir du champ JSON correspondant |
| x-cs-ssl-version | network.tls.version: x-cs-ssl-version | Mappé directement à partir du champ JSON correspondant |
| x-cs-timestamp | metadata.event_timestamp.seconds: x-cs-timestamp | Mappé directement à partir du champ JSON correspondant |
| x-cs-traffic-type | additional.fields[].key: "trafficType", additional.fields[].value.string_value: x-cs-traffic-type | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: x-cs-uri-path | Mappé directement à partir du champ JSON correspondant |
| x-cs-url | target.url: x-cs-url | Mappé directement à partir du champ JSON correspondant |
| x-cs-userip | security_result.detection_fields[].key: "x-cs-userip", security_result.detection_fields[].value: x-cs-userip | Mappé directement à partir du champ JSON correspondant |
| x-other-category | security_result.category_details[]: x-other-category | Mappé directement à partir du champ JSON correspondant |
| x-other-category-id | security_result.detection_fields[].key: "x-other-category-id", security_result.detection_fields[].value: x-other-category-id | Mappé directement à partir du champ JSON correspondant |
| x-policy-action | security_result.action : valeur dérivée, security_result.action_details : x-policy-action | security_result.action est dérivé en convertissant x-policy-action en majuscules. Si la valeur en majuscules est "ALLOW" ou "BLOCK", elle est utilisée directement. Sinon, il n'est pas mappé. security_result.action_details est directement mappé à partir de 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-policy-dst-ip | security_result.detection_fields[].key: "x-policy-dst-ip", security_result.detection_fields[].value: x-policy-dst-ip | Mappé directement à partir du champ JSON correspondant |
| x-policy-name | security_result.rule_name: x-policy-name | Mappé directement à partir du champ JSON correspondant |
| x-policy-src-ip | security_result.detection_fields[].key: "x-policy-src-ip", security_result.detection_fields[].value: x-policy-src-ip | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-enddate | network.tls.server.certificate.not_after.seconds : secondes Epoch à partir de x-r-cert-enddate | La date est convertie en secondes depuis l'epoch. |
| x-r-cert-expired | additional.fields[].key: "x-r-cert-expired", additional.fields[].value.string_value: x-r-cert-expired | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-incomplete-chain | additional.fields[].key: "x-r-cert-incomplete-chain", additional.fields[].value.string_value: x-r-cert-incomplete-chain | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-issuer-cn | network.tls.server.certificate.issuer: x-r-cert-issuer-cn | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-mismatch | additional.fields[].key: "x-r-cert-mismatch", additional.fields[].value.string_value: x-r-cert-mismatch | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-revoked | additional.fields[].key: "x-r-cert-revoked", additional.fields[].value.string_value: x-r-cert-revoked | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-self-signed | additional.fields[].key: "x-r-cert-self-signed", additional.fields[].value.string_value: x-r-cert-self-signed | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-startdate | network.tls.server.certificate.not_before.seconds : secondes Epoch depuis x-r-cert-startdate | La date est convertie en secondes depuis l'epoch. |
| x-r-cert-subject-cn | network.tls.server.certificate.subject: x-r-cert-subject-cn | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-untrusted-root | additional.fields[].key: "x-r-cert-untrusted-root", additional.fields[].value.string_value: x-r-cert-untrusted-root | Mappé directement à partir du champ JSON correspondant |
| x-r-cert-valid | additional.fields[].key: "x-r-cert-valid", additional.fields[].value.string_value: x-r-cert-valid | Mappé directement à partir du champ JSON correspondant |
| x-request-id | additional.fields[].key: "requestId", additional.fields[].value.string_value: x-request-id | Mappé directement à partir du champ JSON correspondant |
| x-rs-file-category | additional.fields[].key: "x-rs-file-category", additional.fields[].value.string_value: x-rs-file-category | Mappé directement à partir du champ JSON correspondant |
| x-rs-file-type | additional.fields[].key: "x-rs-file-type", additional.fields[].value.string_value: x-rs-file-type | Mappé directement à partir du champ JSON correspondant |
| x-s-country | target.location.country_or_region: x-s-country | Mappé directement à partir du champ JSON correspondant |
| x-s-dp-name | additional.fields[].key: "x-s-dp-name", additional.fields[].value.string_value: x-s-dp-name | Mappé directement à partir du champ JSON correspondant |
| x-s-latitude | target.location.region_coordinates.latitude: x-s-latitude | Mappé directement à partir du champ JSON correspondant |
| x-s-location | target.location.name: x-s-location | Mappé directement à partir du champ JSON correspondant |
| x-s-longitude | target.location.region_coordinates.longitude: x-s-longitude | Mappé directement à partir du champ JSON correspondant |
| x-s-region | target.location.state: x-s-region | Mappé directement à partir du champ JSON correspondant |
| x-s-zipcode | additional.fields[].key: "x-s-zipcode", additional.fields[].value.string_value: x-s-zipcode | Mappé directement à partir du champ JSON correspondant |
| x-sr-ssl-cipher | security_result.detection_fields[].key: "x-sr-ssl-cipher", security_result.detection_fields[].value: x-sr-ssl-cipher | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-sr-ssl-ja3s | network.tls.server.ja3s: x-sr-ssl-ja3s | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-sr-ssl-version | security_result.detection_fields[].key: "x-sr-ssl-version", security_result.detection_fields[].value: x-sr-ssl-version | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-ssl-bypass | security_result.detection_fields[].key: "SSL BYPASS", security_result.detection_fields[].value: x-ssl-bypass ou x-ssl-bypass-reason | Si x-ssl-bypass est défini sur "Yes" et que x-ssl-bypass-reason est présent, la valeur de x-ssl-bypass-reason est utilisée. Sinon, la valeur de x-ssl-bypass est utilisée. |
| x-ssl-policy-action | security_result.detection_fields[].key: "x-ssl-policy-action", security_result.detection_fields[].value: x-ssl-policy-action | Mappé directement à partir du champ JSON correspondant |
| x-ssl-policy-categories | security_result.category_details[]: x-ssl-policy-categories | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-ssl-policy-name | security_result.rule_name: x-ssl-policy-name | Mappé directement à partir du champ JSON correspondant |
| 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 | Mappé directement à partir du champ JSON correspondant |
| x-sr-dst-ip | security_result.detection_fields[].key: "x-sr-dst-ip", security_result.detection_fields[].value: x-sr-dst-ip | Mappé directement à partir du champ JSON correspondant |
| x-sr-dst-port | security_result.detection_fields[].key: "x-sr-dst-port", security_result.detection_fields[].value: x-sr-dst-port | Mappé directement à partir du champ JSON correspondant |
| Type X | additional.fields[].key: "xType", additional.fields[].value.string_value: x-type | Mappé directement à partir du champ JSON correspondant |
| x-transaction-id | additional.fields[].key: "transactionId", additional.fields[].value.string_value: x-transaction-id | Mappé directement à partir du champ JSON correspondant |
| metadata.vendor_name | Définissez cette option sur "Netskope". | |
| metadata.product_name | Définissez-le sur "Netskope Webproxy" s'il n'est pas déjà présent. | |
| metadata.log_type | Définissez cette option sur "NETSKOPE_WEBPROXY". |
Journal des modifications
Afficher le journal des modifications de cet analyseur
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.