使用防火墙规则日志记录

通过防火墙规则日志记录,您可以审核、验证和分析防火墙规则所带来的影响。例如,您可以确定用于拒绝流量的防火墙规则是否如期发挥作用。如果您需要确定某特定防火墙规则影响的连接数,日志记录功能也十分有用。

本页面介绍如何为 VPC 防火墙规则启用和停用日志记录。如需查看涵盖防火墙政策规则日志记录的说明,请参阅该文档

本页面还介绍了如何查看生成的日志。如需详细了解所记录的内容、日志记录示例和日志格式,请参阅防火墙规则日志记录概览

如果您对某防火墙规则启用了日志记录,则可以通过“防火墙数据分析”查看针对该规则的数据分析和建议。如需了解详情,请参阅 Network Intelligence Center 文档中的防火墙数据分析

权限

如需修改防火墙规则或访问日志,IAM 成员需要具备以下角色之一。

任务 所需的角色
创建、删除或更新防火墙规则 项目 Owner 或 Editor 或者 Security Admin
查看日志 项目 Owner、Editor 或 Viewer 或者 Logs Viewer
如需详细了解 Logging IAM 角色和权限,请参阅 Logging 访问权限控制指南

启用和停用防火墙规则日志记录

创建防火墙规则时,可选择启用防火墙规则日志记录。如需了解详情,请参阅创建防火墙规则

如需对现有防火墙规则启用或停用防火墙规则日志记录,请按照以下说明操作。启用日志记录后,您可以控制是否包括元数据字段。如果省略,则可以节省存储费用。

启用防火墙规则日志记录

控制台

  1. 转到 Google Cloud Console 中的“防火墙”页面。
    转到“防火墙”页面
  2. 日志列中,确定为每个防火墙规则启用还是停用防火墙日志记录。
  3. 如需为一个或多个防火墙规则启用日志记录,请选中每个规则旁边的复选框。
  4. 防火墙规则操作栏中,点击配置日志
  5. 配置日志对话框中,选择开启
  6. 如需省略元数据字段,请展开日志详细信息,然后清除包括元数据
  7. 点击保存配置

gcloud

gcloud compute firewall-rules update name \
    --enable-logging
    --logging-metadata=logging_metadata

请将占位符替换为有效值:

  • name 是防火墙规则的名称。
  • logging_metadata 指定防火墙规则日志记录是否将元数据字段包括在防火墙规则日志中。只有在启用了日志记录的情况下,您才能配置此字段。值必须为 exclude-allinclude-all。默认包括元数据字段。

如需了解详情,请参阅 SDK 参考文档

API

为现有防火墙规则启用防火墙规则日志记录。

PATCH https://www.googleapis.com/compute/v1/projects/project_id/global/firewalls/rule_name
{
  "name": "rule_name,
  "logConfig": {
    "enable": true,
    "metadata": logging_metadata
  }
}

请将占位符替换为有效值:

  • project_id 是防火墙规则所在项目的 ID。
  • rule_name 是防火墙规则的名称。
  • logging_metadata 指定防火墙规则日志记录是否将元数据字段包括在防火墙规则日志中。只有在启用了日志记录的情况下,您才能配置此字段。值必须为 exclude-allinclude-all。默认包括元数据字段。

如需了解详情,请参阅 firewalls.patch 方法。

停用防火墙规则日志记录

控制台

  1. 转到 Google Cloud Console 中的“防火墙”页面。
    转到“防火墙”页面
  2. 日志列中,确定为每个防火墙规则启用还是停用防火墙日志记录。
  3. 如需为一个或多个防火墙规则停用日志记录,请选中每个规则旁边的复选框。
  4. 防火墙规则操作栏中,点击配置日志
  5. 配置日志对话框中,选择关闭,然后点击保存配置

gcloud

gcloud compute firewall-rules update name \
    --no-enable-logging

API

为现有防火墙规则启用防火墙规则日志记录。

PATCH https://www.googleapis.com/compute/v1/projects/project_id/global/firewalls/rule_name
{
  "name": "rule_name,
  "logConfig": {
    "enable": false
  }
}

请将占位符替换为有效值:

  • project_id 是防火墙规则所在项目的 ID。
  • rule_name 是防火墙规则的名称。

