Protokolle für Bereich 1 erfassen
Parserversion:3.0
In diesem Dokument wird beschrieben, wie Sie Area 1 Email Security-Logs (von Cloudflare) mit AWS S3 in Google Security Operations aufnehmen. Der Parser verarbeitet die Logs im JSON-Format. Es werden relevante Felder aus der verschachtelten JSON-Struktur extrahiert, dem Unified Data Model (UDM) zugeordnet und mit geografischen Informationen und Sicherheitsdetails wie Hashs und Disposition von Anhängen angereichert.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Ein Windows 2016- oder höher- oder ein Linux-Host mit
systemd - Wenn die Ausführung hinter einem Proxy erfolgt, sind die Firewallports geöffnet.
- Privilegierter Zugriff auf Area 1 Email Security (von Cloudflare)
AWS IAM und S3-Bucket konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu der Anleitung in diesem Nutzerhandbuch: Bucket erstellen.
- Melden Sie sich in der AWS-Konsole an.
- Rufen Sie S3 > Bucket erstellen auf.
- Geben Sie einen Namen für den Bucket ein, z. B.
area1-security-logs. - Übernehmen Sie die anderen Standardeinstellungen oder konfigurieren Sie bei Bedarf die Verschlüsselung und die Versionsverwaltung.
- Klicken Sie auf Erstellen.
- Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung.
- Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Bereich Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie Drittanbieterdienst als Anwendungsfall aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungstag hinzu.
- Klicken Sie auf Zugriffsschlüssel erstellen.
- Klicken Sie auf CSV-Datei herunterladen und speichern Sie den Access Key (Zugriffsschlüssel) und den Secret Access Key (geheimer Zugriffsschlüssel) für die zukünftige Verwendung.
- Klicken Sie auf Fertig.
- Wählen Sie den Tab Berechtigungen aus.
- Klicken Sie unter Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
- Wählen Sie Richtlinien direkt anhängen aus.
- Suchen Sie nach der Richtlinie AmazonS3FullAccess.
- Wählen Sie die Richtlinie aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Berechtigungen hinzufügen.
API-Anmeldedaten für Area 1 abrufen
- Melden Sie sich im Area 1 Security (Cloudflare)-Dashboard an.
- Rufen Sie die Einstellungen> API-Zugriff auf.
- Generieren Sie den API-Schlüssel (Token).
- Kopieren und Speichern Sie das Token an einem sicheren Ort.
Erforderliche Python-Pakete konfigurieren
Melden Sie sich auf Ihrem Host für die Protokollerfassung an (z. B. einer AWS-VM) und führen Sie Folgendes aus, um AWS-Anmeldedaten zu konfigurieren:
pip install boto3 requests aws configure
Area 1 Log Puller-Skript erstellen
Erstellen Sie die folgende Datei, indem Sie
sudo vi area1_to_s3.pyeingeben und dann den folgenden Code kopieren:- Passen Sie Folgendes an:
#!/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)vispeichern und beenden: Klicken Sie aufescund geben Sie dann:wqein.
Umgebungsvariablen speichern
Erstellen Sie eine sichere Datei zum Speichern von Umgebungsvariablen in
/etc/area1.env(oder/home/user/.area1.env).export AREA1_API_TOKEN="your_actual_area1_api_token" export AWS_PROFILE="<your_aws_programmatic_username>"Achten Sie darauf, dass die Datei sicher ist:
chmod 600 /etc/area1.env
Script ausführen und testen
Führen Sie das folgende Skript aus:
python3 area1_to_s3.pyHier sollten Sie dies sehen:
Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
Mit Cron automatisieren
Erstellen Sie ein Wrapper-Script für Cron, indem Sie
sudo vi /usr/local/bin/run_area1.shausführen und dann den folgenden Code kopieren:#!/usr/bin/env bash set -euo pipefail source /etc/area1.env /usr/bin/python3 /opt/scripts/area1_to_s3.pyMachen Sie die Datei ausführbar:
chmod +x /usr/local/bin/run_area1.shTägliche Ausführung um 01:00 Uhr UTC:
crontab -e 0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
Feeds einrichten
Es gibt zwei verschiedene Einstiegspunkte zum Einrichten von Feeds in der Google SecOps-Plattform:
- SIEM-Einstellungen > Feeds
- Content Hub > Content-Pakete
Feeds in den SIEM-Einstellungen > Feeds einrichten
So konfigurieren Sie einen Feed:
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Area1 Logs. - Wählen Sie Amazon S3 als Quelltyp aus.
- Wählen Sie Area1 Security als Log type (Protokolltyp) aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
- Region: Die Region, in der sich der Amazon S3-Bucket befindet.
- S3-URI: Der Bucket-URI (das Format sollte
s3://<your-log-bucket-name>sein). Ersetzen Sie Folgendes:your-log-bucket-name: der Name des Buckets.
- URI is a (URI ist ein): Wählen Sie Directory which includes subdirectories (Verzeichnis mit Unterverzeichnissen) aus.
- Optionen zum Löschen von Quellen: Wählen Sie die gewünschte Option zum Löschen aus.
- Zugriffsschlüssel-ID: Der Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
- Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
Feeds über Content Hub einrichten
Geben Sie Werte für die folgenden Felder an:
Region: Die Region, in der sich der Amazon S3-Bucket befindet.
- S3-URI: Der Bucket-URI (das Format sollte
s3://<your-log-bucket-name>sein). Ersetzen Sie Folgendes:your-log-bucket-name: der Name des Buckets.
- URI is a (URI ist ein): Wählen Sie Directory which includes subdirectories (Verzeichnis mit Unterverzeichnissen) aus.
- Optionen zum Löschen von Quellen: Wählen Sie die gewünschte Option zum Löschen aus.
- Zugriffsschlüssel-ID: Der Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
- Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.§
- S3-URI: Der Bucket-URI (das Format sollte
Erweiterte Optionen
- Feedname: Ein vorab ausgefüllter Wert, der den Feed identifiziert.
- Source Type (Quelltyp): Methode, mit der Logs in Google SecOps erfasst werden.
- Asset-Namespace: Der mit dem Feed verknüpfte Namespace.
- Aufnahmelabels: Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| alert_id | security_result.rule_id | Der Wert wird aus dem Feld alert_id übernommen. |
| alert_reasons | security_result.description | Der Wert wird aus dem Feld alert_reasons übernommen. |
| attachments.att_size | security_result.about.file.size | Der Wert wird aus dem Feld attachments.att_size übernommen und in eine vorzeichenlose Ganzzahl konvertiert. |
| attachments.disposition | security_result.about.user.attribute.labels.value | Der Wert wird aus dem Feld attachments.disposition übernommen. |
| attachments.extension | security_result.about.file.mime_type | Der Wert wird aus dem Feld attachments.extension übernommen. |
| attachments.md5 | security_result.about.file.md5 | Der Wert wird aus dem Feld attachments.md5 übernommen. |
| attachments.name | security_result.about.file.full_path | Der Wert wird aus dem Feld attachments.name übernommen. |
| attachments.sha1 | security_result.about.file.sha1 | Der Wert wird aus dem Feld attachments.sha1 übernommen. |
| attachments.sha256 | security_result.about.file.sha256 | Der Wert wird aus dem Feld attachments.sha256 übernommen. |
| attachments.ssdeep | security_result.about.file.ssdeep | Der Wert wird aus dem Feld attachments.ssdeep übernommen. |
| delivery_mode | security_result.detection_fields.value | Der Wert wird aus dem Feld delivery_mode übernommen. |
| envelope_from | principal.user.email_addresses, network.email.from | Der Wert wird aus dem Feld envelope_from übernommen. |
| envelope_to | network.email.to, target.user.email_addresses | Der Wert wird aus dem Feld envelope_to übernommen. |
| final_disposition | security_result.category_details | Der Wert wird aus dem Feld final_disposition übernommen. |
| message_id | metadata.product_log_id | Der Wert wird aus dem Feld message_id übernommen, nachdem die Zeichen „<“ und „>“ entfernt wurden. |
| replyto | network.email.bounce_address | Der Wert wird aus dem Feld replyto übernommen. |
| smtp_helo_server_ip | principal.ip | Der Wert wird aus dem Feld smtp_helo_server_ip übernommen. |
| smtp_helo_server_ip_as_name | principal.location.name | Der Wert wird aus dem Feld smtp_helo_server_ip_as_name übernommen. |
| smtp_helo_server_ip_as_number | principal.asset_id | Der Wert wird aus dem Feld smtp_helo_server_ip_as_number übernommen und mit asset_id: vorangestellt. |
| smtp_helo_server_ip_geo | principal.location.country_or_region, principal.location.state, principal.location.city | Der Wert wird mit einem Grok-Muster aus dem Feld smtp_helo_server_ip_geo extrahiert. |
| smtp_helo_server_name | principal.administrative_domain | Der Wert wird aus dem Feld smtp_helo_server_name übernommen. |
| Quelle | metadata.vendor_name | Der Wert wird aus dem Feld source übernommen. Wenn das Feld leer ist, wird der Wert auf area1security gesetzt. |
| subject | network.email.subject | Der Wert wird aus dem Feld subject übernommen. |
| Zeit | metadata.event_timestamp | Der Wert wird aus dem Feld time übernommen und in einen Zeitstempel konvertiert. |
| metadata.event_type | Der Wert wird auf EMAIL_TRANSACTION festgelegt. |
|
| metadata.product_name | Der Wert wird auf AREA1 festgelegt. |
|
| metadata.log_type | Der Wert wird auf AREA1 festgelegt. |
|
| security_result.about.user.attribute.labels.key | Der Wert wird auf disposition festgelegt. |
|
| security_result.category | Der Wert wird auf SOFTWARE_MALICIOUS festgelegt. |
|
| security_result.detection_fields.key | Der Wert wird auf delivery_mode festgelegt. |
|
envelope_to.0" instead of "replyto |
network.email.to |
Aus dem Änderungsprotokoll zugeordnet |
Änderungsprotokoll
Änderungsprotokoll für diesen Parser ansehen
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten