收集 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 存储分区

  1. 按照以下用户指南创建 Amazon S3 存储桶创建存储桶
  2. 登录 AWS 控制台
  3. 依次前往 S3 > 创建存储桶
  4. 输入存储桶的名称(例如 area1-security-logs)。
  5. 保留其他默认设置(或根据需要配置加密和版本控制)。
  6. 点击创建
  7. 保存相应存储桶的名称区域,以供日后参考。
  8. 按照以下用户指南创建用户创建 IAM 用户
  9. 选择创建的用户
  10. 选择安全凭据标签页。
  11. 访问密钥部分中,点击创建访问密钥
  12. 选择第三方服务作为使用情形
  13. 点击下一步
  14. 可选:添加说明标记。
  15. 点击创建访问密钥
  16. 点击 Download CSV file(下载 CSV 文件),然后保存访问密钥秘密访问密钥,以供日后参考。
  17. 点击完成
  18. 选择权限标签页。
  19. 权限政策中,点击添加权限
  20. 选择直接附加政策
  21. 搜索 AmazonS3FullAccess 政策。
  22. 选择相应政策。
  23. 点击下一步
  24. 点击添加权限

获取 Area 1 API 凭据

  1. 登录 Area 1 Security (Cloudflare) 信息中心。
  2. 依次前往设置> API 访问权限
  3. 生成 API 密钥(令牌)。
  4. 复制保存令牌,将其保存在安全的地方。

配置必需的 Python 软件包

  1. 登录日志收集主机(例如 AWS 虚拟机),然后运行以下命令来配置 AWS 凭据:

    pip install boto3 requests
    aws configure
    

创建区域 1 日志提取器脚本

  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)
    
  2. 保存并退出 vi:点击 esc,然后输入 :wq

存储环境变量

  1. 创建安全文件以在 /etc/area1.env(或 /home/user/.area1.env)中存储环境变量

    export AREA1_API_TOKEN="your_actual_area1_api_token"
    export AWS_PROFILE="<your_aws_programmatic_username>"
    
  2. 确保文件安全:

    chmod 600 /etc/area1.env
    

运行并测试脚本

  1. 运行以下脚本:

    python3 area1_to_s3.py
    
  2. 您应该会看到:

    Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
    

使用 Cron 实现自动化

  1. 运行 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
    
  2. 让该文件可执行:

    chmod +x /usr/local/bin/run_area1.sh
    
  3. 设置为每天 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,请按以下步骤操作:

  1. 依次前往 SIEM 设置> Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 Area1 Logs)。
  5. 选择 Amazon S3 作为来源类型
  6. 选择区域 1 安全作为日志类型
  7. 点击下一步
  8. 为以下输入参数指定值:

    • 区域:Amazon S3 存储桶所在的区域。
    • S3 URI:存储桶 URI(格式应为:s3://<your-log-bucket-name>)。 请替换以下内容:
      • your-log-bucket-name:相应存储桶的名称。
    • URI is a(URI 是):选择目录(包括子目录)
    • 来源删除选项:根据您的偏好设置选择删除选项。
    • 访问密钥 ID:具有 S3 存储桶访问权限的用户访问密钥。
    • 私有访问密钥:有权访问 S3 存储桶的用户私有密钥。
  9. 点击下一步

  10. 最终确定界面中查看新的 Feed 配置,然后点击提交

设置来自内容中心的 Feed

为以下字段指定值:

  • 区域:Amazon S3 存储桶所在的区域。

    • S3 URI:存储桶 URI(格式应为:s3://<your-log-bucket-name>)。 请替换以下内容:
      • your-log-bucket-name:相应存储桶的名称。
    • URI is a(URI 是):选择目录(包括子目录)
    • 来源删除选项:根据您的偏好设置选择删除选项。
    • 访问密钥 ID:具有 S3 存储桶访问权限的用户访问密钥。
    • 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥。§

高级选项

  • 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 专业人士那里获得解答。