如需了解详情,请参阅 firewalls.patch 方法。

查看日志

防火墙规则日志是在托管网络的项目中创建的,该网络包含虚拟机实例和防火墙规则。使用共享 VPC 时,虚拟机实例会在服务项目中创建,但它们会使用宿主项目中的共享 VPC 网络。防火墙规则日志存储在该宿主项目中。

使用 Cloud Console 的“日志”部分查看防火墙规则日志。

下列过滤条件展示了如何搜索特定防火墙事件。

所有防火墙日志

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 在第一个下拉菜单中选择子网
  3. 在第二个下拉菜单中选择 compute.googleapis.com/firewall
  4. 点击确定

或者,按照如下方式操作:

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。请将 project_id 替换为您的项目 ID。
    resource.type="gce_subnetwork"
    logName="projects/project_id/logs/compute.googleapis.com%2Ffirewall"
    

特定子网

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 在第一个下拉菜单中,将光标移动到 子网,然后将其向右移动以打开单个子网选择菜单。
  3. 在第二个下拉菜单中,选择 compute.googleapis.com/firewall
  4. 点击确定

或者,按照如下方式操作:

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 project_id 替换为您的项目 ID,将 subnet_name 替换为您的子网。
    resource.type="gce_subnetwork"
    logName="projects/project_id/logs/compute.googleapis.com%2Ffirewall"
    resource.labels.subnetwork_name="subnet_name"
    

特定虚拟机

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 project_id 替换为您的项目 ID,将 instance_name 替换为您的虚拟机。
    resource.type="gce_subnetwork"
    logName="projects/project_id/logs/compute.googleapis.com%2Ffirewall"
    jsonPayload.instance.vm_name="instance_name"
    

来自特定国家/地区的连接

  1. 转到 Google Cloud Console 中的“日志”页面。
    转到“日志”页面
  2. 点击按标签过滤或搜索文字字段右侧的下拉箭头,然后选择转换为高级过滤条件
  3. 将以下内容粘贴到字段中。将 project_id 替换为您的项目 ID,并将 country 替换为 ISO 3166-1 alpha-3 代码。
    resource.type="gce_subnetwork"
    logName="projects/project_id/logs/compute.googleapis.com%2Ffirewall"
    jsonPayload.remote_location.country=country
    

导出日志

如需导出防火墙规则日志,请按照使用日志查看器导出中的说明进行操作。

您可以使用示例高级筛选条件缩小要导出的日志的范围。

交互表

  • 如果是虚拟机之间的通信,则两个虚拟机都可能生成日志记录,具体取决于其各自的防火墙规则。
  • 如果防火墙允许初始数据包,则记录的连接包含双向流动的数据包。
  • 对于给定的虚拟机,系统会根据该虚拟机上配置的防火墙规则来匹配传入连接,并会根据该虚拟机上配置的出站防火墙规则来匹配传出连接。
  • 对于与设有“允许并进行日志记录”的防火墙规则相匹配的被允许的连接,系统仅记录一次。即使连接持续,系统也不会每 5 秒钟重复记录一次日志条目。
  • 如果某个被拒的连接与设有“拒绝并进行日志记录”的防火墙规则相匹配,那么只要这一被拒的连接中存在数据包,系统就会每 5 秒钟重复记录一次日志条目。

下表介绍了单个虚拟机的防火墙日志记录行为。

如果 VM1 具有入站规则 R1 和出站规则 R2,且它们均与数据包匹配,则防火墙日志记录的行为如下所示:

VM1 具有入站规则 R1(匹配数据包) 虚拟机 1 具有出站规则 R2(匹配数据包) 连接方向 操作 日志
允许并记录 允许 入站 允许 一个日志条目:
disposition=allow, rule=R1
拒绝
允许并记录
拒绝并记录
允许 允许 入站 允许 无日志记录
拒绝
允许并记录
拒绝并记录
拒绝并记录 不适用 入站 拒绝 每 5 秒一个日志条目:
disposition=deny, rule=R1
拒绝 不适用 入站 拒绝 无日志记录
允许 允许并记录 出站 允许 一个日志条目:
disposition=allow, rule=R2
拒绝
允许并记录
拒绝并记录
允许 允许 出站 允许 无日志记录
拒绝
允许并记录
拒绝并记录
不适用 拒绝并记录 出站 拒绝 每 5 秒一个日志条目:
disposition=deny, rule=R2
拒绝 出站 拒绝 无日志记录

