收集 Google Cloud 计算日志
本文档介绍了如何使用 Cloud Storage 将 Google Cloud Compute 日志导出到 Google Security Operations。解析器会提取字段、对消息字段进行归一化处理,并将提取的数据映射到统一数据模型 (UDM) 架构,以实现一致的安全事件表示。它可处理各种日志格式,包括类似 syslog 的消息和键值对,并根据提取的字段(例如 type 和 action)对事件进行分类。
准备工作
确保您满足以下前提条件:
- Google SecOps 实例。
- 计算已在您的 Google Cloud 环境中设置并处于有效状态。
- 对 Google Cloud的特权访问权限。
创建 Google Cloud Storage 存储分区
- 登录 Google Cloud 控制台。
前往 Cloud Storage 存储分区页面。
点击创建。
在创建存储桶页面上,输入您的存储桶信息。完成以下每一步后,点击继续以继续执行后续步骤:
在开始使用部分中,执行以下操作:
- 输入符合存储桶名称要求的唯一名称,例如 compute-logs。
如需启用分层命名空间,请点击展开箭头以展开优化文件导向型和数据密集型工作负载部分,然后选择在此存储桶上启用分层命名空间。
- 如需添加存储桶标签,请点击展开箭头以展开标签部分。
- 点击添加标签,然后为标签指定键和值。
在选择数据存储位置部分中,执行以下操作:
选择位置类型。
- 使用位置类型菜单选择一个位置,用于永久存储存储桶中的对象数据。
- 如需设置跨存储桶复制,请展开设置跨存储桶复制部分。
在为数据选择一个存储类别部分中,为存储桶选择默认存储类别,或者选择 Autoclass 对存储桶数据进行自动存储类别管理。
在选择如何控制对对象的访问权限部分中,选择不强制执行禁止公开访问,然后为存储桶对象选择访问权限控制模型。
在选择如何保护对象数据部分中,执行以下操作:
- 在数据保护下,选择您要为存储桶设置的任何选项。
- 如需选择对象数据的加密方式,请点击标有数据加密的展开箭头,然后选择数据加密方法。
点击创建。
配置 Google Cloud 计算日志导出
- 在 Google Cloud 控制台中,依次前往 Logging > 日志路由器。
- 点击创建接收器。
- 提供以下配置详细信息:
- 接收器名称:输入一个有意义的名称(例如
Compute-Logs-Sink
)。 - 接收器目标位置:选择 Cloud Storage。
- Cloud Storage 存储桶:输入存储桶 URI(例如
gs://compute-logs/compute-logs/
)。
- 接收器名称:输入一个有意义的名称(例如
在构建包含项过滤条件部分,使用以下一种或多种模式配置日志过滤条件,以捕获 Google Cloud Compute 日志:
资源类型过滤条件(必需 - 选择一个):
对于仅限虚拟机实例的日志:
resource.type="gce_instance"
对于所有与 GCE 相关的资源(虚拟机实例、子网、防火墙):
resource.type=("gce_instance" OR "gce_subnetwork" OR "gce_network" OR "gce_firewall_rule")
特定日志类型(可选 - 根据需要添加):
对于审核日志(实例操作、配置更改):
resource.type="gce_instance" logName:"cloudaudit.googleapis.com/activity"
对于 VPC 流日志(网络流量):
resource.type="gce_subnetwork" logName:"vpc_flows"
对于防火墙日志(允许/拒绝的连接):
resource.type="gce_subnetwork" logName:"compute.googleapis.com/firewall"
对于串行控制台日志:
resource.type="gce_instance" logName:"serialconsole.googleapis.com"
与网络相关的过滤条件(可选 - 根据需要添加):
按连接详情(来源/目的地 IP、端口)过滤:
jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:*
按实例详情过滤:
jsonPayload.dest_instance.project_id:* OR jsonPayload.src_instance.project_id:*
按安全操作过滤:
jsonPayload.rule_details.action=("ALLOW" OR "BLOCK")
示例:用于全面记录 Compute 日志的完整过滤条件:
(resource.type="gce_instance" OR resource.type="gce_subnetwork") AND ( logName:"cloudaudit.googleapis.com/activity" OR logName:"vpc_flows" OR logName:"compute.googleapis.com/firewall" OR jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:* )
点击创建接收器。
为 Cloud Storage 配置权限
- 依次前往 IAM > IAM 和管理 > 服务账号。
- 找到 Cloud Logging 服务账号;例如,service-account@logging.iam.gserviceaccount.com。
- 为该服务账号授予存储桶的 roles/storage.admin 角色。
设置 Feed
您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:
- SIEM 设置 > Feed > 添加新 Feed
- 内容中心 > 内容包 > 开始
如何设置 Google Cloud 计算 Feed
- 点击 Google Cloud Compute 平台包。
- 找到 GCP Compute Feed 日志类型,然后点击添加新 Feed。
为以下字段指定值:
- 数据源类型:Google Cloud Storage V2。
- 存储分区 URI:Cloud Storage 存储桶网址;例如
gs://compute-context-logs/
。此网址必须以尾随正斜杠 (/) 结尾。 源删除选项:根据您的偏好选择删除选项。
文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
Chronicle 服务账号:复制服务账号。您需要此服务账号才能在存储桶中添加权限,以便 Google SecOps 读取或删除存储桶中的数据。
高级选项
- Feed 名称:用于标识 Feed 的预填充值。
- 资源命名空间:与 Feed 关联的命名空间。
- 提取标签:应用于相应 Feed 中所有事件的标签。
点击创建 Feed。
如需详细了解如何为相应产品系列中的不同日志类型配置多个 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 | 用于确定安全结果操作(允许/屏蔽)并进行映射。 |
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 专业人士那里获得解答。