收集 Google Cloud 监控提醒活动日志
本文档介绍了如何使用 Google Cloud Storage V2 将与 Cloud Monitoring 提醒活动相关的 Cloud Logging 日志注入到 Google Security Operations。
Cloud Monitoring 可为 Google Cloud 资源提供提醒功能。基于日志的提醒政策会在日志中出现特定消息时通知您。当日志条目满足提醒政策的条件时,Cloud Monitoring 会开启突发事件,并且您会收到有关该突发事件的通知。通过此集成,您可以将 Cloud Logging 条目导出到 Google Security Operations,以进行安全分析和关联。
准备工作
确保您满足以下前提条件:
- Google SecOps 实例
- 启用了 Cloud Storage API 的Google Cloud 项目
- 创建和管理 GCS 存储分区的权限
- 管理 GCS 存储分区的 IAM 政策的权限
- 配置 Cloud Logging 接收器的权限
创建 Google Cloud Storage 存储分区
使用 Google Cloud 控制台
- 转到 Google Cloud Console。
- 选择您的项目或创建新项目。
- 在导航菜单中,依次前往 Cloud Storage > 存储分区。
- 点击创建存储分区。
提供以下配置详细信息:
设置 值 为存储桶命名 输入一个全局唯一的名称(例如 monitoring-logs-export)位置类型 根据您的需求进行选择(区域级、双区域级、多区域级) 位置 选择相应位置(例如 us-central1)存储类别 标准(建议用于经常访问的日志) 访问权限控制 统一(推荐) 保护工具 可选:启用对象版本控制或保留政策 点击创建。
使用 gcloud 命令行工具
或者,使用
gcloud命令创建存储桶:gcloud storage buckets create gs://monitoring-logs-export \ --location=us-central1 \ --default-storage-class=STANDARD- 替换:
monitoring-logs-export:您所需的存储桶名称(全局唯一)。us-central1:您的首选区域。
- 替换:
配置 Cloud Logging 以将日志导出到 GCS
当日志条目路由到 Cloud Storage 时,会存储为 JSON 文件。您可以导出与 Cloud Monitoring 提醒活动相关的日志,例如提醒政策管理的审核日志。
创建日志接收器
- 在 Google Cloud 控制台中,依次前往 Logging > 日志路由器。
- 点击创建接收器。
- 提供以下配置详细信息:
- 接收器名称:输入一个描述性名称(例如
monitoring-alerts-to-gcs)。 - 接收器说明:可选说明。
- 接收器名称:输入一个描述性名称(例如
- 点击下一步。
- 在选择接收器服务部分中:
- 接收器服务:选择 Cloud Storage 存储桶。
- 选择 Cloud Storage 存储桶:从列表中选择存储桶(例如
monitoring-logs-export)。
- 点击下一步。
在选择要包含在接收器中的日志部分,输入过滤查询,以选择要导出的日志。
Cloud Monitoring 审核日志的过滤条件示例:
protoPayload.serviceName="monitoring.googleapis.com" logName:"cloudaudit.googleapis.com/activity"基于日志的提醒政策触发器的过滤条件示例:
如果您想导出触发基于日志的提醒政策的基础日志,请使用与这些特定日志匹配的过滤条件。例如:
severity >= ERROR resource.type="gce_instance"
点击下一步。
可选:根据需要配置排除项过滤条件。
点击创建接收器。
将日志数据路由到 Cloud Storage 存储分区的新接收器可能需要几个小时才能开始路由日志条目。路由的日志条目每小时向 Cloud Storage 存储分区保存一批。第一批条目可能需要 2 到 3 个小时才会开始显示。
检索 Google SecOps 服务账号
Google SecOps 使用唯一的服务账号从您的 GCS 存储桶中读取数据。您必须授予此服务账号对您的存储桶的访问权限。
在 Google SecOps 中配置 Feed 以注入 Cloud Monitoring 日志
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 点击配置单个 Feed。
- 在Feed 名称字段中,输入 Feed 的名称(例如
Google Cloud Monitoring Alerts Logs)。 - 选择 Google Cloud Storage V2 作为来源类型。
选择 GCP_MONITORING_ALERTS 作为日志类型。
点击获取服务账号。系统会显示一个唯一的服务账号电子邮件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com复制此电子邮件地址,以便在下一步中使用。
点击下一步。
为以下输入参数指定值:
存储桶网址:输入 GCS 存储桶 URI:
gs://monitoring-logs-export/- 将
monitoring-logs-export替换为您的 GCS 存储桶名称。
- 将
来源删除选项:根据您的偏好选择删除选项:
- 永不:永不删除转移后的任何文件(建议用于测试)。
- 删除已转移的文件:在成功转移后删除文件。
删除已转移的文件和空目录:在成功转移后删除文件和空目录。
文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
资产命名空间:资产命名空间。
注入标签:要应用于此 Feed 中事件的标签。
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
向 Google SecOps 服务账号授予 IAM 权限
Google SecOps 服务账号需要对您的 GCS 存储桶具有 Storage Object Viewer 角色。
使用 Google Cloud 控制台
- 前往 Cloud Storage > 存储分区。
- 点击相应存储桶的名称(例如
monitoring-logs-export)。 - 前往权限标签页。
- 点击授予访问权限。
- 提供以下配置详细信息:
- 添加主账号:粘贴 Google SecOps 服务账号电子邮件地址。
- 分配角色:选择 Storage Object Viewer。
- 点击保存。
使用 gcloud 命令行工具
或者,使用
gcloud命令授予权限:gcloud storage buckets add-iam-policy-binding gs://monitoring-logs-export \ --member="serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL" \ --role="roles/storage.objectViewer"- 替换:
monitoring-logs-export:您的存储桶名称。SECOPS_SERVICE_ACCOUNT_EMAIL:Google SecOps 服务账号电子邮件地址。
- 替换:
使用 gsutil 命令行工具(旧版)
向 SecOps 服务账号授予读取目标存储桶中对象所需的权限:
gsutil iam ch serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL:objectViewer \ gs://monitoring-logs-export
验证权限
如需验证权限是否已正确授予,请执行以下操作:
gcloud storage buckets get-iam-policy gs://monitoring-logs-export \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectViewer"您应该会在输出中看到 Google SecOps 服务账号电子邮件地址。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| jsonPayload.type_1 | additional.fields.jsonPayload_type_1 | 直接复制值 |
| jsonPayload.debugInfo | additional.fields.number | 使用 Grok 模式从 jsonPayload.debugInfo 中提取 |
| jsonPayload.scheduledTime、receiveTimestamp、timestamp | metadata.event_timestamp | 如果 jsonPayload.scheduledTime 不为空,则使用该值;否则,如果 receiveTimestamp 不为空,则使用该值;否则,如果时间戳不为空,则使用该值(使用日期匹配进行转换) |
| event_type | metadata.event_type | 如果 event_type 不为空,则使用 event_type 中的值,否则设置为“GENERIC_EVENT” |
| insertId | metadata.product_log_id | 直接复制值 |
| jsonPayload.targetType | network.application_protocol | 直接复制值 |
| httpRequest.status | network.http.response_code | 转换为整数 |
| resource.labels.location | principal.location.name | 直接复制值 |
| jsonPayload.jobName | principal.url | 直接复制值 |
| jsonPayload.status | security_result.action | 如果 jsonPayload.status == "PERMISSION_DENIED",则设置为“BLOCK” |
| 和程度上减少 | security_result.severity | 如果严重程度 =~ (?i)INFO,则设置为 INFORMATIONAL;如果严重程度 ==“LOW”,则设置为 LOW;如果严重程度 ==“MEDIUM”,则设置为 MEDIUM;如果严重程度 ==“HIGH”,则设置为 HIGH;如果严重程度 ==“VERY-HIGH”,则设置为 CRITICAL |
| jsonPayload.debugInfo | security_result.summary | 使用 Grok 模式从 jsonPayload.debugInfo 中提取 |
| logName | src.url | 直接复制值 |
| resource.labels.project_id | target.resource.attribute.labels.project_id | 直接复制值 |
| resource.labels.job_id | target.resource.attribute.labels.resource_labels_job_id | 直接复制值 |
| resource.type | target.resource.resource_subtype | 直接复制值 |
| jsonPayload.url | target.url | 直接复制值 |
| metadata.product_name | 设置为“Gcp_monitoring_alerts” | |
| metadata.vendor_name | 设置为“GCP_MONITORING_ALERTS” |
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。