Collecter les journaux du WAF Cloudflare
Ce document explique comment collecter les journaux du WAF Cloudflare en configurant un flux Google Security Operations.
Pour en savoir plus, consultez Ingestion de données dans Google Security Operations.
Un libellé d'ingestion identifie l'analyseur qui normalise les données de journal brutes au format UDM structuré. Les informations de ce document s'appliquent à l'analyseur avec le libellé d'ingestion CLOUDFLARE_WAF
.
Configurer le WAF Cloudflare à l'aide de l'API
Après avoir activé le journal Cloudflare, utilisez les paramètres suivants pour activer l'intégration:
Adresse e-mail d'authentification : adresse e-mail du compte Cloudflare.
Clé d'authentification : jeton de l'API Cloudflare.
ID de zone : ID de zone Cloudflare.
Pour obtenir l'ID de zone et la clé d'authentification, procédez comme suit:
- Connectez-vous au tableau de bord Cloudflare.
- Cliquez sur le site Web à surveiller.
- Cliquez sur Obtenir votre clé API pour obtenir la clé d'authentification.
- Sélectionnez Jeton d'API.
- Cliquez sur Créer un jeton.
- Indiquez les valeurs suivantes sur la page Créer un jeton :
- Dans le champ Nom du jeton, indiquez le nom du jeton.
- Dans la section Autorisations, procédez comme suit :
- Sélectionnez Zone, Journaux et Lecture dans les trois listes, respectivement.
- Cliquez sur Ajouter. Sélectionnez Zone, Analytics et Lecture dans les trois premières listes, respectivement.
- Cliquez sur Ajouter. Sélectionnez Zone, Services de pare-feu et Lecture dans les première, deuxième et troisième listes, respectivement.
- Dans la section Ressources de zone, sélectionnez Inclure et Toutes les zones dans les première et deuxième listes, respectivement.
- Cliquez sur Continuer vers le récapitulatif.
- Cliquez sur Créer un jeton.
- Copiez le jeton affiché, qui est nécessaire pour configurer le flux Google Security Operations.
Configurer le WAF Cloudflare à l'aide du tableau de bord Cloudflare
- Connectez-vous au tableau de bord Cloudflare.
- Cliquez sur le site Web à surveiller.
- Accédez à Analyses et journaux > Logpush.
- Sélectionnez Créer une tâche Logpush.
- Dans Sélectionner une destination, choisissez Google Cloud Storage.
- Saisissez ou sélectionnez les informations de destination suivantes :
- Bucket (Bucket) : nom du bucket Google Cloud
- Path (Chemin d'accès) : emplacement du bucket dans le conteneur de stockage
- Organiser les journaux dans des sous-dossiers quotidiens (recommandé)
- Pour Autoriser Cloudflare à importer des fichiers dans votre bucket, assurez-vous que votre bucket a ajouté IAM Cloudflare en tant qu'utilisateur disposant du rôle Administrateur des objets de l'espace de stockage.
- Une fois que vous avez saisi les informations de destination, sélectionnez Continuer.
- Pour prouver la propriété, Cloudflare envoie un fichier à la destination que vous avez indiquée. Pour trouver le jeton, sélectionnez le bouton Ouvrir dans l'onglet Vue d'ensemble du fichier de défi de propriété, puis collez-le dans le tableau de bord Cloudflare pour vérifier votre accès au bucket. Saisissez le jeton de propriété, puis sélectionnez Continuer.
- Sélectionnez l'ensemble de données à transférer vers le service de stockage.
- Configurez votre tâche Logpush :
- Saisissez le nom de la tâche.
- Dans Si les journaux correspondent, sélectionnez les événements à inclure ou à supprimer de vos journaux. Cette option n'est pas disponible pour tous les ensembles de données.
- Dans Envoyer les champs suivants, choisissez d'envoyer tous les journaux vers votre destination de stockage ou de sélectionner les journaux que vous souhaitez envoyer.
- Sélectionnez Envoyer une fois que vous avez terminé de configurer votre tâche Logpush.
Configurer un flux dans Google Security Operations pour ingérer les journaux du WAF Cloudflare
- Sélectionnez Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Saisissez un nom unique pour le nom du flux.
- Sélectionnez Google Cloud Storage comme Type de source.
- Sélectionnez Cloudflare WAF comme Type de journal.
- Cliquez sur Obtenir un compte de service. Google Security Operations fournit un compte de service unique qu'il utilise pour ingérer les données.
- Configurez l'accès du compte de service aux objets Cloud Storage. Pour en savoir plus, consultez Accorder l'accès au compte de service Google Security Operations.
- Cliquez sur Suivant.
- Configurez les paramètres d'entrée suivants :
- URI du bucket de stockage
- Un URI est un
- Option de suppression de la source
- Cliquez sur Suivant, puis sur Envoyer.
Pour en savoir plus sur les flux Google Security Operations, consultez la documentation sur les flux Google Security Operations. Pour en savoir plus sur les exigences de chaque type de flux, consultez la section Configuration des flux par type.
Si vous rencontrez des problèmes lorsque vous créez des flux, contactez l'assistance Google Security Operations.
Référence du mappage de champs
Cet analyseur extrait des champs des journaux JSON du pare-feu d'application Web (WAF) de Cloudflare, et les transforme en modèle de données unifié (UDM). Il gère divers champs de journal, y compris des informations sur le réseau, des détails HTTP, des résultats de sécurité et des métadonnées, et les met en correspondance avec les champs UDM correspondants pour une représentation et une analyse cohérentes dans Google Security Operations.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
Action | security_result.action_details | La valeur du champ "Action" du journal brut est mappée sur security_result.action_details . |
Action | security_result.action | Le champ security_result.action est dérivé de la valeur du champ "Action". "allow" permet à Maps d'autoriser. "challengeSolved", "jschallengeSolved", "managedchallengenoninteractivesolved" et "managedchallengeinteractivesolved" sont mappés sur ALLOW_WITH_MODIFICATION. "drop", "block" et "connectionclose" sont mappés sur BLOCK. "challengefailed" et "jschallengefailed" correspondent à "FAIL". Toute autre valeur non vide ou "inconnu" est mappée sur UNKNOWN_ACTION. |
ClientASN | network.asn | La valeur du champ "ClientASN" du journal brut est convertie en chaîne et mappée sur network.asn . |
ClientASNDescription | additional.fields.key | Définissez-le sur "ClientASNDescription". |
ClientASNDescription | additional.fields.value.string_value | La valeur du champ "ClientASNDescription" du journal brut est mappée sur additional.fields.value.string_value . |
ClientCountry | principal.location.country_or_region | La valeur du champ "ClientCountry" du journal brut est mappée sur principal.location.country_or_region . |
ClientIP | principal.ip | La valeur du champ "ClientIP" du journal brut est mappée sur principal.ip . |
ClientRefererHost | intermediary.hostname | La valeur du champ "ClientRefererHost" du journal brut est mappée sur intermediary.hostname . |
ClientRefererPath | network.http.referral_url | La valeur du champ "ClientRefererPath" du journal brut est mappée sur network.http.referral_url . |
ClientRequestMethod | network.http.method | La valeur du champ "ClientRequestMethod" du journal brut est mappée sur network.http.method . |
ClientRequestHost | target.hostname | La valeur du champ "ClientRequestHost" du journal brut est mappée sur target.hostname . |
ClientRequestPath | target.file.full_path | La valeur du champ "ClientRequestPath" du journal brut est mappée sur target.file.full_path s'il n'est pas vide ou s'il ne correspond pas à "/". |
ClientRequestProtocol | network.application_protocol | La partie du protocole de la valeur du champ "ClientRequestProtocol" (par exemple, "HTTP" de "HTTP/1.1") est extrait, converti en majuscules et mappé sur network.application_protocol . |
ClientRequestUserAgent | network.http.user_agent | La valeur du champ "ClientRequestUserAgent" du journal brut est mappée sur network.http.user_agent . |
Date/Heure | metadata.event_timestamp | La valeur du champ "Date/Heure" du journal brut est analysée en tant que code temporel RFC 3339 et mappée sur metadata.event_timestamp . |
EdgeColoCode | additional.fields.key | Définissez-le sur "EdgeColoCode". |
EdgeColoCode | additional.fields.value.string_value | La valeur du champ "EdgeColoCode" du journal brut est mappée sur additional.fields.value.string_value . |
EdgeResponseStatus | network.http.response_code | La valeur du champ "EdgeResponseStatus" du journal brut est convertie en entier et mappée sur network.http.response_code . |
Genre | metadata.product_event_type | La valeur du champ "Kind" (Type) du journal brut est mappée sur metadata.product_event_type . |
Metadata.filter | target.resource.attribute.labels.key | Définissez-le sur "Filtre de métadonnées". |
Metadata.filter | target.resource.attribute.labels.value | La valeur du champ "Metadata.filter" du journal brut est mappée sur target.resource.attribute.labels.value . |
Metadata.type | target.resource.attribute.labels.key | Définissez-le sur "Type de métadonnées". |
Metadata.type | target.resource.attribute.labels.value | La valeur du champ "Metadata.type" du journal brut est mappée sur target.resource.attribute.labels.value . |
RayID | metadata.product_log_id | La valeur du champ "RayID" du journal brut est mappée sur metadata.product_log_id . |
RuleID | security_result.rule_id | La valeur du champ "RuleID" du journal brut est mappée sur security_result.rule_id . |
Source | security_result.rule_name | La valeur du champ "Source" du journal brut est mappée sur security_result.rule_name . |
N/A | metadata.vendor_name | Code codé en dur sur "Cloudflare". |
N/A | metadata.product_name | Coded en dur sur "Agrégateur de journaux Cloudflare". |
N/A | metadata.log_type | Code codé en dur sur "CLOUDFLARE_WAF". |
N/A | metadata.event_type | Déterminé par la logique de l'analyseur en fonction de la présence de "ClientIP", de "ClientRequestHost" et de la valeur de "app_protocol". Les valeurs possibles sont NETWORK_HTTP, NETWORK_CONNECTION, STATUS_UPDATE et GENERIC_EVENT. |
Modifications
2023-08-30
- Champ "ClientRequestPath" initialisé.
2023-02-02
- Validation de la valeur "security_result" avant sa fusion avec l'événement.
2022-09-16
- Mappage du champ "Action" sur "security_result.action_details".
- Mappage de "security_result.action" sur "ALLOW_WITH_MODIFICATION" lorsque l'action contient "challengeSolved", "jschallengeSolved", "managedchallengenoninteractivesolved" ou "managedchallengeinteractivesolved".
- Mappage de "security_result.action" sur "BLOCK" lorsque l'action contient "drop", "block" ou "connectionclose".
- Mappage de "security_result.action" sur "FAIL" lorsque l'action contient "challengefailed", "jschallengefailed".
2022-07-25
- Description- Newly created parser