Recolha registos da área 1
Este documento explica como carregar registos do Area 1 Email Security (da Cloudflare) para o Google Security Operations através do AWS S3. O analisador processa os registos no formato JSON. Extrai campos relevantes da estrutura JSON aninhada, mapeia-os para o modelo de dados unificado (UDM) e enriquece os dados com informações geográficas e detalhes de segurança, como hashes e eliminação de anexos.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps
- Um anfitrião Windows 2016 ou posterior, ou um anfitrião Linux com
systemd
- Se estiver a ser executado através de um proxy, as portas da firewall estão abertas
- Acesso privilegiado à segurança de email da Área 1 (da Cloudflare)
Configure o AWS IAM e o contentor do S3
- Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor
- Inicie sessão na consola da AWS.
- Aceda a S3 > Criar contentor.
- Introduza um nome para o contentor (por exemplo,
area1-security-logs
). - Deixe as outras predefinições (ou configure a encriptação e o controlo de versões, se necessário).
- Clique em Criar.
- Guarde o Nome e a Região do contentor para referência futura.
- Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione uma etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro CSV e armazene a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Em Políticas de autorizações, clique em Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clicar em Seguinte.
- Clique em Adicionar autorizações.
Obtenha credenciais da API Area 1
- Inicie sessão no painel de controlo da Area 1 Security (Cloudflare).
- Aceda a Definições > Acesso à API.
- Gere a chave da API (token).
- Copie e guarde a chave num local seguro.
Configure os pacotes Python necessários
Inicie sessão no anfitrião de recolha de registos (por exemplo, uma VM da AWS) e execute o seguinte para configurar as credenciais da AWS:
pip install boto3 requests aws configure
Crie o script Area 1 Log Puller
Crie o seguinte ficheiro introduzindo
sudo vi area1_to_s3.py
e, de seguida, copie o seguinte código:- Ajuste o seguinte:
#!/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)
Guardar e sair
vi
: clique emesc
e, de seguida, escreva:wq
.
Armazene as variáveis de ambiente
Crie um ficheiro seguro para armazenar variáveis de ambiente em
/etc/area1.env
(ou/home/user/.area1.env
)export AREA1_API_TOKEN="your_actual_area1_api_token" export AWS_PROFILE="<your_aws_programmatic_username>"
Certifique-se de que o ficheiro está seguro:
chmod 600 /etc/area1.env
Execute e teste o script
Execute o seguinte guião:
python3 area1_to_s3.py
Deve ver:
Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
Automatize com o Cron
Crie um script de wrapper para o Cron executando o comando
sudo vi /usr/local/bin/run_area1.sh
e, em seguida, copie o seguinte código:#!/usr/bin/env bash set -euo pipefail source /etc/area1.env /usr/bin/python3 /opt/scripts/area1_to_s3.py
Torne o ficheiro executável:
chmod +x /usr/local/bin/run_area1.sh
Definida para ser executada diariamente às 01:00 UTC:
crontab -e 0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
Configure feeds
Existem dois pontos de entrada diferentes para configurar feeds na plataforma Google SecOps:
- Definições do SIEM > Feeds
- Content Hub > Pacotes de conteúdo
Configure feeds a partir de Definições do SIEM > Feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo,
Area1 Logs
). - Selecione Amazon S3 como o Tipo de origem.
- Selecione Area1 Security como o Tipo de registo.
- Clicar em Seguinte.
Especifique valores para os seguintes parâmetros de entrada:
- Região: a região onde o contentor do Amazon S3 está localizado.
- URI do S3: o URI do contentor (o formato deve ser:
s3://<your-log-bucket-name>
). Substitua o seguinte:your-log-bucket-name
: o nome do segmento.
- O URI é um: selecione Diretório que inclui subdiretórios.
- Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
- ID da chave de acesso: a chave de acesso do utilizador com acesso ao contentor do S3.
- Chave de acesso secreta: a chave secreta do utilizador com acesso ao contentor do S3.
Clicar em Seguinte.
Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Configure feeds a partir do centro de conteúdo
Especifique valores para os seguintes campos:
Região: a região onde o contentor do Amazon S3 está localizado.
- URI do S3: o URI do contentor (o formato deve ser:
s3://<your-log-bucket-name>
). Substitua o seguinte:your-log-bucket-name
: o nome do segmento.
- O URI é um: selecione Diretório que inclui subdiretórios.
- Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
- ID da chave de acesso: a chave de acesso do utilizador com acesso ao contentor do S3.
- Chave de acesso secreta: a chave secreta do utilizador com acesso ao contentor do S3.§
- URI do S3: o URI do contentor (o formato deve ser:
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: método usado para recolher registos no Google SecOps.
- Espaço de nomes do recurso: espaço de nomes associado ao feed.
- Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.
Tabela de mapeamento do UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
alert_id | security_result.rule_id | O valor é retirado do campo alert_id . |
alert_reasons | security_result.description | O valor é retirado do campo alert_reasons . |
attachments.att_size | security_result.about.file.size | O valor é retirado do campo attachments.att_size e convertido num número inteiro sem sinal. |
attachments.disposition | security_result.about.user.attribute.labels.value | O valor é retirado do campo attachments.disposition . |
attachments.extension | security_result.about.file.mime_type | O valor é retirado do campo attachments.extension . |
attachments.md5 | security_result.about.file.md5 | O valor é retirado do campo attachments.md5 . |
attachments.name | security_result.about.file.full_path | O valor é retirado do campo attachments.name . |
attachments.sha1 | security_result.about.file.sha1 | O valor é retirado do campo attachments.sha1 . |
attachments.sha256 | security_result.about.file.sha256 | O valor é retirado do campo attachments.sha256 . |
attachments.ssdeep | security_result.about.file.ssdeep | O valor é retirado do campo attachments.ssdeep . |
delivery_mode | security_result.detection_fields.value | O valor é retirado do campo delivery_mode . |
envelope_from | principal.user.email_addresses, network.email.from | O valor é retirado do campo envelope_from . |
envelope_to | network.email.to, target.user.email_addresses | O valor é retirado do campo envelope_to . |
final_disposition | security_result.category_details | O valor é retirado do campo final_disposition . |
message_id | metadata.product_log_id | O valor é retirado do campo message_id após a remoção dos carateres "<" e ">". |
replyto | network.email.bounce_address | O valor é retirado do campo replyto . |
smtp_helo_server_ip | principal.ip | O valor é retirado do campo smtp_helo_server_ip . |
smtp_helo_server_ip_as_name | principal.location.name | O valor é retirado do campo smtp_helo_server_ip_as_name . |
smtp_helo_server_ip_as_number | principal.asset_id | O valor é retirado do campo smtp_helo_server_ip_as_number e é precedido de asset_id: . |
smtp_helo_server_ip_geo | principal.location.country_or_region, principal.location.state, principal.location.city | O valor é extraído do campo smtp_helo_server_ip_geo através de um padrão Grok. |
smtp_helo_server_name | principal.administrative_domain | O valor é retirado do campo smtp_helo_server_name . |
fonte | metadata.vendor_name | O valor é retirado do campo source . Se o campo estiver vazio, o valor é definido como area1security . |
assunto | network.email.subject | O valor é retirado do campo subject . |
tempo | metadata.event_timestamp | O valor é retirado do campo time e convertido numa indicação de tempo. |
metadata.event_type | O valor é definido como EMAIL_TRANSACTION . |
|
metadata.product_name | O valor é definido como AREA1 . |
|
metadata.log_type | O valor é definido como AREA1 . |
|
security_result.about.user.attribute.labels.key | O valor é definido como disposition . |
|
security_result.category | O valor é definido como SOFTWARE_MALICIOUS . |
|
security_result.detection_fields.key | O valor é definido como delivery_mode . |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.