Collecter les journaux du WAF Cloudflare

Compatible avec:

Cet analyseur extrait des champs des journaux JSON du pare-feu d'application Web (WAF) de Cloudflare, les transforme et les met en correspondance avec le modèle de données unifié (UDM). Il gère diverses actions Cloudflare, enrichit les données avec des métadonnées et des informations réseau, puis structure la sortie au format UDM.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un accès privilégié à Google Cloud.
  • Assurez-vous de disposer d'un forfait Cloudflare Enterprise.
  • Assurez-vous de disposer d'un accès privilégié à Cloudflare.

Créer un Google Cloud bucket de stockage

  1. Se connecter à la Google Cloud console
  2. Accédez à la page Buckets Cloud Storage.

    Accéder à la page "Buckets"

  3. Cliquez sur Créer.

  4. Configurez le bucket:

    • Name (Nom) : saisissez un nom unique qui répond aux exigences de dénomination des buckets (par exemple, cloudflare-waf).
    • Choisissez où stocker vos données: sélectionnez un emplacement.
    • Choisissez une classe de stockage pour vos données: sélectionnez une classe de stockage par défaut pour le bucket ou classe automatique pour une gestion automatique des classes de stockage.
    • Choisir comment contrôler l'accès aux objets: sélectionnez non pour appliquer la protection contre l'accès public, puis sélectionnez un modèle de contrôle des accès pour les objets de votre bucket.
    • Classe de stockage: choisissez en fonction de vos besoins (par exemple, Standard).
  5. Cliquez sur Créer.

Accorder des autorisations de bucket à un utilisateur IAM Cloudflare

  1. Dans Google Cloud, accédez à Storage > Browser > Bucket > Permissions (Stockage > Navigateur > Bucket > Autorisations).
  2. Ajoutez le compte logpush@cloudflare-data.iam.gserviceaccount.com avec l'autorisation "Administrateur des objets de l'espace de stockage".

Créer une tâche Logpush pour les journaux WAF à l'aide de l'interface utilisateur de Cloudflare

  1. Connectez-vous à Cloudflare.
  2. Accédez à Données analytiques et journaux > Logpush.
  3. Sélectionnez Créer une tâche Logpush.
  4. Dans Sélectionner une destination, choisissez Google Cloud Stockage.
  5. Saisissez les informations de destination suivantes :
    • Bucket (Bucket) : Google Cloud nom du bucket Storage
    • Chemin d'accès: emplacement du bucket dans le conteneur de stockage
    • Sélectionnez Organiser les journaux dans des sous-dossiers quotidiens.
  6. Cliquez sur Continuer.
  1. Sélectionnez l'ensemble de données Sécurité (WAF) à transférer vers l'espace de stockage.
  2. Configurez la tâche logpush :
    • Saisissez le nom de la tâche.
    • Sous "Si les journaux correspondent", vous pouvez sélectionner les événements à inclure et/ou à supprimer de vos journaux. Pour en savoir plus, consultez la section Filtres. Cette option n'est pas disponible pour tous les ensembles de données.
    • Dans les champs Envoyer les éléments suivants, vous pouvez choisir d'envoyer tous les journaux vers votre destination de stockage ou de sélectionner les journaux que vous souhaitez envoyer.
  3. Cliquez sur Envoyer.

Configurer un flux dans Google SecOps pour ingérer les journaux du WAF Cloudflare

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux du WAF Cloudflare).
  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.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants:

    • URI GCS: URL Cloud Storage.
    • Un URI est: sélectionnez Un répertoire qui inclut des sous-répertoires.
    • Options de suppression de la source: sélectionnez l'option de suppression en fonction de vos préférences.
  9. Cliquez sur Suivant.

  10. Vérifiez la configuration de votre nouveau flux dans l'écran Finaliser, puis cliquez sur Envoyer.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
