Collecter les journaux Cloudflare Page Shield

Compatible avec :

Ce document explique comment ingérer des journaux Cloudflare Page Shield dans Google Security Operations à l'aide d'Amazon S3.

Page Shield vous aide à gérer les ressources chargées par les visiteurs de votre site Web, y compris les scripts, leurs connexions et les cookies. Il déclenche des notifications d'alerte lorsque les ressources changent ou sont considérées comme malveillantes.

Avant de commencer

  • Une instance Google SecOps
  • Compte Cloudflare avec Page Shield activé
  • Accès privilégié au tableau de bord Cloudflare
  • Accès privilégié à AWS (S3, IAM)

Cette option utilise Cloudflare Logpush pour exporter les événements Page Shield vers Amazon S3, que Google SecOps ingère ensuite.

Activer Page Shield

  1. Connectez-vous au tableau de bord Cloudflare.
  2. Sélectionnez votre compte et votre domaine.
  3. Accédez à Sécurité> Page Shield.
  4. Cliquez sur Activer Page Shield.

Créer un bucket Amazon S3

  1. Ouvrez la console Amazon S3.
  2. Cliquez sur Créer un bucket.
  3. Fournissez les informations de configuration suivantes :
    • Nom du bucket : saisissez un nom explicite pour le bucket (par exemple, cloudflare-pageshield-logs).
    • Région : sélectionnez la région AWS de votre choix (par exemple, us-east-1).
  4. Cliquez sur Créer.
  5. Enregistrez le nom et la région du bucket pour référence ultérieure.

Créer un utilisateur IAM avec accès à S3

  1. Ouvrez la console IAM.
  2. Cliquez sur Utilisateurs > Ajouter un utilisateur.
  3. Saisissez un nom d'utilisateur (par exemple, chronicle-s3-user).
  4. Sélectionnez Accès programmatique.
  5. Cliquez sur Next: Permissions (Suivant : Autorisations).
  6. Sélectionnez Joindre directement des règles existantes.
  7. Recherchez et sélectionnez la règle AmazonS3FullAccess.
  8. Cliquez sur Next: Tags (Suivant : Tags).
  9. Cliquez sur Suivant : Relire.
  10. Cliquez sur Créer un utilisateur.
  11. Cliquez sur Download .csv file (Télécharger le fichier .csv) pour enregistrer l'ID de clé d'accès et la clé d'accès secrète.

