Collecter les journaux F5 Shape

Compatible avec :

Ce document explique comment ingérer des journaux F5 Shape dans Google Security Operations à l'aide de Google Cloud Storage V2.

F5 Distributed Cloud Bot Defense (anciennement Shape Security) protège les applications contre les attaques automatisées en identifiant et en atténuant les robots malveillants. Bot Defense utilise JavaScript et des SDK mobiles natifs pour collecter des données de télémétrie à partir des navigateurs clients et des appareils mobiles. Il examine ces données avant que les requêtes n'atteignent votre application. Le service fournit des tableaux de bord et des rapports intégrés pour afficher des informations détaillées sur le trafic analysé, y compris les événements de sécurité, les journaux d'accès et les journaux d'audit.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

  • Une instance Google SecOps
  • Un projet GCP avec l'API Cloud Storage activée
  • Autorisations pour créer et gérer des buckets GCS
  • Autorisations permettant de gérer les stratégies IAM sur les buckets GCS
  • Accès privilégié à la console F5 Distributed Cloud
  • Un compte F5 Distributed Cloud avec accès au service Multi-Cloud Network Connect ou Shared Configuration

Créer un bucket Google Cloud Storage

  1. Accédez à Google Cloud Console.
  2. Sélectionnez votre projet ou créez-en un.
  3. Dans le menu de navigation, accédez à Cloud Storage> Buckets.
  4. Cliquez sur Créer un bucket.
  5. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Nommer votre bucket Saisissez un nom unique (par exemple, f5-xc-logs).
    Type d'emplacement Choisissez en fonction de vos besoins (région, birégion ou multirégion).
    Emplacement Sélectionnez l'emplacement (par exemple, us-central1).
    Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment)
    Access control (Contrôle des accès) Uniforme (recommandé).
    Outils de protection Facultatif : Activez la gestion des versions des objets ou la règle de conservation.
  6. Cliquez sur Créer.

Générer des identifiants pour l'API F5 Shape

F5 Distributed Cloud utilise des certificats API (mTLS) ou des jetons API pour l'authentification. Les certificats d'API sont recommandés pour renforcer la sécurité.

Créer un certificat d'API

  1. Connectez-vous à la console F5 Distributed Cloud.
  2. Sur la page d'accueil de la console, sélectionnez Administration.
  3. Dans le menu de navigation de gauche, accédez à Gestion personnelle > Identifiants.
  4. Cliquez sur Add Credentials (Ajouter des identifiants).
  5. Dans la section Métadonnées, saisissez un Nom pour votre certificat (par exemple, secops-integration).
  6. Dans la liste Type d'identifiant, sélectionnez Certificat API.
  7. Saisissez un mot de passe et confirmez-le dans le champ Confirmer le mot de passe.
  8. Sélectionnez une date d'expiration dans la liste du calendrier.

  9. Cliquez sur Télécharger pour générer et télécharger le certificat au format de fichier .p12.

  10. Enregistrez le fichier de certificat téléchargé et le mot de passe de manière sécurisée pour une utilisation ultérieure.

Créer des identifiants cloud GCP dans F5 Distributed Cloud

F5 Distributed Cloud nécessite des identifiants de compte de service Google Cloud pour écrire des journaux dans votre bucket GCS.

Créer un compte de service Google Cloud

  1. Dans la console GCP, accédez à IAM et administration > Comptes de service.
  2. Cliquez sur Créer un compte de service.
  3. Fournissez les informations de configuration suivantes :
    • Nom du compte de service : saisissez f5-xc-log-writer (ou le nom de votre choix).
    • Description du compte de service : saisissez Service account for F5 Distributed Cloud to write logs to GCS.
  4. Cliquez sur Créer et continuer.
  5. Dans la section Autoriser ce compte de service à accéder au projet :
    1. Cliquez sur Sélectionner un rôle.
    2. Recherchez et sélectionnez Administrateur des objets de l'espace de stockage.
  6. Cliquez sur Continuer.
  7. Cliquez sur OK.

Accorder des autorisations IAM sur un bucket GCS

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket (par exemple, f5-xc-logs).
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : saisissez l'adresse e-mail du compte de service (par exemple, f5-xc-log-writer@PROJECT_ID.iam.gserviceaccount.com).
    • Attribuer des rôles : sélectionnez Administrateur des objets Storage.
  6. Cliquez sur Enregistrer.

Créer une clé de compte de service

  1. Dans la console GCP, accédez à IAM et administration > Comptes de service.
  2. Recherchez le compte de service (par exemple, f5-xc-log-writer) et cliquez dessus.
  3. Accédez à l'onglet Clés.
  4. Cliquez sur Ajouter une clé > Créer une clé.
  5. Sélectionnez JSON comme type de clé.
  6. Cliquez sur Créer.
  7. Le fichier de clé JSON est téléchargé automatiquement. Enregistrez ce fichier de manière sécurisée.

Ajouter des identifiants Cloud  Google Cloud à F5 Distributed Cloud

  1. Dans la console F5 Distributed Cloud, sur la page d'accueil, sélectionnez Multi-Cloud Network Connect ou Shared Configuration.
  2. Dans le menu de navigation de gauche, accédez à Gérer > Gestion du site > Identifiants Cloud.
  3. Cliquez sur Add Cloud Credentials (Ajouter des identifiants cloud).
  4. Dans la section Métadonnées, saisissez un Nom (par exemple, gcp-secops-logs).
  5. Dans la liste Type d'identifiants cloud, sélectionnez Identifiants GCP.
  6. Dans la section Identifiants GCP, cliquez sur Configurer.
  7. Dans la section Clé de compte de service :
    1. Dans la liste Type de secret, sélectionnez Secret aveugle.
    2. Dans la liste Action, sélectionnez Blindfold New Secret (Bandage nouveau secret).
    3. Dans la liste Type de règle, sélectionnez Intégrée.
    4. Dans le champ Secret to Blindfold (Secret pour Blindfold), collez l'intégralité du contenu du fichier de clé JSON que vous avez téléchargé.
  8. Cliquez sur Appliquer.
  9. Cliquez sur Enregistrer et quitter.

Configurer le récepteur de journaux global pour GCS

Le récepteur de journaux globaux F5 Distributed Cloud diffuse les journaux vers GCS toutes les cinq minutes au format NDJSON (JSON délimité par un retour à la ligne).

Créer un récepteur de journaux global

  1. Dans la console F5 Distributed Cloud, sur la page d'accueil, sélectionnez Multi-Cloud Network Connect ou Shared Configuration.
    • Pour Multi-Cloud Network Connect : accédez à Gérer > Gestion des journaux > Récepteur de journaux global.
    • Pour la configuration partagée : accédez à Gérer > Récepteur de journaux global.
  2. Cliquez sur Ajouter un récepteur de journaux global.
  3. Dans la section Métadonnées, saisissez un Nom (par exemple, secops-gcs-receiver).
  4. Vous pouvez également ajouter des libellés et une description.
  5. Dans la liste Type de journal, sélectionnez les types de journaux que vous souhaitez collecter :

    • Journaux des requêtes : journaux d'accès HTTP des équilibreurs de charge
    • Événements de sécurité : événements de sécurité Bot Defense et WAF
    • Journaux d'audit : journaux d'audit de configuration et d'administration
    • Journaux des requêtes DNS : journaux des requêtes DNS
  6. Dans la liste Sélection des messages de journal :

    • Si vous utilisez le service Multi-Cloud Network Connect, sélectionnez Sélectionner les journaux de l'espace de noms actuel (espace de noms système).
    • Si vous utilisez le service Shared Configuration, choisissez l'une des options suivantes :
      • Sélectionner les journaux de l'espace de noms actuel : envoie les journaux de l'espace de noms partagé uniquement.
      • Sélectionner les journaux de tous les espaces de noms : envoie les journaux de tous les espaces de noms.
      • Sélectionner des journaux dans des espaces de noms spécifiques : saisissez des noms d'espaces de noms spécifiques, puis cliquez sur Ajouter un élément pour en ajouter d'autres.
  7. Dans la liste Receiver Configuration (Configuration du récepteur), sélectionnez GCP Bucket (Bucket GCP).

  8. Dans la section Bucket GCP, fournissez la configuration suivante :

    • Nom du bucket GCP : saisissez le nom de votre bucket GCS (par exemple, f5-xc-logs).
    • Identifiants GCP Cloud : dans la liste, sélectionnez les identifiants Cloud que vous avez créés (par exemple, gcp-secops-logs).

Configurer les paramètres avancés (facultatif)

  1. Cliquez sur le bouton Afficher les champs avancés.
  2. Dans la section Options de lot, configurez les éléments suivants (facultatif) :

    • Options de délai avant expiration du lot : sélectionnez Délai avant expiration (en secondes) et saisissez une valeur (par défaut : 300 secondes).
    • Nombre maximal d'événements par lot : sélectionnez Nombre maximal d'événements, puis saisissez une valeur comprise entre 32 et 2 000 (facultatif).
    • Octets du lot : sélectionnez Octets max. et saisissez une valeur comprise entre 4 096 et 1 048 576 (par défaut : 10485760 octets / 10 Mo).

Terminer et tester la configuration

  1. Cliquez sur Enregistrer et quitter pour créer le récepteur de journaux global.
  2. Dans la liste Récepteur de journaux global, recherchez votre récepteur (par exemple, secops-gcs-receiver).
  3. Dans la colonne Actions, cliquez sur les trois points ..., puis sélectionnez Tester la connexion.
  4. Attendez la fin du test. Un message de réussite indique que la connexion fonctionne.

  5. Vérifiez que les journaux sont écrits dans GCS :

    1. Accédez à Cloud Storage > Buckets dans la console GCP.
    2. Cliquez sur le nom de votre bucket (par exemple, f5-xc-logs).
    3. Dans les 5 à 10 minutes qui suivent, des dossiers devraient être créés avec la structure suivante :
      • Dossier quotidien : YYYY-MM-DD/
      • Sous-dossier horaire : YYYY-MM-DD/HH/
      • Fichiers journaux : YYYY-MM-DD/HH/logs_YYYYMMDDHHMMSS.ndjson.gz

Configurer la liste d'autorisation du pare-feu

F5 Distributed Cloud nécessite que des plages d'adresses IP spécifiques soient autorisées dans votre pare-feu pour la diffusion des journaux.

Ajoutez les plages d'adresses IP suivantes à la liste d'autorisation de votre pare-feu :

  • 193.16.236.64/29
  • 185.160.8.152/29

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 GCS. Vous devez accorder à ce compte de service l'accès à votre bucket.

Obtenir l'adresse e-mail du compte de service

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, F5 Distributed Cloud Bot Defense).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez F5_SHAPE comme Type de journal.
  7. Cliquez sur Obtenir un compte de service. Une adresse e-mail unique pour le compte de service s'affiche, par exemple :

    secops-12345678@secops-gcp-prod.iam.gserviceaccount.com
    
  8. Copiez l'adresse e-mail pour l'utiliser à l'étape suivante.

  9. Cliquez sur Suivant.

  10. Spécifiez les valeurs des paramètres d'entrée suivants :

    • URL du bucket de stockage : saisissez l'URI du bucket GCS avec le chemin d'accès au préfixe :

      gs://f5-xc-logs/
      
      • Remplacez f5-xc-logs par le nom réel de votre bucket GCS.
      • Si vous avez configuré un préfixe spécifique dans le récepteur de journaux global, incluez-le dans le chemin d'accès (par exemple, gs://f5-xc-logs/bot-defense/).
    • Option de suppression de la source : sélectionnez l'option de suppression de votre choix :

      • Jamais : ne supprime jamais aucun fichier après les transferts (recommandé pour les tests).
      • Supprimer les fichiers transférés : supprime les fichiers après un transfert réussi.
      • Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides après un transfert réussi.

    • Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours (180 jours par défaut).

    • Espace de noms de l'élément : espace de noms de l'élément.

    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux.

  11. Cliquez sur Suivant.

  12. Vérifiez la configuration de votre nouveau flux 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 du rôle Lecteur des objets Storage sur votre bucket GCS.

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket (par exemple, f5-xc-logs).
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
    • Attribuer des rôles : sélectionnez Lecteur des objets de l'espace de stockage.
  6. Cliquez sur Enregistrer.

Table de mappage UDM

Champ du journal Mappage UDM Logique
msg.requestHeaders.Proxy-Client-IP, msg.requestHeaders.WF-Forwarded-For, msg.requestHeaders.X-Forwarded-For, msg.requestHeaders.wl-proxy-client-ip, msg.hashedUserAgent, msg.transactionId, msg.hashedUsername, msg.dcgShapeFailedOn, ShapeShifterId, eventType, eventId, latRequest, latResponse, latTotal, latRspWait, count, latEccWait additional.fields Fusionnée à partir d'étiquettes créées à partir de différents champs
intermédiaire intermédiaire Valeur copiée directement si elle n'est pas vide
description metadata.description Valeur copiée directement
target, has_principal_machine metadata.event_type Défini sur NETWORK_HTTP si la cible est différente de "", sur STATUS_UPDATE si has_principal_machine est défini sur "true", ou sur GENERIC_EVENT
application network.application_protocol Valeur en majuscules
requestMethod, msg.method network.http.method Valeur de requestMethod si elle n'est pas vide, sinon msg.method
requestClientApplication, msg.requestHeaders.User-Agent network.http.parsed_user_agent Valeur de requestClientApplication si elle n'est pas vide, sinon msg.requestHeaders.User-Agent, convertie en user-agent analysé
requestContext, msg.requestHeaders.Referer network.http.referral_url Valeur de requestContext si elle n'est pas vide, sinon msg.requestHeaders.Referer
msg.sseResponseCode, prCode network.http.response_code Valeur de msg.sseResponseCode si elle n'est pas vide, sinon prCode, convertie en entier
requestClientApplication, msg.requestHeaders.User-Agent network.http.user_agent Valeur de requestClientApplication si elle n'est pas vide, sinon msg.requestHeaders.User-Agent
requestHeader.x-shape-src-virtual observer.ip Valeur copiée directement
principal principal Valeur copiée directement
msg.host principal.asset.hostname Valeur copiée directement
src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For principal.asset.ip Valeur de src si elle n'est pas vide, sinon msg.src, sinon msg.trueClientIP, sinon première adresse IP de X-Forwarded-For si elle est différente de src
msg.host principal.hostname Valeur copiée directement
src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For principal.ip Valeur de src si elle n'est pas vide, sinon msg.src, sinon msg.trueClientIP, sinon première adresse IP de X-Forwarded-For si elle est différente de src
msg.requestHeaders principal.resource.attribute.labels Fusionné à partir des paires clé/valeur dans msg.requestHeaders
msg.uri principal.url Valeur copiée directement
security_result security_result Valeur copiée directement
deviceExternalId security_result.about.asset_id Valeur copiée directement
flowLabel, agentLabel, requestHeader.Content-Length, requestHeader.Content-Type, requestHeader.Accept, requestHeader.Accept-Encoding, browserType, accountInfo, requestHeader.Via, asn, tid, ctag, requestHeader.Cache-Control, transactionResult security_result.about.labels Fusionnée à partir d'étiquettes créées à partir de différents champs
act, msg.transactionResult security_result.action Défini sur ALLOW si act correspond à PASS et estAttack, sinon UNKNOWN_ACTION ; ou ALLOW si msg.transactionResult == Success, BLOCK si Failure
act, msg.transactionResult security_result.action_details Valeur de l'action si elle n'est pas vide, sinon msg.transactionResult
de gravité, security_result.severity Définissez sur HIGH si l'état est "Error", "error" ou "warning", sur CRITICAL si l'état est "critical", sur MEDIUM si l'état est "notice", et sur LOW si l'état est "information", "info" ou "INFO".
de gravité, security_result.severity_details Valeur copiée directement
attackCause security_result.threat_name Valeur copiée directement
cible cible Valeur copiée directement
appName target.application Valeur copiée directement
dst, msg.dst target.asset.ip Valeur de dst si elle n'est pas vide, sinon msg.dst
dhost target.hostname Valeur copiée directement
dst, msg.dst target.ip Valeur de dst si elle n'est pas vide, sinon msg.dst
countryName target.location.country_or_region Valeur copiée directement
dpt target.port Converti en entier
msg.responseHeaders target.resource.attribute.labels Fusionné à partir des paires clé/valeur dans msg.responseHeaders
request target.url Valeur copiée directement
requestHeader.X-Forwarded-For intermediary.ip Définissez sur les adresses IP suivantes du tableau X-Forwarded-For.
metadata.product_name Définissez-le sur "Forme".
metadata.vendor_name Défini sur "F5"

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