Collecter les journaux Akamai WAF

Compatible avec :

Ce document explique comment exporter et ingérer des journaux Akamai WAF dans Google Security Operations à l'aide de Google Cloud  Storage ou d'AWS S3. L'analyseur gère les journaux et est compatible avec les formats syslog et CEF. Il extrait des champs tels que les adresses IP, les URL, les méthodes HTTP, les codes de réponse, les user-agents et les informations sur les règles de sécurité, et les mappe au modèle de données unifié (UDM) pour une représentation cohérente. L'analyseur gère également des champs Akamai spécifiques tels que attackData et clientReputation, en effectuant les transformations de données nécessaires et en enrichissant la sortie UDM.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Instance Google SecOps
  • Accès privilégié à Google Cloud ou AWS
  • Accès privilégié à Akamai

Exporter et ingérer des journaux Akamai WAF depuis Cloud Storage

Cette section décrit la première étape du processus : configurer l'espace de stockage nécessaire pour vos journaux Akamai WAF.

Créer un bucket de stockage Google Cloud

  1. Connectez-vous à la console Google Cloud .
  2. Accédez à la page Buckets Cloud Storage.

    Accéder à la page "Buckets"

  3. Cliquez sur Créer.

  4. Sur la page "Créer un bucket", saisissez les informations concernant votre bucket. Après chacune de ces étapes, cliquez sur Continuer pour passer à l'étape suivante :

    1. Dans la section Premiers pas, procédez comme suit :

      • Saisissez un nom unique qui répond aux exigences de dénomination des buckets (par exemple, akamai-waf-logs).
      • Pour activer l'espace de noms hiérarchique, cliquez sur la flèche d'expansion pour développer la section Optimiser pour les charges de travail orientées fichiers et à forte intensité de données, puis sélectionnez Activer l'espace de noms hiérarchique sur ce bucket.
      • Pour ajouter une étiquette de bucket, cliquez sur la flèche de développement pour développer la section Étiquettes.
      • Cliquez sur Ajouter un libellé, puis spécifiez une clé et une valeur pour votre libellé.
    2. Dans la section Choisir l'emplacement de stockage de vos données, procédez comme suit :

      • Sélectionnez un type d'emplacement.
      • Utilisez le menu déroulant du type d'emplacement pour sélectionner un emplacement où les données d'objets de votre bucket seront stockées de manière permanente.
      • Pour configurer la réplication entre buckets, développez la section Configurer la réplication entre buckets.
    3. Dans la section Choisir une classe de stockage pour vos données, sélectionnez une classe de stockage par défaut pour le bucket, ou bien classe automatique pour une gestion automatique des classes de stockage des données de votre bucket.

    4. Dans la section 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.

    5. Dans la section Choisir comment protéger les données d'objet, procédez comme suit :

      • Sélectionnez l'une des options sous Protection des données que vous souhaitez définir pour votre bucket.
      • Pour choisir comment vos données d'objet seront chiffrées, cliquez sur la flèche d'expansion intitulée Chiffrement des données, puis sélectionnez une méthode de chiffrement des données.
  5. Cliquez sur Créer.

Configurer les autorisations pour Cloud Storage

  1. Accédez à la page Créer un compte de service.

    Accéder à la page "Créer un compte de service"

  2. Sélectionnez un projet Google Cloud.

  3. Saisissez le nom du compte de service à afficher dans la console Google Cloud .

  4. Cliquez sur Créer et continuer.

  5. Attribuez le rôle roles/storage.admin sur le bucket.

  6. Cliquez sur OK pour terminer la création du compte de service.

