收集 Cloud Compute 日志

支持的平台:

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

准备工作

  • 确保您拥有 Google SecOps 实例。
  • 确保在您的 Google Cloud 环境中设置了 Compute 并使其处于活动状态。
  • 确保您拥有对 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 > Log Router
  2. 点击创建接收器
  3. 提供以下详细信息:

    • 接收器名称:提供一个有意义的名称;例如 Compute-Logs-Sink
    • 接收器目标位置:选择 Cloud Storage。
    • 接收器目标位置:选择 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 角色。

在 Google SecOps 中配置 Feed 以提取 Google Cloud 计算日志

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

    • 存储分区 URI: Google Cloud 采用 gs://my-bucket/<value> 格式的存储分区网址。
    • URI 类型:选择包含子目录的目录
    • 来源删除选项:根据您的偏好选择删除选项。

    • 资源命名空间资源命名空间

    • 提取标签:应用于此 Feed 中事件的标签。

  9. 点击下一步

  10. 最终确定界面中查看新的 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 用于确定安全结果操作(允许/屏蔽)并进行映射。
jsonPayload.rule_details.direction read_only_udm.network.direction 用于确定网络方向(INBOUND/OUTBOUND/UNKNOWN_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”字段中提取的“Account Name”(账号名称)字段映射而来。
read_only_udm.target.resource.name 从“kv_data”字段中提取的“Object Name”字段映射而来。
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”字段映射而来。

变化

2024-06-18

增强功能

  • 将“file”映射到“principal.file.names”。
  • 将“function”映射到“principal.resource.attribute.labels”。
  • 将“line”映射到“principal.resource.attribute.labels”。
  • 将“timestamp”映射到“event_timestamp”。

2023-02-24

bug 修复

  • 添加了“asset_id”的映射,以便在界面中进行搜索:“asset:resource.labels.instance_id”已映射到“principal.asset_id”

2022-06-16

增强功能

  • 为以下新字段添加了映射:将 jsonPayload.Message 映射为 syslog。
  • 将进程名称更改为 principal.application。
  • 将进程 ID 设置为 principal.process.pid。
  • 将账号网域更改为 principal.administrative_domain。
  • 将“账号名称”更改为“principal.user.user_display_name”。
  • 将对象名称更改为 target.resource.name。
  • 将对象类型更改为 target.resource.type。
  • 将安全 ID 更改为 target.user.windows_sid。
  • addr 为 principal.ip。
  • auid 更改为 network.session_id。
  • 将 Linux 日志的“LINUX - %{type}”和 Windows 日志的“WINDOWS event log”映射到 metadata.product_event_type。
  • pid 为 target.process.pid。
  • acct 更改为 target.user.userid。
  • exe 更改为 target.process.command_line。
  • 将 file_path 更改为 principal.process.file.full_path。
  • 将 desc 的映射从 metadata.description 更改为 security_result.description。

2022-05-23

增强功能

  • 添加了以下新字段的映射:
  • jsonPayload.message 作为 syslog。
  • resource.labels.zone 更改为 principal.resource.attribute.cloud.availability_zone。
  • resource.labels.location 更改为 principal.location.name。
  • resource.labels.project_id 更改为 metadata.product_deployment_id。
  • resource.labels.instance_id 更改为 principal.resource.product_object_id。

需要更多帮助?向社区成员和 Google SecOps 专业人士寻求解答。