Protokolle für Bereich 1 erfassen
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 Hash-Werten und Status von Anhängen angereichert.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Ein Windows-Host mit Windows 2016 oder höher oder ein Linux-Host mit
systemd
- Wenn die Ausführung hinter einem Proxy erfolgt, sind die Firewallports geöffnet.
- Berechtigter Zugriff auf Area 1 Email Security (von Cloudflare)
AWS IAM und S3-Bucket konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu dieser Anleitung: Bucket erstellen.
- Melden Sie sich in der AWS-Konsole an.
- Gehen Sie zu S3 > Bucket erstellen.
- Geben Sie einen Namen für den Bucket ein, z. B.
area1-security-logs
. - Behalten Sie die anderen Standardeinstellungen bei 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 Abschnitt 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-Dashboard (Cloudflare) an.
- Gehen Sie zu den Einstellungen> API-Zugriff.
- Generieren Sie den API-Schlüssel (Token).
- Kopieren Sie das Token und speichern Sie es an einem sicheren Ort.
Erforderliche Python-Pakete konfigurieren
Melden Sie sich auf dem 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
Skript zum Abrufen von Protokollen für Bereich 1 erstellen
Erstellen Sie die folgende Datei, indem Sie
sudo vi area1_to_s3.py
eingeben, und kopieren Sie dann den folgenden Code:- Nehmen Sie folgende 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
vi
: Klicken Sie aufesc
und geben Sie dann:wq
ein.
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>"
Prüfen Sie, ob 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.py
Hier sollten Sie dies sehen:
Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
Mit Cron automatisieren
Erstellen Sie das Wrapper-Script für Cron, indem Sie
sudo vi /usr/local/bin/run_area1.sh
ausfü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.py
Machen Sie die Datei ausführbar:
chmod +x /usr/local/bin/run_area1.sh
Tä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 über die 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 Feed name 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 (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 zum Löschen von Quellen: Wählen Sie die gewünschte Option aus.
- Zugriffsschlüssel-ID: Der Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
- Secret Access Key (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 zum Löschen von Quellen: Wählen Sie die gewünschte Option aus.
- Zugriffsschlüssel-ID: Der Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
- Geheimer Zugriffsschlüssel: Der geheime Nutzersicherheitsschlüssel mit Zugriff auf den S3-Bucket.§
- S3-URI: Der Bucket-URI (das Format sollte
Erweiterte Optionen
- Feedname: Ein vorausgefüllter Wert, der den Feed identifiziert.
- Quelltyp: Methode, die zum Erfassen von Logs in Google SecOps verwendet wird.
- Asset-Namespace: Der Namespace, der dem Feed zugeordnet 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 mithilfe eines Grok-Musters 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 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. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten