Collecter les journaux F5 Shape
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
- Accédez à Google Cloud Console.
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage> Buckets.
- Cliquez sur Créer un bucket.
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. 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
- Connectez-vous à la console F5 Distributed Cloud.
- Sur la page d'accueil de la console, sélectionnez Administration.
- Dans le menu de navigation de gauche, accédez à Gestion personnelle > Identifiants.
- Cliquez sur Add Credentials (Ajouter des identifiants).
- Dans la section Métadonnées, saisissez un Nom pour votre certificat (par exemple,
secops-integration). - Dans la liste Type d'identifiant, sélectionnez Certificat API.
- Saisissez un mot de passe et confirmez-le dans le champ Confirmer le mot de passe.
Sélectionnez une date d'expiration dans la liste du calendrier.
Cliquez sur Télécharger pour générer et télécharger le certificat au format de fichier
.p12.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
- Dans la console GCP, accédez à IAM et administration > Comptes de service.
- Cliquez sur Créer un compte de service.
- 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.
- Nom du compte de service : saisissez
- Cliquez sur Créer et continuer.
- Dans la section Autoriser ce compte de service à accéder au projet :
- Cliquez sur Sélectionner un rôle.
- Recherchez et sélectionnez Administrateur des objets de l'espace de stockage.
- Cliquez sur Continuer.
- Cliquez sur OK.
Accorder des autorisations IAM sur un bucket GCS
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket (par exemple,
f5-xc-logs). - Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- 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.
- Ajouter des comptes principaux : saisissez l'adresse e-mail du compte de service (par exemple,
- Cliquez sur Enregistrer.
Créer une clé de compte de service
- Dans la console GCP, accédez à IAM et administration > Comptes de service.
- Recherchez le compte de service (par exemple,
f5-xc-log-writer) et cliquez dessus. - Accédez à l'onglet Clés.
- Cliquez sur Ajouter une clé > Créer une clé.
- Sélectionnez JSON comme type de clé.
- Cliquez sur Créer.
- 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
- Dans la console F5 Distributed Cloud, sur la page d'accueil, sélectionnez Multi-Cloud Network Connect ou Shared Configuration.
- Dans le menu de navigation de gauche, accédez à Gérer > Gestion du site > Identifiants Cloud.
- Cliquez sur Add Cloud Credentials (Ajouter des identifiants cloud).
- Dans la section Métadonnées, saisissez un Nom (par exemple,
gcp-secops-logs). - Dans la liste Type d'identifiants cloud, sélectionnez Identifiants GCP.
- Dans la section Identifiants GCP, cliquez sur Configurer.
- Dans la section Clé de compte de service :
- Dans la liste Type de secret, sélectionnez Secret aveugle.
- Dans la liste Action, sélectionnez Blindfold New Secret (Bandage nouveau secret).
- Dans la liste Type de règle, sélectionnez Intégrée.
- 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é.
- Cliquez sur Appliquer.
- 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
- 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.
- Cliquez sur Ajouter un récepteur de journaux global.
- Dans la section Métadonnées, saisissez un Nom (par exemple,
secops-gcs-receiver). - Vous pouvez également ajouter des libellés et une description.
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
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.
Dans la liste Receiver Configuration (Configuration du récepteur), sélectionnez GCP Bucket (Bucket GCP).
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).
- Nom du bucket GCP : saisissez le nom de votre bucket GCS (par exemple,
Configurer les paramètres avancés (facultatif)
- Cliquez sur le bouton Afficher les champs avancés.
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 :
300secondes). - 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 :
10485760octets / 10 Mo).
- Options de délai avant expiration du lot : sélectionnez Délai avant expiration (en secondes) et saisissez une valeur (par défaut :
Terminer et tester la configuration
- Cliquez sur Enregistrer et quitter pour créer le récepteur de journaux global.
- Dans la liste Récepteur de journaux global, recherchez votre récepteur (par exemple,
secops-gcs-receiver). - Dans la colonne Actions, cliquez sur les trois points ..., puis sélectionnez Tester la connexion.
Attendez la fin du test. Un message de réussite indique que la connexion fonctionne.
Vérifiez que les journaux sont écrits dans GCS :
- Accédez à Cloud Storage > Buckets dans la console GCP.
- Cliquez sur le nom de votre bucket (par exemple,
f5-xc-logs). - 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
- Dossier quotidien :
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/29185.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
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
F5 Distributed Cloud Bot Defense). - Sélectionnez Google Cloud Storage V2 comme Type de source.
- Sélectionnez F5_SHAPE comme Type de journal.
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.comCopiez l'adresse e-mail pour l'utiliser à l'étape suivante.
Cliquez sur Suivant.
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-logspar 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/).
- Remplacez
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.
Cliquez sur Suivant.
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.
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket (par exemple,
f5-xc-logs). - Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- 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.
- 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.