Collecter les journaux du WAF Cloudflare

Compatible avec:

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:

  1. Connectez-vous au tableau de bord Cloudflare.
  2. Cliquez sur le site Web à surveiller.
  3. Cliquez sur Obtenir votre clé API pour obtenir la clé d'authentification.
  4. Sélectionnez Jeton d'API.
  5. Cliquez sur Créer un jeton.
  6. Indiquez les valeurs suivantes sur la page Créer un jeton :
    1. Dans le champ Nom du jeton, indiquez le nom du jeton.
    2. Dans la section Autorisations, procédez comme suit :
      1. Sélectionnez Zone, Journaux et Lecture dans les trois listes, respectivement.
      2. Cliquez sur Ajouter. Sélectionnez Zone, Analytics et Lecture dans les trois premières listes, respectivement.
      3. Cliquez sur Ajouter. Sélectionnez Zone, Services de pare-feu et Lecture dans les première, deuxième et troisième listes, respectivement.
      4. Dans la section Ressources de zone, sélectionnez Inclure et Toutes les zones dans les première et deuxième listes, respectivement.
  7. Cliquez sur Continuer vers le récapitulatif.
  8. Cliquez sur Créer un jeton.
  9. 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

  1. Connectez-vous au tableau de bord Cloudflare.
  2. Cliquez sur le site Web à surveiller.
  3. Accédez à Analyses et journaux > Logpush.
  4. Sélectionnez Créer une tâche Logpush.
  5. Dans Sélectionner une destination, choisissez Google Cloud Storage.
  6. 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.
  7. 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.
  8. Sélectionnez l'ensemble de données à transférer vers le service de stockage.
  9. 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.
  10. 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

  1. Sélectionnez Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Saisissez un nom unique pour le nom du flux.
  4. Sélectionnez Google Cloud Storage comme Type de source.
  5. Sélectionnez Cloudflare WAF comme Type de journal.
  6. 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.
  7. 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.
  8. Cliquez sur Suivant.
  9. Configurez les paramètres d'entrée suivants :
    • URI du bucket de stockage
    • Un URI est un
    • Option de suppression de la source
  10. 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