收集 Google Cloud 计算日志

支持的语言:

本文档介绍了如何使用 Cloud Storage 将 Google Cloud 计算日志导出到 Google Security Operations。解析器会提取字段、对消息字段进行标准化处理,并将提取的数据映射到统一数据模型 (UDM) 架构,以实现一致的安全事件表示。它可处理各种日志格式,包括类似 syslog 的消息和键值对,并根据提取的字段(例如 typeaction)对事件进行分类。

准备工作

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

  • Google SecOps 实例。
  • 计算已在您的 Google Cloud 环境中设置并处于有效状态。
  • 对 Google Cloud的特权访问权限。

创建 Google Cloud Storage 存储分区

  1. 登录 Google Cloud 控制台
  2. 前往 Cloud Storage 存储分区页面。

    进入“存储桶”

  3. 点击创建

  4. 创建存储桶页面上,输入您的存储桶信息。完成以下每一步后,点击继续以继续执行后续步骤:

    1. 开始使用部分中,执行以下操作:

      1. 输入符合存储桶名称要求的唯一名称,例如 compute-logs
      2. 如需启用分层命名空间,请点击展开箭头以展开优化文件导向型和数据密集型工作负载部分,然后选择在此存储桶上启用分层命名空间

        1. 如需添加存储桶标签,请点击展开箭头以展开标签部分。
        2. 点击添加标签,然后为标签指定键和值。
    2. 选择数据存储位置部分中,执行以下操作:

      1. 选择位置类型

        1. 使用位置类型菜单选择一个位置,用于永久存储存储桶中的对象数据。
        1. 如需设置跨存储桶复制,请展开设置跨存储桶复制部分。
    3. 为数据选择一个存储类别部分中,为存储桶选择默认存储类别,或者选择 Autoclass 对存储桶数据进行自动存储类别管理。

    4. 选择如何控制对对象的访问权限部分中,选择强制执行禁止公开访问,然后为存储桶对象选择访问权限控制模型

    5. 选择如何保护对象数据部分中,执行以下操作:

      1. 数据保护下,选择您要为存储桶设置的任何选项。
      2. 如需选择对象数据的加密方式,请点击标有数据加密的展开箭头,然后选择数据加密方法
  5. 点击创建

配置 Google Cloud 计算日志导出

  1. Google Cloud 控制台中,前往 Logging > 日志路由器
  2. 点击创建接收器
  3. 提供以下详细信息:

    • 接收器名称:提供一个有意义的名称,例如 Compute-Logs-Sink
    • 接收器目标位置:选择 Cloud Storage。
    • Sink Destination:选择 Cloud Storage 并输入存储桶 URI,例如 gs://<your-bucket-name>/compute-logs
    • 日志过滤条件:设置过滤条件以捕获 Google Cloud 计算日志,如下所示:

      • 日志名称和类型:

        logName="*compute*"
        
      • 与网络相关的字段(例如 IP 地址、端口):

        jsonPayload.connection.dest_ip="*" OR jsonPayload.connection.src_ip="*"
        
      • 实例详情:

        jsonPayload.dest_instance.project_id="*"
        jsonPayload.src_instance.project_id="*"
        
      • 与安全相关的详细信息:

        jsonPayload.rule_details.action="ALLOW" OR jsonPayload.rule_details.action="BLOCK"
        
  4. 点击创建

为 Cloud Storage 配置权限

  1. 依次前往 IAM > IAM 和管理 > 服务账号
  2. 找到 Cloud Logging 服务账号;例如,service-account@logging.iam.gserviceaccount.com。
  3. 为该服务账号授予对相应存储桶的 roles/storage.admin 角色。

设置 Feed

您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:

  • SIEM 设置 > Feed
  • 内容中心 > 内容包

通过“SIEM 设置”>“Feed”设置 Feed

如需配置 Feed,请按以下步骤操作:

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称,例如 Google Cloud Compute Logs
  5. 选择 Google Cloud Storage 作为来源类型
  6. 选择 GCP Compute 作为日志类型
  7. 点击获取服务账号作为 Chronicle 服务账号
  8. 点击下一步
  9. 为以下输入参数指定值:

    • 存储桶 URIgs://my-bucket/<value> 格式的 Google Cloud 存储桶网址。
    • URI Is A:选择目录(包括子目录)
    • 来源删除选项:根据您的偏好设置选择删除选项。

  10. 点击下一步

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

