Area 1-Logs 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. Er extrahiert relevante Felder aus der verschachtelten JSON-Struktur, ordnet sie dem Unified Data Model (UDM) zu und ergänzt die Daten mit geografischen Informationen und Sicherheitsdetails wie Anhang-Hashes und -Disposition.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Ein Windows 2016-Host oder höher oder ein Linux-Host mit
systemd - Wenn die Ausführung hinter einem Proxy erfolgt, sind die Firewall Ports geöffnet.
- Privilegierter Zugriff auf Area 1 Email Security (von Cloudflare)
AWS IAM und S3-Bucket konfigurieren
- Erstellen Sie einen Amazon S3-Bucket gemäß dieser Anleitung: 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 für die spätere 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 Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie als Anwendungsfall die Option Drittanbieterdienst 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 Zugriffsschlüssel und den geheimen Zugriffsschlüssel für die spätere 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.
Area 1-API-Anmeldedaten abrufen
- Melden Sie sich im Area 1 Security-Dashboard (Cloudflare) an.
- Rufen Sie 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 dem Host für die Logerfassung an (z. B. einer AWS-VM) und führen Sie den folgenden Befehl aus, um die AWS-Anmeldedaten zu konfigurieren:
pip install boto3 requests aws configure
Skript zum Abrufen von Area 1-Logs erstellen
Erstellen Sie die folgende Datei, indem Sie
sudo vi area1_to_s3.pyeingeben, und kopieren Sie dann den folgenden Code:- Nehmen Sie die folgenden Anpassungen vor:
#!/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)Speichern und beenden Sie
vi: Klicken Sie aufescund geben Sie dann:wqein.
Umgebungsvariablen speichern
Erstellen Sie eine sichere Datei, um Umgebungsvariablen in
/etc/area1.envoder/home/user/.area1.envzu speichern.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
Skript 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 Wrapperskript für Cron, indem Sie
sudo vi /usr/local/bin/run_area1.shausführen, und kopieren Sie dann den folgenden Code:#!/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.shLegen Sie fest, dass die Ausführung täglich um 01:00 Uhr UTC erfolgt:
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 über „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 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 Logtyp 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 ist ein: Wählen Sie Verzeichnis mit Unterverzeichnissen aus.
- Optionen für das Löschen der Quelle: Wählen Sie die gewünschte Löschoption 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 den 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 ist ein: Wählen Sie Verzeichnis mit Unterverzeichnissen aus.
- Optionen für das Löschen der Quelle: Wählen Sie die gewünschte Löschoption 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.
- Quelltyp: Methode, die zum Erfassen von Logs in Google SecOps verwendet wird.
- Asset-Namespace: Namespace, der mit dem Feed verknüpft ist.
- 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. |
| source | metadata.vendor_name | Der Wert wird aus dem Feld source übernommen. Wenn das Feld leer ist, wird der Wert auf area1security festgelegt. |
| subject | network.email.subject | Der Wert wird aus dem Feld subject übernommen. |
| time | 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 Änderungsprotokoll zugeordnet |
Änderungsprotokoll
Änderungsprotokoll für diesen Parser ansehen
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten