Collecter les journaux du WAF Cloudflare
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
- Se connecter à la Google Cloud console
Accédez à la page Buckets Cloud Storage.
Cliquez sur Créer.
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).
Cliquez sur Créer.
Accorder des autorisations de bucket à un utilisateur IAM Cloudflare
- Dans Google Cloud, accédez à Storage > Browser > Bucket > Permissions (Stockage > Navigateur > Bucket > Autorisations).
- 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
- Connectez-vous à Cloudflare.
- Accédez à Données analytiques et journaux > Logpush.
- Sélectionnez Créer une tâche Logpush.
- Dans Sélectionner une destination, choisissez Google Cloud Stockage.
- 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.
- Cliquez sur Continuer.
- Sélectionnez l'ensemble de données Sécurité (WAF) à transférer vers l'espace de stockage.
- 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.
- Cliquez sur Envoyer.
Configurer un flux dans Google SecOps pour ingérer les journaux du WAF Cloudflare
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux du WAF Cloudflare).
- Sélectionnez Google Cloud Storage comme Type de source.
- Sélectionnez Cloudflare WAF comme Type de journal.
- Cliquez sur Obtenir un compte de service.
- Cliquez sur Suivant.
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.
- Espace de noms des éléments: espace de noms des éléments.
- Libellés d'ingestion: libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
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.