Collecter les journaux Area 1

Version de l'analyseur : 3.0

Compatible avec :

Ce document explique comment ingérer les journaux Area 1 Email Security (par Cloudflare) dans Google Security Operations à l'aide d'AWS S3. L'analyseur traite les journaux au format JSON. Il extrait les champs pertinents de la structure JSON imbriquée, les mappe au modèle de données unifié (UDM) et enrichit les données avec des informations géographiques et des détails de sécurité tels que les hachages et la disposition des pièces jointes.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Instance Google SecOps
  • Un hôte Windows 2016 ou version ultérieure, ou un hôte Linux avec systemd
  • Si vous exécutez l'outil derrière un proxy, les ports du pare-feu sont ouverts.
  • Accès privilégié à Area 1 Email Security (par Cloudflare)

Configurer AWS IAM et un bucket S3

  1. Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
  2. Connectez-vous à la console AWS.
  3. Accédez à S3 > Create bucket (S3 > Créer un bucket).
  4. Saisissez un nom pour le bucket (par exemple, area1-security-logs).
  5. Conservez les autres valeurs par défaut (ou configurez le chiffrement et la gestion des versions si nécessaire).
  6. Cliquez sur Créer.
  7. Enregistrez le nom et la région du bucket pour référence ultérieure.
  8. Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
  9. Sélectionnez l'utilisateur créé.
  10. Sélectionnez l'onglet Security credentials (Identifiants de sécurité).
  11. Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
  12. Sélectionnez Service tiers comme Cas d'utilisation.
  13. Cliquez sur Suivant.
  14. Facultatif : ajoutez un tag de description.
  15. Cliquez sur Créer une clé d'accès.
  16. Cliquez sur Download CSV file (Télécharger le fichier CSV) et stockez la clé d'accès et la clé d'accès secrète pour pouvoir vous y référer ultérieurement.
  17. Cliquez sur OK.
  18. Sélectionnez l'onglet Autorisations.
  19. Dans Stratégies d'autorisation, cliquez sur Ajouter des autorisations.
  20. Sélectionnez Associer directement des stratégies.
  21. Recherchez la stratégie AmazonS3FullAccess.
  22. Sélectionnez la règle.
  23. Cliquez sur Suivant.
  24. Cliquez sur Ajouter des autorisations.