请注意,入站和出站是对称的。

下面是防火墙日志语义的详细说明:

  • 允许并记录(只有 TCP 和 UDP 支持日志记录)

    • 如果连接是应用了规则的方向发起的,则系统会创建一条日志记录。
    • 出于连接跟踪目的,回复流量会被允许。无论该方向的防火墙规则如何,回复流量均不会产生任何日志记录。
    • 如果防火墙导致连接过期(处于非活动状态 10 分钟或收到 TCP RST),则任一方向的其他数据包都有可能触发日志记录。
    • 日志记录基于五元组。TCP 标志不影响日志记录行为。
  • 拒绝并记录(只有 TCP 和 UDP 支持日志记录)

    • 丢弃数据包(不发起任何连接)。
    • 与唯一五元组对应的每个数据包均会被记录为一次失败的连接尝试。
    • 如果继续收到数据包,则系统会每 5 秒钟重复记录一次同一五元组。

问题排查

无法查看日志

如果您无法在 Cloud Console 中的“日志”部分查看防火墙规则日志,请检查以下内容:

可能的原因:权限不足

询问项目 Owner,确保您的 IAM 成员至少具有该项目的 Logs Viewer 角色。如需了解详情,请参阅权限
可能的原因:子网日志可能从 Logging 中被排除
在 Cloud Console 中,导航至 Logging > 日志提取,并确保 GCE 子网被排除;如果GCE 子网被部分排除,请确保该排除过滤条件应用于防火墙日志。
可能的原因:不支持旧版网络
您无法在旧版网络中使用防火墙规则日志记录。仅支持 VPC 网络
可能的原因:确保您所查看的是正确的项目
防火墙规则日志存储在包含此网络的项目中,因此必须确保在相应的项目中查找日志。使用共享 VPC 时,虚拟机实例会在服务项目中创建,但它们会使用宿主项目中的共享 VPC 网络。对于共享 VPC 场景,防火墙规则日志存储在该宿主项目中。

如果涉及到共享 VPC,则需具备适当的宿主项目权限才能查看防火墙规则日志。即使虚拟机实例本身位于服务项目中,其防火墙规则日志仍在此宿主项目中。

缺少日志条目

可能的原因:连接可能与您预期的防火墙规则不匹配

确保您预期的防火墙规则位于实例的适用防火墙规则列表中。使用 Cloud Console 查看相关实例的详细信息,然后点击其虚拟机实例详情页面上“网络接口”部分中的查看详情按钮。在其网络接口详情页面的“防火墙规则和路由详情”部分中检查适用的防火墙规则

查看防火墙规则概览,确保您已正确创建防火墙规则。

您可以在虚拟机上使用 tcpdump 来确定其发送或接收的连接是否具有与您预期的防火墙相匹配的地址、端口和协议。

可能的原因:可能适用的是某条具有更高优先级且停用了防火墙日志记录的规则

防火墙规则根据其优先级进行评估。从虚拟机实例来看,流量仅应用一条防火墙规则。

您认为具有最高优先级的适用规则可能实际上并不具备最高优先级,实际上可能适用的是某条具有更高优先级并且未启用日志记录的规则。

如需排查问题,您可以暂时对可能适用于虚拟机的所有防火墙规则启用日志记录。使用 Cloud Console 查看相关虚拟机的详细信息,然后点击其虚拟机实例详情页面上“网络接口”部分中的查看详情按钮。在其网络接口详情页面的“防火墙规则和路由详情”部分中检查适用的防火墙规则,并在该列表中识别您的自定义规则。暂时对所有自定义防火墙规则启用日志记录。

启用日志记录后,即可识别适用的规则。完成识别后,请务必对实际上无此需要的所有规则停用日志记录。

部分日志条目缺少元数据

可能的原因:配置传播延迟

如果您更新了已启用防火墙日志记录的防火墙规则,Google Cloud 可能需要几分钟才能完成所需更改的传播,以便记录与更新后的规则部分相匹配的流量日志。

后续步骤