收集 Gmail 日志

支持的平台:

本文档介绍了如何使用 Google Cloud Storage V2 将 Gmail 日志注入到 Google Security Operations。

Gmail 是 Google Workspace 的电子邮件服务,可提供安全智能的电子邮件,并内置垃圾邮件和钓鱼式攻击防护功能。Gmail 日志会捕获有关电子邮件递送、安全事件以及通过 Gmail 基础架构的邮件流的详细信息。

准备工作

确保您满足以下前提条件:

  • Google SecOps 实例
  • 已启用 Cloud Storage API 和 BigQuery API 的 GCP 项目
  • 拥有相应版本的 Google Workspace 账号(企业标准版、企业 Plus 版、教育标准版或教育 Plus 版)
  • 超级用户对 Google Workspace 管理控制台的访问权限
  • 创建和管理 GCS 存储分区的权限
  • 管理 GCS 存储分区的 IAM 政策的权限
  • 创建 BigQuery 预定查询的权限
  • 服务账号 gapps-reports@system.gserviceaccount.com 必须拥有 BigQuery 项目的编辑者角色

创建 Google Cloud Storage 存储分区

使用 Google Cloud 控制台

  1. 转到 Google Cloud Console
  2. 选择您的项目或创建新项目。
  3. 在导航菜单中,依次前往 Cloud Storage > 存储分区
  4. 点击创建存储分区
  5. 提供以下配置详细信息:

    设置
    为存储桶命名 输入一个全局唯一的名称(例如 gmail-logs-export
    位置类型 根据您的需求进行选择(区域级、双区域级、多区域级)
    位置 选择相应位置(例如 us-central1
    存储类别 标准(建议用于经常访问的日志)
    访问权限控制 统一(推荐)
    保护工具 可选:启用对象版本控制或保留政策
  6. 点击创建

使用 gcloud 命令行工具

  • 或者,使用 gcloud 命令创建存储桶:

    gcloud storage buckets create gs://gmail-logs-export \
        --location=us-central1 \
        --default-storage-class=STANDARD
    
    • 替换:
      • gmail-logs-export:您所需的存储桶名称(全局唯一)。
      • us-central1:您的首选区域(例如 us-central1europe-west1)。

配置 Google Workspace 以将日志导出到 BigQuery

Google Workspace 日志(包括 Gmail 日志)通过统一的 Workspace 日志和报告功能导出到 BigQuery。

为 Workspace 日志启用 BigQuery Export

  1. 使用超级用户账号登录 Google 管理控制台
  2. 依次前往菜单 > 报告 > 数据集成
  3. 将光标指向 BigQuery Export 卡片,然后点击修改
  4. 勾选允许将 Google Workspace 数据导出至 Google BigQuery 旁边的复选框。
  5. BigQuery 项目 ID 下,选择您要在用于存储日志的项目。
  6. 项目中的新数据集下方,输入要用来存储日志的数据集的名称(例如 workspace_logs)。
  7. 可选:选中将数据集限定在特定的地理位置复选框,然后从菜单中选择位置。
  8. 点击保存

启用导出功能后,系统通常会在 10 分钟内提供活动日志事件。数据会导出到指定数据集中的 activity_YYYYMMDD 表。

创建用于将数据从 BigQuery 导出到 GCS 的预定查询

如需按预定时间表自动将 Gmail 日志从 BigQuery 导出到 Cloud Storage,请使用 EXPORT DATA 语句创建预定查询。

使用 BigQuery 控制台

  1. Google Cloud 控制台中,前往 BigQuery
  2. 在左侧导航栏中,点击预定查询
  3. 点击创建预定查询
  4. 查询编辑器中,输入以下 SQL:

    EXPORT DATA OPTIONS(
        uri='gs://gmail-logs-export/gmail-logs/*.json',
        format='JSON',
        overwrite=false
    ) AS
    SELECT 
        *
    FROM 
        `PROJECT_ID.workspace_logs.activity_*`
    WHERE 
        record_type = 'gmail'
        AND _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
    
    • 替换:
      • gmail-logs-export:您的 GCS 存储桶名称
      • PROJECT_ID:您的 GCP 项目 ID
      • workspace_logs:您的 BigQuery 数据集名称
  5. 时间表选项部分,执行以下操作:

    • 重复:选择小时
    • 每次:输入 1
    • 开始日期和运行时间:选择当前日期和时间。
  6. 查询结果的目标位置部分:

    • 数据集:选择一个用于查询元数据(而非导出数据)的数据集。
  7. 点击保存

使用 bq 命令行工具

  • 或者,使用 bq 命令创建预定查询:

    bq mk \
        --transfer_config \
        --project_id=PROJECT_ID \
        --data_source=scheduled_query \
        --display_name='Gmail Logs Export to GCS' \
        --schedule='every 1 hours' \
        --params='{
            "query":"EXPORT DATA OPTIONS(uri=\"gs://gmail-logs-export/gmail-logs/*.json\", format=\"JSON\", overwrite=false) AS SELECT * FROM `PROJECT_ID.workspace_logs.activity_*` WHERE record_type = \"gmail\" AND _TABLE_SUFFIX = FORMAT_DATE(\"%Y%m%d\", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))",
            "destination_table_name_template":"gmail_export_metadata",
            "write_disposition":"WRITE_TRUNCATE"
        }'
    
    • 替换:
      • PROJECT_ID:您的 GCP 项目 ID
      • gmail-logs-export:您的 GCS 存储桶名称
      • workspace_logs:您的 BigQuery 数据集名称

检索 Google SecOps 服务账号

Google SecOps 使用唯一的服务账号从您的 GCS 存储桶中读取数据。您必须授予此服务账号对您的存储桶的访问权限。

在 Google SecOps 中配置 Feed 以注入 Gmail 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 Gmail Logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型
  6. 选择 Gmail 日志作为日志类型

  7. 点击获取服务账号。系统会显示一个唯一的服务账号电子邮件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 复制此电子邮件地址,以便在下一步中使用。

  9. 点击下一步

  10. 为以下输入参数指定值:

    • 存储桶网址:输入带有前缀路径的 GCS 存储桶 URI:

       gs://gmail-logs-export/gmail-logs/
      
      • 替换:
        • gmail-logs-export:您的 GCS 存储桶名称
        • gmail-logs:存储日志的前缀/文件夹路径
    • 来源删除选项:根据您的偏好选择删除选项:

      • 永不:永不删除转移后的任何文件(建议用于测试)。
      • 删除已转移的文件:在成功转移后删除文件。
      • 删除已转移的文件和空目录:在成功转移后删除文件和空目录。

    • 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。

    • 资产命名空间资产命名空间

    • 注入标签:要应用于此 Feed 中事件的标签。

  11. 点击下一步

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

向 Google SecOps 服务账号授予 IAM 权限

Google SecOps 服务账号需要对您的 GCS 存储桶具有 Storage Object Viewer 角色。

使用 Google Cloud 控制台

  1. 前往 Cloud Storage > 存储分区
  2. 点击您的存储桶名称。
  3. 前往权限标签页。
  4. 点击授予访问权限
  5. 提供以下配置详细信息:
    • 添加主账号:粘贴 Google SecOps 服务账号电子邮件地址。
    • 分配角色:选择 Storage Object Viewer
  6. 点击保存

使用 gcloud 命令行工具

  • 或者,使用 gcloud 命令授予权限:

    gcloud storage buckets add-iam-policy-binding gs://gmail-logs-export \
        --member="serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL" \
        --role="roles/storage.objectViewer"
    
    • 替换:
      • gmail-logs-export:您的存储桶名称。
      • SECOPS_SERVICE_ACCOUNT_EMAIL:Google SecOps 服务账号电子邮件地址。

使用 gsutil 命令行工具(旧版)

  • 向 SecOps 服务账号授予对 Gmail 日志导出存储桶的“对象查看者”访问权限。

    gsutil iam ch serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL:objectViewer \
        gs://gmail-logs-export
    

验证权限

  • 如需验证权限是否已正确授予,请执行以下操作:

    gcloud storage buckets get-iam-policy gs://gmail-logs-export \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectViewer"
    

您应该会在输出中看到 Google SecOps 服务账号电子邮件地址。

UDM 映射表

日志字段 UDM 映射 逻辑
attachment.file_extension_type、attachment.sha256、attachment.file_name、domains 关于 与附件详细信息和链接网域合并
message_info.post_delivery_info.action_type、gmail.message_info.post_delivery_info.action_type、event_info.mail_event_type、gmail.event_info.mail_event_type、tok.product_bucket、tok.scope_name、record_type、token.client_type、message_info.num_message_attachments、gmail.message_info.num_message_attachments additional.fields 与各种其他元数据字段合并
action_type、description、rule_id metadata.description 根据 action_type 值或说明设置为特定说明,如果 rule_id == 7,则设置为“令人反感的内容”
metadata.event_type 设置为“EMAIL_TRANSACTION”
event_name metadata.product_event_type 直接复制值
metadata.product_name 设置为“GMAIL”
metadata.vendor_name 设置为“Google”
__incoming_message、__outcoming_message network.direction 如果检测到入站消息,则设置为“INBOUND”;如果检测到出站消息,则设置为“OUTBOUND”
destination.address network.email.cc 从索引大于 0 的目标地址合并
message_info.source.from_header_address、message_info.source.address network.email.from 如果 from_header_address 不为空,则取自该值;否则取自 source.address
message_info.rfc2822_message_id, gmail.message_info.rfc2822_message_id network.email.mail_id 从 rfc2822_message_id 中提取,移除 < >,使用 grok
message_info.subject, gmail.message_info.subject network.email.subject 如果 message_info.subject 不为空,则为该值;否则为 gmail.message_info.subject
destination.address network.email.to 从第一个目的地地址合并
network.ip_protocol 设置为“TCP”
_payload_size network.received_bytes 如果传入的消息
_payload_size network.sent_bytes 如果为传出消息,则设置为 _payload_size
token.app_name, message_info.source.service, message_info.source.selector, gmail.message_info.source.service, gmail.message_info.source.selector principal.application 如果 token.app_name 不为空,则使用该值;否则,将 source.service 和 source.selector 连接起来
message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone principal.asset.hostname 来自 client_host_zone 的值
client_ip principal.asset.ip 直接复制值
message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone principal.hostname 来自 client_host_zone 的值
client_ip principal.ip 直接复制值
message_info.connection_info.ip_geo_country, gmail.message_info.connection_info.ip_geo_country principal.location.country_or_region ip_geo_country 的值
email, source_address principal.user.email_addresses 从 email_address 和 source_address 合并而来
token.client_id principal.user.group_identifiers 直接复制值
message_info.source.from_header_displayname, gmail.message_info.source.from_header_displayname principal.user.user_display_name 来自 from_header_displayname 的值
source_address principal.user.userid 直接复制值
操作 security_result.action 直接复制值
类别 security_result.category 直接复制值
category_details security_result.category_details 直接复制值
message_info.connection_info.smtp_response_reason, gmail.message_info.connection_info.smtp_response_reason, rule_description, reason security_result.description 设置为 SMTP 响应原因、规则说明或分类原因
stringMatch.predefined_detector_name、stringMatch.matched_string、stringMatch.match_expression、stringMatch.source、stringMatch.type security_result.detection_fields 与检测字段对象合并
rule_id security_result.rule_id 直接复制值
rule_name security_result.rule_name 直接复制值
_err_summary、rule_id、description security_result.summary 设置为错误摘要、规则特定摘要或说明
_target_host target.administrative_domain 直接复制值
message_info.destination.0.service、message_info.destination.0.selector、gmail.message_info.destination.0.service、gmail.message_info.destination.0.selector target.application 由服务和选择器串联而成

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。