Collecter les journaux de la zone 1
Ce document explique comment ingérer les journaux Area-1 Email Security (de 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 le programme 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 le bucket S3
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
- Connectez-vous à la console AWS.
- Accédez à S3 > Créer un bucket.
- Saisissez un nom pour le bucket (par exemple,
area1-security-logs
). - Conservez les autres valeurs par défaut (ou configurez le chiffrement et le contrôle des versions si nécessaire).
- Cliquez sur Créer.
- Enregistrez le nom et la région du bucket pour référence ultérieure.
- Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif : Ajoutez un tag de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Télécharger le fichier CSV, puis enregistrez la clé d'accès et la clé d'accès secrète pour les consulter ultérieurement.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Dans Règles d'autorisation, cliquez sur Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez la règle AmazonS3FullAccess.
- Sélectionnez la règle.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Obtenir les identifiants de l'API Area 1
- Connectez-vous au tableau de bord Area-1 Security (Cloudflare).
- Accédez à Paramètres > Accès à l'API.
- Générez la clé API (jeton).
- Copiez et enregistrez le jeton dans un endroit sûr.
Configurer les packages Python requis
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 de récupération des journaux de la zone 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)
Enregistrer et quitter
vi
: cliquez suresc
, puis saisissez:wq
.
Stocker les variables d'environnement
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>"
Assurez-vous que le fichier est sécurisé :
chmod 600 /etc/area1.env
Exécuter et tester le script
Exécutez le script suivant :
python3 area1_to_s3.py
Vous devriez obtenir le résultat suivant :
Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
Automatiser avec Cron
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
Rendez le fichier exécutable :
chmod +x /usr/local/bin/run_area1.sh
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 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
Pour configurer un flux, procédez comme suit :
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Area1 Logs
). - Sélectionnez Amazon S3 comme Type de source.
- Sélectionnez Area1 Security comme Type de journal.
- Cliquez sur Suivant.
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 (au format
s3://<your-log-bucket-name>
). Remplacez les éléments suivants :your-log-bucket-name
: nom du bucket.
- L'URI est : 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 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.
Cliquez sur Suivant.
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 :
Région : région dans laquelle se trouve le bucket Amazon S3.
- URI S3 : URI du bucket (au format
s3://<your-log-bucket-name>
). Remplacez les éléments suivants :your-log-bucket-name
: nom du bucket.
- L'URI est : 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 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.§
- URI S3 : URI du bucket (au format
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 de 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 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 est 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 . |
temps | 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 . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.