Raccogliere i log dell'area 1
Questo documento spiega come importare i log di Area 1 Email Security (di Cloudflare) in Google Security Operations utilizzando AWS S3. Il parser elabora i log in formato JSON. Estrae i campi pertinenti dalla struttura JSON nidificata, li mappa al modello di dati unificato (UDM) e arricchisce i dati con informazioni geografiche e dettagli di sicurezza come hash e disposizione degli allegati.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps
- Un host Windows 2016 o versioni successive oppure Linux con
systemd
- Se l'esecuzione avviene tramite un proxy, le porte del firewall sono aperte
- Accesso con privilegi ad Area 1 Email Security (di Cloudflare)
Configura AWS IAM e il bucket S3
- Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket
- Accedi alla console AWS.
- Vai a S3 > Crea bucket.
- Inserisci un nome per il bucket (ad esempio,
area1-security-logs
). - Lascia invariate le altre impostazioni predefinite (o configura la crittografia e il controllo delle versioni, se necessario).
- Fai clic su Crea.
- Salva il Nome e la Regione del bucket per riferimento futuro.
- Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file CSV e memorizza la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- In Norme relative alle autorizzazioni, fai clic su Aggiungi autorizzazioni.
- Seleziona Allega direttamente le norme.
- Cerca il criterio AmazonS3FullAccess.
- Seleziona la policy.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Recuperare le credenziali API Area 1
- Accedi alla dashboard di Area 1 Security (Cloudflare).
- Vai a Impostazioni > Accesso API.
- Genera la chiave API (token).
- Copia e salva il token in un luogo sicuro.
Configura i pacchetti Python richiesti
Accedi all'host di raccolta dei log (ad esempio, una VM AWS) ed esegui il comando seguente per configurare le credenziali AWS:
pip install boto3 requests aws configure
Crea lo script Area 1 Log Puller
Crea il seguente file inserendo
sudo vi area1_to_s3.py
, quindi copia il seguente codice:- Modifica quanto segue:
#!/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)
Salva ed esci
vi
: fai clic suesc
e poi digita:wq
.
Memorizza le variabili di ambiente
Crea un file sicuro per archiviare le variabili di ambiente in
/etc/area1.env
(o/home/user/.area1.env
)export AREA1_API_TOKEN="your_actual_area1_api_token" export AWS_PROFILE="<your_aws_programmatic_username>"
Assicurati che il file sia sicuro:
chmod 600 /etc/area1.env
Esegui e testa lo script
Esegui questo script:
python3 area1_to_s3.py
Dovresti vedere:
Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
Automatizzare con Cron
Crea lo script wrapper per Cron eseguendo
sudo vi /usr/local/bin/run_area1.sh
e poi copia il seguente codice:#!/usr/bin/env bash set -euo pipefail source /etc/area1.env /usr/bin/python3 /opt/scripts/area1_to_s3.py
Rendi eseguibile il file:
chmod +x /usr/local/bin/run_area1.sh
Impostata per l'esecuzione giornaliera alle ore 01:00 UTC:
crontab -e 0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
Configurare i feed
Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:
- Impostazioni SIEM > Feed
- Hub dei contenuti > Pacchetti di contenuti
Configurare i feed da Impostazioni SIEM > Feed
Per configurare un feed:
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
Area1 Logs
). - Seleziona Amazon S3 come Tipo di origine.
- Seleziona Area1 Security come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
- Region (Regione): la regione in cui si trova il bucket Amazon S3.
- URI S3: l'URI del bucket (il formato deve essere
s3://<your-log-bucket-name>
). Sostituisci quanto segue:your-log-bucket-name
: il nome del bucket.
- URI è un: seleziona Directory che include sottodirectory.
- Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
- ID chiave di accesso: la chiave di accesso utente con accesso al bucket S3.
- Chiave di accesso segreta: la chiave segreta dell'utente con accesso al bucket S3.
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Configurare i feed dall'hub dei contenuti
Specifica i valori per i seguenti campi:
Region (Regione): la regione in cui si trova il bucket Amazon S3.
- URI S3: l'URI del bucket (il formato deve essere
s3://<your-log-bucket-name>
). Sostituisci quanto segue:your-log-bucket-name
: il nome del bucket.
- URI è un: seleziona Directory che include sottodirectory.
- Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
- ID chiave di accesso: la chiave di accesso utente con accesso al bucket S3.
- Chiave di accesso segreta: la chiave segreta dell'utente con accesso al bucket S3.§
- URI S3: l'URI del bucket (il formato deve essere
Opzioni avanzate
- Nome feed: un valore precompilato che identifica il feed.
- Tipo di origine: metodo utilizzato per raccogliere i log in Google SecOps.
- Spazio dei nomi dell'asset: lo spazio dei nomi associato al feed.
- Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
alert_id | security_result.rule_id | Il valore viene estratto dal campo alert_id . |
alert_reasons | security_result.description | Il valore viene estratto dal campo alert_reasons . |
attachments.att_size | security_result.about.file.size | Il valore viene estratto dal campo attachments.att_size e convertito in un numero intero senza segno. |
attachments.disposition | security_result.about.user.attribute.labels.value | Il valore viene estratto dal campo attachments.disposition . |
attachments.extension | security_result.about.file.mime_type | Il valore viene estratto dal campo attachments.extension . |
attachments.md5 | security_result.about.file.md5 | Il valore viene estratto dal campo attachments.md5 . |
attachments.name | security_result.about.file.full_path | Il valore viene estratto dal campo attachments.name . |
attachments.sha1 | security_result.about.file.sha1 | Il valore viene estratto dal campo attachments.sha1 . |
attachments.sha256 | security_result.about.file.sha256 | Il valore viene estratto dal campo attachments.sha256 . |
attachments.ssdeep | security_result.about.file.ssdeep | Il valore viene estratto dal campo attachments.ssdeep . |
delivery_mode | security_result.detection_fields.value | Il valore viene estratto dal campo delivery_mode . |
envelope_from | principal.user.email_addresses, network.email.from | Il valore viene estratto dal campo envelope_from . |
envelope_to | network.email.to, target.user.email_addresses | Il valore viene estratto dal campo envelope_to . |
final_disposition | security_result.category_details | Il valore viene estratto dal campo final_disposition . |
message_id | metadata.product_log_id | Il valore viene estratto dal campo message_id dopo aver rimosso i caratteri "<" e ">". |
replyto | network.email.bounce_address | Il valore viene estratto dal campo replyto . |
smtp_helo_server_ip | principal.ip | Il valore viene estratto dal campo smtp_helo_server_ip . |
smtp_helo_server_ip_as_name | principal.location.name | Il valore viene estratto dal campo smtp_helo_server_ip_as_name . |
smtp_helo_server_ip_as_number | principal.asset_id | Il valore viene preso dal campo smtp_helo_server_ip_as_number e viene aggiunto il prefisso asset_id: . |
smtp_helo_server_ip_geo | principal.location.country_or_region, principal.location.state, principal.location.city | Il valore viene estratto dal campo smtp_helo_server_ip_geo utilizzando un pattern Grok. |
smtp_helo_server_name | principal.administrative_domain | Il valore viene estratto dal campo smtp_helo_server_name . |
origine | metadata.vendor_name | Il valore viene estratto dal campo source . Se il campo è vuoto, il valore viene impostato su area1security . |
subject | network.email.subject | Il valore viene estratto dal campo subject . |
tempo | metadata.event_timestamp | Il valore viene estratto dal campo time e convertito in un timestamp. |
metadata.event_type | Il valore è impostato su EMAIL_TRANSACTION . |
|
metadata.product_name | Il valore è impostato su AREA1 . |
|
metadata.log_type | Il valore è impostato su AREA1 . |
|
security_result.about.user.attribute.labels.key | Il valore è impostato su disposition . |
|
security_result.category | Il valore è impostato su SOFTWARE_MALICIOUS . |
|
security_result.detection_fields.key | Il valore è impostato su delivery_mode . |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.