Créer et télécharger Google Cloud le fichier de clé du compte de service

  1. Accédez à la page Comptes de service.

    Accéder à la page "Comptes de service"

  2. Sélectionnez un projet Google Cloud.

  3. Cliquez sur l'adresse e-mail du compte de service que vous venez de créer.

  4. Cliquez sur l'onglet Clés.

  5. Cliquez sur le menu Ajouter une clé, puis sélectionnez Créer une clé.

  6. Sélectionnez le type de clé JSON, puis cliquez sur Créer.

    • Cliquez sur Créer pour télécharger un fichier de clé de compte de service. Une fois téléchargé, vous ne pourrez plus le télécharger à nouveau.
    • La clé téléchargée est au format suivant, où PRIVATE_KEY correspond à la partie privée de la paire de clés publique/privée.

Configurer Akamai WAF pour envoyer des journaux à Cloud Storage

  1. Connectez-vous à Akamai Control Center.
  2. Accédez à la section Sécurité.
  3. Sélectionnez Journaux.
  4. Configurer une nouvelle distribution de journaux :
    • Source du journal : sélectionnez votre configuration WAF.
    • Destination : sélectionnez Google Cloud Storage.
    • Nom à afficher : saisissez une description unique.
    • Bucket : spécifiez le nom du bucket Cloud Storage que vous avez créé (par exemple, gs://akamai-waf-logs).
    • ID du projet : saisissez l'ID unique de votre projet Google Cloud .
    • Nom du compte de service : saisissez le nom du compte de service que vous avez créé précédemment.
    • Clé privée : saisissez la valeur private_key de la clé JSON que vous avez générée et téléchargée précédemment. (Vous devez saisir votre clé privée au format PEM avec des symboles de saut de ligne (\n), par exemple -----BEGIN PRIVATE KEY-----\nprivate_key\n-----END PRIVATE KEY-----\n.)
    • Format du journal : choisissez le format de journal souhaité (par exemple, JSON).
    • Fréquence des notifications push : sélectionnez la fréquence à laquelle vous souhaitez recevoir les journaux (par exemple, every 60 seconds).
  5. Cliquez sur Valider et enregistrer pour valider la connexion à la destination et enregistrer les informations que vous avez fournies.

    Google Cloud
  6. Cliquez sur Suivant pour accéder à l'onglet Récapitulatif.

Configurer des flux

Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :

  • Paramètres SIEM> Flux
  • Plate-forme de contenu > Packs de contenu

Configurer des flux à partir de Paramètres SIEM > Flux à l'aide de Google Cloud Stockage

Pour configurer un flux, procédez comme suit :

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux Akamai WAF).
  5. Sélectionnez Google Cloud Storage comme Type de source.
  6. Sélectionnez Akamai WAF comme type de journal.
  7. Cliquez sur Obtenir un compte de service en tant que compte de service Chronicle.
  8. Cliquez sur Suivant.
  9. Spécifiez les valeurs des paramètres d'entrée suivants :

    • URI du bucket Storage : URL du bucket Storage (par exemple, gs://akamai-waf-logs). Google Cloud
    • URI Is A (L'URI est un) : sélectionnez Directory which includes subdirectories (Répertoire incluant des sous-répertoires).
    • Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
  10. Cliquez sur Suivant.

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

Configurer des flux depuis le Hub de contenu

Indiquez les valeurs des champs suivants :

  • URI du bucket Storage : URL du bucket Storage (par exemple, gs://akamai-waf-logs). Google Cloud
  • URI Is A (L'URI est un) : sélectionnez Directory which includes subdirectories (Répertoire incluant des sous-répertoires).
  • Options de suppression de la source : sélectionnez l'option de suppression de votre choix.

Options avancées

  • Nom du flux : valeur préremplie qui identifie le flux.
  • Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
  • Espace de noms de l'élément : espace de noms associé au flux.
  • Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.

Exporter et ingérer les journaux Akamai WAF depuis AWS S3

Cette section explique les étapes initiales de la configuration de votre bucket Amazon S3 pour recevoir et stocker les journaux Akamai WAF.

Configurer le bucket Amazon S3

  1. Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
  2. Enregistrez le nom et la région du bucket pour référence ultérieure.
  3. Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
  4. Sélectionnez l'utilisateur créé.
  5. Sélectionnez l'onglet Informations d'identification de sécurité.
  6. Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
  7. Sélectionnez Service tiers comme Cas d'utilisation.
  8. Cliquez sur Suivant.
  9. Facultatif : Ajoutez une balise de description.
  10. Cliquez sur Créer une clé d'accès.
  11. Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour référence ultérieure.
  12. Cliquez sur OK.
  13. Sélectionnez l'onglet Autorisations.
  14. Cliquez sur Ajouter des autorisations dans la section Règles relatives aux autorisations.
  15. Sélectionnez Ajouter des autorisations.
  16. Sélectionnez Joindre directement des règles.
  17. Recherchez la règle AmazonS3FullAccess.
  18. Sélectionnez la règle.
  19. Cliquez sur Suivant.
  20. Cliquez sur Ajouter des autorisations.

Configurer Akamai WAF pour envoyer des journaux à Amazon S3

  1. Connectez-vous à Akamai Control Center.
  2. Accédez à la section Sécurité.
  3. Sélectionnez Journaux.
  4. Configurer une nouvelle diffusion des journaux :

    • Source du journal : sélectionnez votre configuration WAF.
    • Destination : sélectionnez Amazon S3.
    • Bucket S3 : spécifiez le nom du bucket S3 que vous avez créé.
    • Région : sélectionnez la région AWS dans laquelle se trouve votre bucket S3.
    • ID de clé d'accès et clé d'accès secrète : fournissez les identifiants que vous avez générés.
    • Format du journal : choisissez le format de journal souhaité (par exemple, JSON).
    • Fréquence d'envoi : sélectionnez la fréquence à laquelle vous souhaitez recevoir les journaux (par exemple, toutes les 5 minutes).

  5. Vérifiez la diffusion des journaux :

    • Après avoir configuré LDS, surveillez le bucket S3 pour les fichiers journaux entrants.

Configurer des flux à partir de Paramètres SIEM > Flux à l'aide d'AWS S3

Pour configurer un flux, procédez comme suit :

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux Akamai WAF).
  5. Sélectionnez Amazon S3 comme Type de source.
  6. Sélectionnez Akamai WAF comme type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    • Région : région dans laquelle se trouve le bucket Amazon S3.
    • URI S3 : URI du bucket. s3:/BUCKET_NAME Remplacez les éléments suivants :
      • BUCKET_NAME : nom du bucket.
    • URI is a (L'URI est un) : sélectionnez le TYPE d'URI en fonction de la configuration du flux de journaux : Single file (Fichier unique), Directory (Répertoire) ou Directory which includes subdirectories (Répertoire incluant des sous-répertoires).
    • Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
    • ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3.
    • Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3.
  9. Cliquez sur Suivant.

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

Table de mappage UDM

Champ du journal (ordre croissant) Mappage UDM Logique
attackData.clientIP principal.ip, principal.asset.ip Adresse IP du client à l'origine de la requête. Extrait du champ attackData.clientIP des journaux akamai_siem.
attackData.configId metadata.product_log_id ID de configuration de la sécurité. Extrait du champ attackData.configId des journaux akamai_siem. Également ajouté en tant que detection_field dans l'objet security_result.
attackData.policyId N/A Utilisé dans la logique du parseur pour renseigner security_result.summary avec la valeur PolicyId:[value].
attackData.ruleActions security_result.action, security_result.action_details Actions effectuées en fonction de la règle déclenchée. Extrait du champ attackData.ruleActions des journaux akamai_siem. "deny" est mappé sur BLOCK, tandis que les autres valeurs ("alert", "monitor", "allow", "tarpit") sont mappées sur ALLOW. La valeur d'origine est également stockée dans action_details.
attackData.ruleData security_result.detection_fields Données associées à la règle déclenchée. Extrait du champ attackData.ruleData des journaux akamai_siem. Ajouté à security_result.detection_fields avec la clé "RuleData".
attackData.ruleMessages security_result.threat_name Messages associés à la règle déclenchée. Extrait du champ attackData.ruleMessages des journaux akamai_siem.
attackData.ruleSelectors security_result.detection_fields Sélecteurs associés à la règle déclenchée. Extrait du champ attackData.ruleSelectors des journaux akamai_siem. Ajouté à security_result.detection_fields avec la clé "RuleSelector".
attackData.ruleTags security_result.category_details Tags associés à la règle déclenchée. Extrait du champ attackData.ruleTags des journaux akamai_siem.
attackData.ruleVersions security_result.detection_fields Versions des règles déclenchées. Extrait du champ attackData.ruleVersions des journaux akamai_siem. Ajouté à security_result.detection_fields avec la clé "Rule Version".
clientReputation principal.labels Informations sur la réputation du client. Extrait du champ clientReputation des journaux akamai_siem. Ajouté en tant que libellé au compte principal avec la clé "reputation".
cliIP, cli_ip, principal_ip principal.ip, principal.asset.ip Adresse IP du client. Extrait de cliIP, cli_ip ou principal_ip selon le format du journal.
cp additional.fields Code CP. Extrait du champ cp. Ajouté à additional.fields avec la clé "cp".
eventId metadata.product_log_id ID de l'événement. Extrait du champ eventId.
eventTime, log_date metadata.event_timestamp Horodatage de l'événement. Extrait de eventTime ou analysé à partir de log_date, selon le format du journal.
eventType.eventDefinition.eventDefinitionId target.resource.product_object_id ID de la définition de l'événement. Extrait de eventType.eventDefinition.eventDefinitionId.
eventType.eventDefinition.eventDescription metadata.description Description de l'événement. Extrait de eventType.eventDefinition.eventDescription.
eventType.eventDefinition.eventName metadata.product_event_type Nom de l'événement. Extrait de eventType.eventDefinition.eventName.
eventType.eventTypeId additional.fields ID du type d'événement. Extrait de eventType.eventTypeId. Ajouté à additional.fields avec la clé "eventTypeId".
eventType.eventTypeName additional.fields Nom du type d'événement. Extrait de eventType.eventTypeName. Ajouté à additional.fields avec la clé "eventTypeName".
format N/A Utilisé par l'analyseur pour déterminer le format du journal.
geo.asn principal.location.name Numéro de système autonome (ASN). Extrait de geo.asn ou AkamaiSiemASN selon le format du journal. La valeur est précédée de "ASN ".
geo.city principal.location.city Ville. Extrait de geo.city ou AkamaiSiemCity selon le format du journal.
geo.country principal.location.country_or_region Pays. Extrait de geo.country ou AkamaiSiemContinent selon le format du journal.
httpMessage.bytes network.sent_bytes Octets envoyés dans le message HTTP. Extrait de httpMessage.bytes.
httpMessage.host target.hostname, target.asset.hostname Nom d'hôte. Extrait de httpMessage.host ou reqHost selon le format du journal.
httpMessage.method network.http.method Méthode HTTP. Extrait de httpMessage.method, network_http_method ou reqMethod selon le format du journal. Converti en majuscules.
httpMessage.path target.url Chemin de requête. Extrait de httpMessage.path, target_url ou reqPath selon le format du journal. Si httpMessage.query est présent, il est ajouté au chemin d'accès avec un séparateur "?".
httpMessage.port target.port Port. Extrait de httpMessage.port ou reqPort selon le format du journal.
httpMessage.protocol N/A Utilisé par l'analyseur pour déterminer le protocole.
httpMessage.query N/A Utilisé dans la logique du parseur pour ajouter à httpMessage.path, le cas échéant.
httpMessage.requestId network.session_id ID de la demande. Extrait de httpMessage.requestId ou reqId selon le format du journal.
httpMessage.requestHeaders, AkamaiSiemRequestHeaders additional.fields En-têtes de requête. Extrait de httpMessage.requestHeaders ou AkamaiSiemRequestHeaders selon le format du journal. Ajouté à additional.fields avec la clé "AkamaiSiemRequestHeaders".
httpMessage.responseHeaders, AkamaiSiemResponseHeaders additional.fields En-têtes de réponse. Extrait de httpMessage.responseHeaders ou AkamaiSiemResponseHeaders selon le format du journal. Ajouté à additional.fields avec la clé "AkamaiSiemResponseHeaders".
httpMessage.status, AkamaiSiemResponseStatus, network_http_response_code, statusCode network.http.response_code Code de réponse HTTP. Extrait de httpMessage.status, AkamaiSiemResponseStatus, network_http_response_code ou statusCode selon le format du journal.
httpMessage.tls, AkamaiSiemTLSVersion, tlsVersion network.tls.version Version TLS. Extrait de httpMessage.tls, AkamaiSiemTLSVersion ou tlsVersion selon le format du journal.
httpMessage.useragent, network_http_user_agent, UA, useragent network.http.user_agent User-agent. Extrait de httpMessage.useragent, network_http_user_agent, UA ou useragent selon le format du journal.
log_description metadata.description Description du journal. Extrait de log_description.
log_rule security_result.rule_name Règle de journalisation. Extrait de log_rule.
message N/A Message de journal brut. Utilisé par l'analyseur pour diverses extractions.
network_http_referral_url network.http.referral_url URL de provenance HTTP. Extrait de network_http_referral_url.
proto N/A Utilisé dans la logique du parseur pour remplir security_result.summary si attackData.policyId n'est pas présent.
reqHost target.hostname, target.asset.hostname Demandez à devenir l'organisateur. Extrait de reqHost.
reqId metadata.product_log_id, network.session_id ID de la demande. Extrait de reqId.
reqMethod network.http.method Méthode de requête. Extrait de reqMethod.
reqPath target.url Chemin de requête. Extrait de reqPath.
reqPort target.port Port de requête. Extrait de reqPort.
rspContentType target.file.mime_type Type de contenu de la réponse. Extrait de rspContentType.
securityRules security_result.rule_name, security_result.about.resource.attribute.labels Règles de sécurité. Extrait de securityRules. La première partie est mappée sur rule_name, et le reste est ajouté en tant que libellés avec les clés "non_deny_rules" et "deny_rule_format".
statusCode network.http.response_code Code d'état. Extrait de statusCode.
state principal.location.state, target.user.personal_address.state État. Extrait de state.
tlsVersion network.tls.version Version TLS. Extrait de tlsVersion.
type metadata.product_event_type Type d'événement. Extrait de type.
UA network.http.user_agent User-agent. Extrait de UA.
version metadata.product_version, principal.asset.software.version Version. Extrait de version.
N/A metadata.event_timestamp L'horodatage de l'événement est dérivé du champ _ts dans les journaux akamai_lds, du champ httpMessage.start dans les journaux akamai_siem ou du champ log_date dans d'autres formats.
N/A metadata.vendor_name Codé en dur sur "Akamai".
N/A metadata.product_name Codé en dur sur "Kona".
N/A metadata.log_type Codé en dur sur "AKAMAI_WAF".
N/A network.application_protocol Définissez la valeur sur "HTTP" pour les journaux akamai_siem et akamai_lds, ou sur "DNS" pour les autres formats.
N/A security_result.severity Définissez la valeur sur "MEDIUM" pour l'action "alert" (alerte), sur "CRITICAL" pour l'action "deny" (refuser) et sur "HIGH" pour les autres actions.
N/A event.idm.read_only_udm.metadata.event_type Définissez sa valeur sur "NETWORK_HTTP" pour la plupart des formats de journaux, sur "GENERIC_EVENT" pour les événements avec des champs eventId ou eventData, ou sur "STATUS_UPDATE" pour les événements avec des champs cli_ip ou p_ip, mais sans champ reqHost.

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