收集 Area 1 日志
本文档介绍了如何使用 AWS S3 将 Area 1 Email Security(由 Cloudflare 提供)日志注入到 Google Security Operations。解析器会处理 JSON 格式的日志。它从嵌套的 JSON 结构中提取相关字段,将其映射到统一数据模型 (UDM),并使用地理位置信息和安全详细信息(例如附件哈希和处置)来丰富数据。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows 2016 或更高版本,或者具有
systemd
的 Linux 主机 - 如果在代理后运行,防火墙端口处于开放状态
- 对 Area 1 Email Security (by Cloudflare) 的特权访问权限
配置 AWS IAM 和 S3 存储分区
- 按照以下用户指南创建 Amazon S3 存储桶:创建存储桶
- 登录 AWS 控制台。
- 依次前往 S3 > 创建存储桶。
- 输入存储桶的名称(例如
area1-security-logs
)。 - 保留其他默认设置(或根据需要配置加密和版本控制)。
- 点击创建。
- 保存相应存储桶的名称和区域,以供日后参考。
- 按照以下用户指南创建用户:创建 IAM 用户。
- 选择创建的用户。
- 选择安全凭据标签页。
- 在访问密钥部分中,点击创建访问密钥。
- 选择第三方服务作为使用情形。
- 点击下一步。
- 可选:添加说明标记。
- 点击创建访问密钥。
- 点击 Download CSV file(下载 CSV 文件),然后保存访问密钥和秘密访问密钥,以供日后参考。
- 点击完成。
- 选择权限标签页。
- 在权限政策中,点击添加权限。
- 选择直接附加政策。
- 搜索 AmazonS3FullAccess 政策。
- 选择相应政策。
- 点击下一步。
- 点击添加权限。
获取 Area 1 API 凭据
- 登录 Area 1 Security (Cloudflare) 信息中心。
- 依次前往设置> API 访问权限。
- 生成 API 密钥(令牌)。
- 复制并保存令牌,将其保存在安全的地方。
配置必需的 Python 软件包
登录日志收集主机(例如 AWS 虚拟机),然后运行以下命令来配置 AWS 凭据:
pip install boto3 requests aws configure
创建区域 1 日志提取器脚本
输入
sudo vi area1_to_s3.py
,然后复制以下代码,以创建以下文件:- 调整以下内容:
#!/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)
保存并退出
vi
:点击esc
,然后输入:wq
。
存储环境变量
创建安全文件以在
/etc/area1.env
(或/home/user/.area1.env
)中存储环境变量export AREA1_API_TOKEN="your_actual_area1_api_token" export AWS_PROFILE="<your_aws_programmatic_username>"
确保文件安全:
chmod 600 /etc/area1.env
运行并测试脚本
运行以下脚本:
python3 area1_to_s3.py
您应该会看到:
Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
使用 Cron 实现自动化
运行
sudo vi /usr/local/bin/run_area1.sh
,然后复制以下代码,为 Cron 创建封装容器脚本:#!/usr/bin/env bash set -euo pipefail source /etc/area1.env /usr/bin/python3 /opt/scripts/area1_to_s3.py
让该文件可执行:
chmod +x /usr/local/bin/run_area1.sh
设置为每天 01:00(世界协调时间,UTC)运行:
crontab -e 0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
设置 Feed
您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:
- SIEM 设置 > Feed
- 内容中心 > 内容包
通过“SIEM 设置”>“Feed”设置 Feed
如需配置 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置> Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在Feed 名称字段中,输入 Feed 的名称(例如
Area1 Logs
)。 - 选择 Amazon S3 作为来源类型。
- 选择区域 1 安全作为日志类型。
- 点击下一步。
为以下输入参数指定值:
- 区域:Amazon S3 存储桶所在的区域。
- S3 URI:存储桶 URI(格式应为:
s3://<your-log-bucket-name>
)。 请替换以下内容:your-log-bucket-name
:相应存储桶的名称。
- URI is a(URI 是):选择目录(包括子目录)。
- 来源删除选项:根据您的偏好设置选择删除选项。
- 访问密钥 ID:具有 S3 存储桶访问权限的用户访问密钥。
- 私有访问密钥:有权访问 S3 存储桶的用户私有密钥。
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
设置来自内容中心的 Feed
为以下字段指定值:
区域:Amazon S3 存储桶所在的区域。
- S3 URI:存储桶 URI(格式应为:
s3://<your-log-bucket-name>
)。 请替换以下内容:your-log-bucket-name
:相应存储桶的名称。
- URI is a(URI 是):选择目录(包括子目录)。
- 来源删除选项:根据您的偏好设置选择删除选项。
- 访问密钥 ID:具有 S3 存储桶访问权限的用户访问密钥。
- 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥。§
- S3 URI:存储桶 URI(格式应为:
高级选项
- Feed 名称:用于标识 Feed 的预填充值。
- 来源类型:用于将日志收集到 Google SecOps 中的方法。
- 资源命名空间:与 Feed 关联的命名空间。
- 提取标签:应用于相应 Feed 中所有事件的标签。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
alert_id | security_result.rule_id | 该值取自 alert_id 字段。 |
alert_reasons | security_result.description | 该值取自 alert_reasons 字段。 |
attachments.att_size | security_result.about.file.size | 该值取自 attachments.att_size 字段,并转换为无符号整数。 |
attachments.disposition | security_result.about.user.attribute.labels.value | 该值取自 attachments.disposition 字段。 |
attachments.extension | security_result.about.file.mime_type | 该值取自 attachments.extension 字段。 |
attachments.md5 | security_result.about.file.md5 | 该值取自 attachments.md5 字段。 |
attachments.name | security_result.about.file.full_path | 该值取自 attachments.name 字段。 |
attachments.sha1 | security_result.about.file.sha1 | 该值取自 attachments.sha1 字段。 |
attachments.sha256 | security_result.about.file.sha256 | 该值取自 attachments.sha256 字段。 |
attachments.ssdeep | security_result.about.file.ssdeep | 该值取自 attachments.ssdeep 字段。 |
delivery_mode | security_result.detection_fields.value | 该值取自 delivery_mode 字段。 |
envelope_from | principal.user.email_addresses, network.email.from | 该值取自 envelope_from 字段。 |
envelope_to | network.email.to, target.user.email_addresses | 该值取自 envelope_to 字段。 |
final_disposition | security_result.category_details | 该值取自 final_disposition 字段。 |
message_id | metadata.product_log_id | 该值取自 message_id 字段,但会移除“<”和“>”字符。 |
replyto | network.email.bounce_address | 该值取自 replyto 字段。 |
smtp_helo_server_ip | principal.ip | 该值取自 smtp_helo_server_ip 字段。 |
smtp_helo_server_ip_as_name | principal.location.name | 该值取自 smtp_helo_server_ip_as_name 字段。 |
smtp_helo_server_ip_as_number | principal.asset_id | 该值取自 smtp_helo_server_ip_as_number 字段,并在前面添加 asset_id: 。 |
smtp_helo_server_ip_geo | principal.location.country_or_region、principal.location.state、principal.location.city | 该值使用 Grok 模式从 smtp_helo_server_ip_geo 字段中提取。 |
smtp_helo_server_name | principal.administrative_domain | 该值取自 smtp_helo_server_name 字段。 |
来源 | metadata.vendor_name | 该值取自 source 字段。如果该字段为空,则值将设置为 area1security 。 |
subject | network.email.subject | 该值取自 subject 字段。 |
时间 | metadata.event_timestamp | 该值取自 time 字段,并转换为时间戳。 |
metadata.event_type | 该值设置为 EMAIL_TRANSACTION 。 |
|
metadata.product_name | 该值设置为 AREA1 。 |
|
metadata.log_type | 该值设置为 AREA1 。 |
|
security_result.about.user.attribute.labels.key | 该值设置为 disposition 。 |
|
security_result.category | 该值设置为 SOFTWARE_MALICIOUS 。 |
|
security_result.detection_fields.key | 该值设置为 delivery_mode 。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。