设置来自内容中心的 Feed

为以下字段指定值:

  • 存储桶 URIgs://my-bucket/<value> 格式的 Google Cloud 存储桶网址。
  • URI Is A:选择目录(包括子目录)
  • 来源删除选项:根据您的偏好设置选择删除选项。

高级选项

  • Feed 名称:用于标识 Feed 的预填充值。
  • 来源类型:用于将日志收集到 Google SecOps 中的方法。
  • 资源命名空间:与 Feed 关联的命名空间。
  • 提取标签:应用于相应 Feed 中所有事件的标签。

UDM 映射表

日志字段 UDM 映射 逻辑
addr read_only_udm.principal.ip 如果该字段不为空或不为“?”,则合并到主 IP 地址列表中。
jsonPayload.connection.dest_ip read_only_udm.target.ip 如果该字段存在,则合并到目标 IP 地址列表中。
jsonPayload.connection.dest_port read_only_udm.target.port 转换为字符串,然后转换为整数,如果在转换过程中未发生错误,则进行映射。
jsonPayload.connection.protocol read_only_udm.network.ip_protocol 转换为字符串,然后转换为整数。用于使用查找表确定 IP 协议(TCP、UDP 等),并在转换期间未发生错误时进行映射。
jsonPayload.connection.src_ip read_only_udm.principal.ip 如果该字段存在,则合并到主 IP 地址列表中。
jsonPayload.connection.src_port read_only_udm.principal.port 转换为字符串,然后转换为整数,如果在转换过程中未发生错误,则进行映射。
jsonPayload.dest_instance.project_id read_only_udm.target.resource.product_object_id 如果 jsonPayload.dest_vpc.project_id 存在,则有条件地进行映射。
jsonPayload.dest_instance.region read_only_udm.target.location.name 如果 jsonPayload.dest_vpc.project_id 存在,则有条件地进行映射。
jsonPayload.dest_instance.vm_name read_only_udm.target.resource.attribute.cloud.project.name 如果 jsonPayload.dest_vpc.project_id 存在,则有条件地进行映射。
jsonPayload.dest_instance.zone read_only_udm.target.resource.attribute.cloud.availability_zone 如果 jsonPayload.dest_vpc.project_id 存在,则有条件地进行映射。
jsonPayload.dest_vpc.project_id read_only_udm.target.cloud.vpc.product_object_id 用作映射相关字段的条件。
jsonPayload.dest_vpc.subnetwork_name read_only_udm.target.cloud.vpc.name 如果 jsonPayload.dest_vpc.project_id 存在,则有条件地进行映射。
jsonPayload.instance.project_id read_only_udm.target.resource.product_object_id 如果 jsonPayload.instance.project_id 存在,则有条件地进行映射。
jsonPayload.instance.region read_only_udm.target.location.name 如果 jsonPayload.instance.project_id 存在,则有条件地进行映射。
jsonPayload.instance.vm_name read_only_udm.target.resource.attribute.cloud.project.name 如果 jsonPayload.instance.project_id 存在,则有条件地进行映射。
jsonPayload.instance.zone read_only_udm.target.resource.attribute.cloud.availability_zone 如果 jsonPayload.instance.project_id 存在,则有条件地进行映射。
jsonPayload.message read_only_udm.metadata.product_event_type, read_only_udm.principal.application, read_only_udm.target.process.pid, read_only_udm.target.user.userid, read_only_udm.principal.hostname, read_only_udm.target.process.command_line, read_only_udm.security_result.description, read_only_udm.principal.process.file.full_path 根据 Grok 模式和条件逻辑进行解析并映射到不同的字段。
jsonPayload.rule_details.action read_only_udm.security_result.action 用于确定安全结果操作 (ALLOW/BLOCK) 并进行映射。
jsonPayload.rule_details.direction read_only_udm.network.direction 用于确定网络方向(入站/出站/未知方向)并进行映射。
jsonPayload.rule_details.priority read_only_udm.security_result.priority_details 如果转换期间未发生错误,则转换为字符串并进行映射。
jsonPayload.rule_details.reference read_only_udm.security_result.rule_labels.value 映射到规则标签值。
jsonPayload.src_instance.project_id read_only_udm.principal.resource.product_object_id 如果 jsonPayload.src_vpc.project_id 存在,则有条件地映射。
jsonPayload.src_instance.region read_only_udm.principal.location.name 如果 jsonPayload.src_vpc.project_id 存在,则有条件地映射。
jsonPayload.src_instance.vm_name read_only_udm.principal.resource.attribute.cloud.project.name 如果 jsonPayload.src_vpc.project_id 存在,则有条件地映射。
jsonPayload.src_instance.zone read_only_udm.principal.resource.attribute.cloud.availability_zone 如果 jsonPayload.src_vpc.project_id 存在,则有条件地映射。
jsonPayload.src_vpc.project_id read_only_udm.principal.cloud.vpc.product_object_id 用作映射相关字段的条件。
jsonPayload.src_vpc.subnetwork_name read_only_udm.principal.cloud.vpc.name 如果 jsonPayload.src_vpc.project_id 存在,则有条件地映射。
jsonPayload.vpc.project_id read_only_udm.target.cloud.vpc.product_object_id 如果 jsonPayload.vpc.project_id 存在,则有条件地进行映射。
jsonPayload.vpc.subnetwork_name read_only_udm.target.cloud.vpc.name 如果 jsonPayload.vpc.project_id 存在,则有条件地进行映射。
logName read_only_udm.security_result.category_details 直接映射。
resource.labels.instance_id read_only_udm.principal.resource.product_object_id, read_only_udm.principal.asset_id 有条件地映射。如果类型为“PROCTITLE”,则用于构建资产 ID。
resource.labels.location read_only_udm.principal.location.name 如果字段存在,则有条件地映射。
resource.labels.project_id read_only_udm.metadata.product_deployment_id 如果字段存在,则有条件地映射。
resource.labels.zone read_only_udm.principal.resource.attribute.cloud.availability_zone 如果字段存在,则有条件地映射。
resource.type read_only_udm.metadata.event_type 用于确定事件类型并进行映射。
时间戳 read_only_udm.metadata.event_timestamp 直接映射。
类型 read_only_udm.metadata.product_event_type、read_only_udm.metadata.event_type、read_only_udm.extensions.auth.type 用于确定事件类型、产品事件类型和身份验证类型,并相应地进行映射。
read_only_udm.metadata.event_type 该逻辑会根据“type”字段和其他条件设置事件类型。如果未找到特定匹配项,则默认为“GENERIC_EVENT”。
read_only_udm.metadata.log_type 常量值“GCP_COMPUTE”。
read_only_udm.metadata.vendor_name 常量值“Google Cloud Platform”。
read_only_udm.metadata.product_name 常量值“Google Cloud Platform”。
read_only_udm.security_result.rule_labels.key 常量值“Reference”。
read_only_udm.target.cloud.vpc.resource_type 如果存在 jsonPayload.instance.project_id 或 jsonPayload.dest_vpc.project_id,则有条件地设置为“VPC_NETWORK”。
read_only_udm.target.resource.attribute.cloud.environment 如果存在 jsonPayload.instance.project_id、jsonPayload.dest_vpc.project_id 或 jsonPayload.src_vpc.project_id,则有条件地设置为“GOOGLE_CLOUD_PLATFORM”。
read_only_udm.principal.administrative_domain 从“kv_data”字段中提取的“账号网域”字段映射而来。
read_only_udm.principal.user.user_display_name 从“kv_data”字段提取的“账号名称”字段映射而来。
read_only_udm.target.resource.name 从“kv_data”字段提取的“对象名称”字段映射而来。
read_only_udm.target.resource.type 从“kv_data”字段中提取的“对象类型”字段映射而来。
read_only_udm.principal.process.pid 从“kv_data”字段中提取的“进程 ID”字段映射而来。
read_only_udm.target.user.windows_sid 从“kv_data”字段中提取的“安全 ID”字段映射而来。
read_only_udm.network.session_id 从“auid”字段映射。

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