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 suesce 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.pyDovresti 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.she poi copia il seguente codice:#!/usr/bin/env bash set -euo pipefail source /etc/area1.env /usr/bin/python3 /opt/scripts/area1_to_s3.pyRendi eseguibile il file:
chmod +x /usr/local/bin/run_area1.shImpostata 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.