收集 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 控制台
- 转到 Google Cloud Console。
- 选择您的项目或创建新项目。
- 在导航菜单中,依次前往 Cloud Storage > 存储分区。
- 点击创建存储分区。
提供以下配置详细信息:
设置 值 为存储桶命名 输入一个全局唯一的名称(例如 gmail-logs-export)位置类型 根据您的需求进行选择(区域级、双区域级、多区域级) 位置 选择相应位置(例如 us-central1)存储类别 标准(建议用于经常访问的日志) 访问权限控制 统一(推荐) 保护工具 可选:启用对象版本控制或保留政策 点击创建。
使用 gcloud 命令行工具
或者,使用
gcloud命令创建存储桶:gcloud storage buckets create gs://gmail-logs-export \ --location=us-central1 \ --default-storage-class=STANDARD- 替换:
gmail-logs-export:您所需的存储桶名称(全局唯一)。us-central1:您的首选区域(例如us-central1、europe-west1)。
- 替换:
配置 Google Workspace 以将日志导出到 BigQuery
Google Workspace 日志(包括 Gmail 日志)通过统一的 Workspace 日志和报告功能导出到 BigQuery。
为 Workspace 日志启用 BigQuery Export
- 使用超级用户账号登录 Google 管理控制台。
- 依次前往菜单 > 报告 > 数据集成。
- 将光标指向 BigQuery Export 卡片,然后点击修改。
- 勾选允许将 Google Workspace 数据导出至 Google BigQuery 旁边的复选框。
- 在 BigQuery 项目 ID 下,选择您要在用于存储日志的项目。
- 在项目中的新数据集下方,输入要用来存储日志的数据集的名称(例如
workspace_logs)。 - 可选:选中将数据集限定在特定的地理位置复选框,然后从菜单中选择位置。
点击保存。
启用导出功能后,系统通常会在 10 分钟内提供活动日志事件。数据会导出到指定数据集中的 activity_YYYYMMDD 表。
创建用于将数据从 BigQuery 导出到 GCS 的预定查询
如需按预定时间表自动将 Gmail 日志从 BigQuery 导出到 Cloud Storage,请使用 EXPORT DATA 语句创建预定查询。
使用 BigQuery 控制台
- 在 Google Cloud 控制台中,前往 BigQuery。
- 在左侧导航栏中,点击预定查询。
- 点击创建预定查询。
在查询编辑器中,输入以下 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 项目 IDworkspace_logs:您的 BigQuery 数据集名称
- 替换:
在时间表选项部分,执行以下操作:
- 重复:选择小时。
- 每次:输入
1。 - 开始日期和运行时间:选择当前日期和时间。
在查询结果的目标位置部分:
- 数据集:选择一个用于查询元数据(而非导出数据)的数据集。
点击保存。
使用 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 项目 IDgmail-logs-export:您的 GCS 存储桶名称workspace_logs:您的 BigQuery 数据集名称
- 替换:
检索 Google SecOps 服务账号
Google SecOps 使用唯一的服务账号从您的 GCS 存储桶中读取数据。您必须授予此服务账号对您的存储桶的访问权限。
在 Google SecOps 中配置 Feed 以注入 Gmail 日志
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 点击配置单个 Feed。
- 在Feed 名称字段中,输入 Feed 的名称(例如
Gmail Logs)。 - 选择 Google Cloud Storage V2 作为来源类型。
选择 Gmail 日志作为日志类型。
点击获取服务账号。系统会显示一个唯一的服务账号电子邮件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com复制此电子邮件地址,以便在下一步中使用。
点击下一步。
为以下输入参数指定值:
存储桶网址:输入带有前缀路径的 GCS 存储桶 URI:
gs://gmail-logs-export/gmail-logs/- 替换:
gmail-logs-export:您的 GCS 存储桶名称gmail-logs:存储日志的前缀/文件夹路径
- 替换:
来源删除选项:根据您的偏好选择删除选项:
- 永不:永不删除转移后的任何文件(建议用于测试)。
- 删除已转移的文件:在成功转移后删除文件。
删除已转移的文件和空目录:在成功转移后删除文件和空目录。
文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
资产命名空间:资产命名空间。
注入标签:要应用于此 Feed 中事件的标签。
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
向 Google SecOps 服务账号授予 IAM 权限
Google SecOps 服务账号需要对您的 GCS 存储桶具有 Storage Object Viewer 角色。
使用 Google Cloud 控制台
- 前往 Cloud Storage > 存储分区。
- 点击您的存储桶名称。
- 前往权限标签页。
- 点击授予访问权限。
- 提供以下配置详细信息:
- 添加主账号:粘贴 Google SecOps 服务账号电子邮件地址。
- 分配角色:选择 Storage Object Viewer。
- 点击保存。
使用 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 专业人士的解答。