Obtenir les identifiants de l'API Area 1

  1. Connectez-vous au tableau de bord Area 1 Security (Cloudflare).
  2. Accédez à Settings > API Access (Paramètres > Accès à l'API).
  3. Générez la clé API (jeton).
  4. Copiez et enregistrez le jeton dans un emplacement sécurisé.

Configurer les packages Python requis

  1. Connectez-vous à votre hôte de collecte de journaux (par exemple, une VM AWS) et exécutez la commande suivante pour configurer les identifiants AWS :

    pip install boto3 requests
    aws configure
    

Créer le script Area 1 Log Puller

  1. Créez le fichier suivant en saisissant sudo vi area1_to_s3.py, puis copiez le code suivant :

    • Ajustez les éléments suivants :
    #!/usr/bin/env python3
    import os
    import requests
    import boto3
    import datetime
    import json
    
    # Configuration
    AREA1_API_TOKEN = os.environ.get("AREA1_API_TOKEN")  # Load securely from env
    AWS_PROFILE = os.environ.get("AWS_PROFILE", None)    # Optional, for named profiles
    S3_BUCKET_NAME = "area1-security-logs"
    LOG_TYPE = "events"
    
    # Time range
    end_time = datetime.datetime.utcnow()
    start_time = end_time - datetime.timedelta(days=1)
    
    def fetch_area1_logs():
        url = f"https://api.area1security.com/v1/{LOG_TYPE}"
        headers = {
            "Authorization": f"Bearer {AREA1_API_TOKEN}",
            "Accept": "application/json"
        }
        params = {
            "startDate": start_time.strftime("%Y-%m-%dT%H:%M:%SZ"),
            "endDate": end_time.strftime("%Y-%m-%dT%H:%M:%SZ")
        }
        response = requests.get(url, headers=headers, params=params)
        response.raise_for_status()
        return response.json()
    
    def upload_to_s3(data):
        filename = f"area1_{LOG_TYPE}_{start_time.strftime('%Y%m%d')}.json"
    
        session = boto3.Session(profile_name=AWS_PROFILE) if AWS_PROFILE else boto3.Session()
        s3 = session.client("s3")
    
        s3.put_object(
            Bucket=S3_BUCKET_NAME,
            Key=f"logs/{filename}",
            Body=json.dumps(data).encode("utf-8"),
            ContentType="application/json"
        )
        print(f"[✓] Uploaded {filename} to s3://{S3_BUCKET_NAME}/logs/")
    
    if __name__ == "__main__":
        logs = fetch_area1_logs()
        upload_to_s3(logs)
    
  2. Enregistrez et quittez vi : cliquez sur esc, puis saisissez :wq.

Stocker les variables d'environnement

  1. Créez un fichier sécurisé pour stocker les variables d'environnement dans /etc/area1.env (ou /home/user/.area1.env).

    export AREA1_API_TOKEN="your_actual_area1_api_token"
    export AWS_PROFILE="<your_aws_programmatic_username>"
    
  2. Assurez-vous que le fichier est sécurisé :

    chmod 600 /etc/area1.env
    

Exécuter et tester le script

  1. Exécutez le script suivant :

    python3 area1_to_s3.py
    
  2. Vous devriez obtenir le résultat suivant :

    Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
    

Automatiser avec Cron

  1. Créez un script wrapper pour Cron en exécutant sudo vi /usr/local/bin/run_area1.sh, puis copiez le code suivant :

    #!/usr/bin/env bash
    set -euo pipefail
    
    source /etc/area1.env
    /usr/bin/python3 /opt/scripts/area1_to_s3.py
    
  2. Rendez le fichier exécutable :

    chmod +x /usr/local/bin/run_area1.sh
    
  3. Exécution programmée tous les jours à 1h00 UTC :

    crontab -e
    0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
    

Configurer des flux

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

  • Paramètres > Gestion des données > Flux > Ajouter un flux (sur la plate-forme SIEM uniquement, Paramètres > Flux > Ajouter un flux)
  • Content Hub > Packs de contenu > Premiers pas

Configurez les flux depuis Paramètres > Gestion des données > Flux.

Pour configurer un flux, procédez comme suit :

  1. Accédez à Paramètres > Gestion des données > Flux. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Flux.
  2. Cliquez sur Ajouter un flux d'actualités.
  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, Area1 Logs).
  5. Sélectionnez Amazon S3 comme Type de source.
  6. Sélectionnez Area1 Security comme type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    • Région : région où se trouve le bucket Amazon S3.
    • URI S3 : URI du bucket (le format doit être s3://<your-log-bucket-name>). Remplacez les éléments suivants :
      • your-log-bucket-name : nom du bucket.
    • L'URI est un : sélectionnez 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 de l'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 d'actualités sur l'écran Finaliser, puis cliquez sur Envoyer.

Configurer des flux à partir du hub de contenus

Spécifiez les valeurs des champs suivants :

  • Région : région où se trouve le bucket Amazon S3.

    • URI S3 : URI du bucket (le format doit être s3://<your-log-bucket-name>). Remplacez les éléments suivants :
      • your-log-bucket-name : nom du bucket.
    • L'URI est un : sélectionnez 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 de l'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.§

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.

Table de mappage UDM

Champ du journal Mappage UDM Logique
alert_id security_result.rule_id La valeur est extraite du champ alert_id.
alert_reasons security_result.description La valeur est extraite du champ alert_reasons.
attachments.att_size security_result.about.file.size La valeur est extraite du champ attachments.att_size et convertie en entier non signé.
attachments.disposition security_result.about.user.attribute.labels.value La valeur est extraite du champ attachments.disposition.
attachments.extension security_result.about.file.mime_type La valeur est extraite du champ attachments.extension.
attachments.md5 security_result.about.file.md5 La valeur est extraite du champ attachments.md5.
attachments.name security_result.about.file.full_path La valeur est extraite du champ attachments.name.
attachments.sha1 security_result.about.file.sha1 La valeur est extraite du champ attachments.sha1.
attachments.sha256 security_result.about.file.sha256 La valeur est extraite du champ attachments.sha256.
attachments.ssdeep security_result.about.file.ssdeep La valeur est extraite du champ attachments.ssdeep.
delivery_mode security_result.detection_fields.value La valeur est extraite du champ delivery_mode.
envelope_from principal.user.email_addresses, network.email.from La valeur est extraite du champ envelope_from.
envelope_to network.email.to, target.user.email_addresses La valeur est extraite du champ envelope_to.
final_disposition security_result.category_details La valeur est extraite du champ final_disposition.
message_id metadata.product_log_id La valeur est extraite du champ message_id après la suppression des caractères "<" et ">".
replyto network.email.bounce_address La valeur est extraite du champ replyto.
smtp_helo_server_ip principal.ip La valeur est extraite du champ smtp_helo_server_ip.
smtp_helo_server_ip_as_name principal.location.name La valeur est extraite du champ smtp_helo_server_ip_as_name.
smtp_helo_server_ip_as_number principal.asset_id La valeur est extraite du champ smtp_helo_server_ip_as_number et précédée de asset_id:.
smtp_helo_server_ip_geo principal.location.country_or_region, principal.location.state, principal.location.city La valeur est extraite du champ smtp_helo_server_ip_geo à l'aide d'un modèle Grok.
smtp_helo_server_name principal.administrative_domain La valeur est extraite du champ smtp_helo_server_name.
source metadata.vendor_name La valeur est extraite du champ source. Si le champ est vide, la valeur est définie sur area1security.
subject network.email.subject La valeur est extraite du champ subject.
heure metadata.event_timestamp La valeur est extraite du champ time et convertie en code temporel.
metadata.event_type La valeur est définie sur EMAIL_TRANSACTION.
metadata.product_name La valeur est définie sur AREA1.
metadata.log_type La valeur est définie sur AREA1.
security_result.about.user.attribute.labels.key La valeur est définie sur disposition.
security_result.category La valeur est définie sur SOFTWARE_MALICIOUS.
security_result.detection_fields.key La valeur est définie sur delivery_mode.
envelope_to.0" instead of "replyto network.email.to Mappé à partir du journal des modifications

Journal des modifications

Afficher le journal des modifications de cet analyseur

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