Configurer la stratégie de bucket S3 pour Cloudflare

  1. Dans la console Amazon S3, sélectionnez votre bucket.
  2. Cliquez sur Autorisations > Règle du bucket.
  3. Cliquez sur Modifier.
  4. Collez la règle suivante en remplaçant <BUCKET_NAME> par le nom de votre bucket :

    {
      "Id": "Policy1506627184792",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1506627150918",
          "Action": ["s3:PutObject"],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::<BUCKET_NAME>/*",
          "Principal": {
            "AWS": ["arn:aws:iam::391854517948:user/cloudflare-logpush"]
          }
        }
      ]
    }
    
  5. Cliquez sur Enregistrer les modifications.

Créer un job Cloudflare Logpush

  1. Connectez-vous au tableau de bord Cloudflare.
  2. Sélectionnez votre compte et votre domaine.
  3. Accédez à Analytics et journaux > Journaux.
  4. Cliquez sur Create a Logpush job (Créer un job Logpush).
  5. Dans Sélectionner une destination, choisissez Amazon S3.
  6. Saisissez les informations suivantes sur la destination :
    • Nom du bucket : saisissez le nom de votre bucket S3 (par exemple, cloudflare-pageshield-logs).
    • Région du bucket : sélectionnez la région correspondant à votre bucket S3.
    • Chemin d'accès au bucket (facultatif) : saisissez un préfixe de chemin d'accès (par exemple, pageshield/).
  7. Cliquez sur Continuer.
  8. Pour prouver que vous êtes bien le propriétaire, Cloudflare enverra un fichier à la destination que vous aurez indiquée. Pour trouver le jeton, sélectionnez le bouton "Ouvrir" dans l'onglet "Vue d'ensemble" du fichier de validation de la propriété, puis collez-le dans le tableau de bord Cloudflare pour vérifier votre accès au bucket. Saisissez le jeton de propriété, puis sélectionnez "Continuer".
  9. Dans Sélectionner un ensemble de données, choisissez Événements Page Shield.
  10. Cliquez sur Suivant.
  11. Configurez votre tâche logpush :
    • Nom du job : saisissez un nom descriptif (par exemple, pageshield-to-s3).
    • Si les journaux correspondent : laissez ce champ vide pour inclure tous les événements ou configurez les filtres selon vos besoins.
    • Envoyer les champs suivants : sélectionnez Tous les champs ou choisissez des champs spécifiques.
  12. Cliquez sur Envoyer.

Configurer un flux dans Google SecOps pour ingérer les journaux Page Shield

  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, Cloudflare Page Shield S3).
  5. Sélectionnez Amazon S3 V2 comme type de source.
  6. Sélectionnez Cloudflare Page Shield comme Type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    • URI S3 : saisissez l'URI du bucket au format s3://<BUCKET_NAME>/<BUCKET_PATH>/.

    • 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.
      • 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. La valeur par défaut est de 180 jours.

    • 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.

    • 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.

  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 de journal Mappage UDM Logique
URLContainsCDNCGIPath event.idm.read_only_udm.additional.fields.CGI_label Valeur extraite de URLContainsCDNCGIPath, définie comme string_value dans le libellé avec la clé "CGI"
Action event.idm.read_only_udm.additional.fields.action_label Valeur extraite de l'action, définie comme string_value dans le libellé avec la clé "action"
resource.first_page_url event.idm.read_only_udm.additional.fields.first_page_label Valeur extraite de resource.first_page_url, définie comme string_value dans le libellé avec la clé "first_page_url"
resource.last_page_url event.idm.read_only_udm.additional.fields.last_page_label Valeur extraite de resource.last_page_url, définie comme string_value dans le libellé avec la clé "last_page_url"
nom event.idm.read_only_udm.additional.fields.name_label Valeur extraite du nom, définie comme string_value dans le libellé avec la clé "name"
ts event.idm.read_only_udm.metadata.event_timestamp Converti de ts (UNIX) en code temporel
event.idm.read_only_udm.metadata.event_type Dérivé de has_principal, has_target, has_target_user : NETWORK_CONNECTION si principal et cible ; USER_UNCATEGORIZED si target_user ; STATUS_UPDATE si principal ; sinon GENERIC_EVENT
resource.url event.idm.read_only_udm.network.http.referral_url Valeur extraite de resource.url
Hôte event.idm.read_only_udm.principal.asset.hostname Valeur extraite de Host ou host.hostname
Hôte event.idm.read_only_udm.principal.hostname Valeur extraite de Host ou host.hostname
alert_type event.idm.read_only_udm.principal.resource.attribute.labels.alert_type_label Valeur extraite de alert_type, définie comme valeur dans le libellé avec la clé "alert_type"
resource.cryptomining_score event.idm.read_only_udm.principal.resource.attribute.labels.crypto_label Valeur extraite de resource.cryptomining_score, définie comme valeur dans le libellé avec la clé "cryptominingscore%{index2}"
resource.dataflow_score event.idm.read_only_udm.principal.resource.attribute.labels.dataflow_label Valeur extraite de resource.dataflow_score, définie comme valeur dans le libellé avec la clé "dataflowscore%{index2}"
policie.description event.idm.read_only_udm.principal.resource.attribute.labels.desc_label Valeur extraite de policie.description, définie comme valeur dans le libellé avec la clé "description_%{index}"
version.fetched_at event.idm.read_only_udm.principal.resource.attribute.labels.fetched_at_label Valeur extraite de version.fetched_at, définie comme valeur dans le libellé avec la clé "fetchedat%{index2}"
version.hash event.idm.read_only_udm.principal.resource.attribute.labels.hash_label Valeur extraite de version.hash, définie comme valeur dans le libellé avec la clé "hash_%{index2}"
policie.id event.idm.read_only_udm.principal.resource.attribute.labels.id_label Valeur extraite de policie.id, définie comme valeur dans le libellé avec la clé "policyid%{index}"
data.options.remove_dashboard_links event.idm.read_only_udm.principal.resource.attribute.labels.remove_dash_label Valeur extraite de data.options.remove_dashboard_links, définie comme valeur dans le libellé avec la clé "remove_dashboard_links"
resource.resource_type event.idm.read_only_udm.principal.resource.attribute.labels.res_type_label Valeur extraite de resource.resource_type, définie comme valeur dans le libellé avec la clé "resourcetype%{index2}"
data.type event.idm.read_only_udm.principal.resource.attribute.labels.type_label Valeur extraite de data.type, définie comme valeur dans le libellé avec la clé "type"
data.zones event.idm.read_only_udm.principal.resource.attribute.labels.zones_label Valeur extraite de data.zones, définie comme valeur dans le libellé avec la clé "zones"
resource.id event.idm.read_only_udm.principal.resource.id Valeur extraite de resource.id
PageURL event.idm.read_only_udm.principal.url Valeur extraite de PageURL
account_id event.idm.read_only_udm.principal.user.product_object_id Valeur extraite de account_id
policy_id event.idm.read_only_udm.security_result.detection_fields.policy_id_label Valeur extraite de policy_id, définie comme valeur dans le libellé avec la clé "policy_id"
policy_name event.idm.read_only_udm.security_result.detection_fields.policy_name_label Valeur extraite de policy_name, définie comme valeur dans le libellé avec la clé "policy_name"
texte event.idm.read_only_udm.security_result.description Valeur extraite du texte
resource.first_seen_at event.idm.read_only_udm.security_result.first_discovered_time Conversion de resource.first_seen_at en code temporel ISO8601
PolicyID event.idm.read_only_udm.security_result.rule_name Valeur extraite de PolicyID
data.severity event.idm.read_only_udm.security_result.severity Dérivé de data.severity : si "INFO" → "INFORMATIONAL", si "WARN" → "MEDIUM", sinon "UNKNOWN_SEVERITY"
URL event.idm.read_only_udm.target.url Valeur extraite de l'URL
URLHost event.idm.read_only_udm.target.user.email_addresses Valeur extraite de URLHost si elle correspond au format d'adresse e-mail

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