Action security_result.action_details La valeur de Action du journal brut est directement attribuée à ce champ UDM.
Action security_result.action La valeur de ce champ est dérivée du champ Action du journal brut. Si Action est défini sur "allow", le champ UDM est défini sur ALLOW. Si Action est "challengeSolved", "jschallengeSolved", "managedchallengenoninteractivesolved" ou "managedchallengeinteractivesolved", le champ UDM est défini sur ALLOW_WITH_MODIFICATION. Si Action est "drop", "block" ou "connectionclose", le champ UDM est défini sur BLOCK. Si Action est "challengefailed" ou "jschallengefailed", le champ UDM est défini sur FAIL. Sinon, la valeur est égale à UNKNOWN_ACTION.
ClientASN network.asn La valeur ClientASN du journal brut est directement attribuée à ce champ UDM après avoir été convertie en chaîne.
ClientASNDescription additional.fields.key La clé est définie de manière statique sur "ClientASNDescription".
ClientASNDescription additional.fields.value.string_value La valeur de ClientASNDescription du journal brut est directement attribuée à ce champ UDM.
ClientCountry principal.location.country_or_region La valeur de ClientCountry du journal brut est directement attribuée à ce champ UDM.
ClientIP principal.ip La valeur de ClientIP du journal brut est directement attribuée à ce champ UDM.
ClientRefererHost intermediary.hostname La valeur de ClientRefererHost du journal brut est directement attribuée à ce champ UDM.
ClientRefererPath network.http.referral_url La valeur de ClientRefererPath du journal brut est directement attribuée à ce champ UDM.
ClientRequestHost target.hostname La valeur de ClientRequestHost du journal brut est directement attribuée à ce champ UDM.
ClientRequestMethod network.http.method La valeur de ClientRequestMethod du journal brut est directement attribuée à ce champ UDM.
ClientRequestPath target.file.full_path La valeur de ClientRequestPath du journal brut est directement attribuée à ce champ UDM.
ClientRequestProtocol network.application_protocol Partie du protocole de ClientRequestProtocol (par exemple, "HTTP" de "HTTP/1.1") est extrait à l'aide de grok, converti en majuscules et attribué à ce champ UDM.
ClientRequestUserAgent network.http.user_agent La valeur de ClientRequestUserAgent du journal brut est directement attribuée à ce champ UDM.
Datetime metadata.event_timestamp La valeur de Datetime du journal brut est analysée en tant que code temporel RFC 3339 et attribuée à ce champ UDM.
EdgeColoCode additional.fields.key La clé est définie de manière statique sur "EdgeColoCode".
EdgeColoCode additional.fields.value.string_value La valeur de EdgeColoCode du journal brut est directement attribuée à ce champ UDM.
EdgeResponseStatus network.http.response_code La valeur de EdgeResponseStatus du journal brut est directement attribuée à ce champ UDM et convertie en entier.
Kind metadata.product_event_type La valeur de Kind du journal brut est directement attribuée à ce champ UDM.
Metadata.filter target.resource.attribute.labels.value La valeur de Metadata.filter du journal brut est attribuée au champ value d'un libellé dans target.resource.attribute.labels. Le key de ce libellé est défini statiquement sur "Filtre de métadonnées".
Metadata.type target.resource.attribute.labels.value La valeur de Metadata.type du journal brut est attribuée au champ value d'un libellé dans target.resource.attribute.labels. Le key de ce libellé est défini de manière statique sur "Type de métadonnées". La valeur de ce champ est dérivée en fonction de la présence et des valeurs de ClientIP, ClientRequestHost et app_protocol. Consultez le code de l'analyseur pour connaître la logique spécifique. Défini de manière statique sur "Cloudflare". Défini de manière statique sur "Agrégateur de journaux Cloudflare". Valeur statique définie sur "CLOUDFLARE_WAF".
RayID metadata.product_log_id La valeur de RayID du journal brut est directement attribuée à ce champ UDM.
RuleID security_result.rule_id La valeur de RuleID du journal brut est directement attribuée à ce champ UDM.
Source security_result.rule_name La valeur de Source du journal brut est directement attribuée à ce champ UDM.
timestamp metadata.event_timestamp, events.timestamp La valeur timestamp du journal brut est directement attribuée à ces champs UDM.

Modifications

2024-08-08

  • Données extraites de "ClientRequestHost" et "ClientRequestURI", fusionnées et mappées sur "target.url".

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

  • Vous avez mappé le 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

  • Analyseur nouvellement créé

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.