收集 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 控制台

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

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

使用 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 提醒活动相关的日志,例如提醒政策管理的审核日志。

创建日志接收器

  1. Google Cloud 控制台中,依次前往 Logging > 日志路由器
  2. 点击创建接收器
  3. 提供以下配置详细信息:
    • 接收器名称:输入一个描述性名称(例如 monitoring-alerts-to-gcs)。
    • 接收器说明:可选说明。
  4. 点击下一步
  5. 选择接收器服务部分中:
    • 接收器服务:选择 Cloud Storage 存储桶
    • 选择 Cloud Storage 存储桶:从列表中选择存储桶(例如 monitoring-logs-export)。
  6. 点击下一步
  7. 选择要包含在接收器中的日志部分,输入过滤查询,以选择要导出的日志。

    • Cloud Monitoring 审核日志的过滤条件示例

      protoPayload.serviceName="monitoring.googleapis.com"
      logName:"cloudaudit.googleapis.com/activity"
      
    • 基于日志的提醒政策触发器的过滤条件示例

      如果您想导出触发基于日志的提醒政策的基础日志,请使用与这些特定日志匹配的过滤条件。例如:

      severity >= ERROR
      resource.type="gce_instance"
      
  8. 点击下一步

  9. 可选:根据需要配置排除项过滤条件。

  10. 点击创建接收器

将日志数据路由到 Cloud Storage 存储分区的新接收器可能需要几个小时才能开始路由日志条目。路由的日志条目每小时向 Cloud Storage 存储分区保存一批。第一批条目可能需要 2 到 3 个小时才会开始显示。

检索 Google SecOps 服务账号

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

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

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

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

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

  9. 点击下一步

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

    • 存储桶网址:输入 GCS 存储桶 URI:

      gs://monitoring-logs-export/
      
      • monitoring-logs-export 替换为您的 GCS 存储桶名称。
    • 来源删除选项:根据您的偏好选择删除选项:

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

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

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

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

  11. 点击下一步

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

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

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

使用 Google Cloud 控制台

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

使用 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 专业人士的解答。