通过防火墙政策规则日志记录,您可以审核、验证和分析防火墙规则所带来的影响。例如,您可以确定用于拒绝流量的防火墙规则是否如期发挥作用。如果您需要确定某特定防火墙规则影响的连接数,日志记录功能也十分有用。
了解如何为 Virtual Private Cloud (VPC) 防火墙规则启用和停用防火墙政策规则日志记录。如需了解防火墙政策规则的日志记录,请参阅使用分层防火墙政策和规则。
您还可以了解如何查看生成的日志。如需详细了解所记录的内容、日志记录示例和日志格式,请参阅防火墙政策规则日志记录概览。
如果您对某防火墙规则启用了日志记录,则可以通过“防火墙数据分析”查看针对该规则的数据分析和建议。如需了解详情,请参阅 Network Intelligence Center 文档中的防火墙数据分析。
权限
如需修改防火墙规则或访问日志,IAM 主账号需要具备以下角色之一。
| 任务 | 所需角色 |
|---|---|
| 创建、删除或更新防火墙规则 | 项目所有者或编辑者,或者安全管理员角色 (roles/compute.securityAdmin)
|
| 查看日志 | 项目所有者、编辑者或查看者,或者日志查看者角色 (roles/logging.viewer)
如需详细了解 Logging IAM 角色和权限,请参阅 Logging 访问权限控制指南。 |
启用和停用防火墙政策规则日志记录
创建防火墙规则时,您可以为该防火墙规则启用日志记录。 如需了解详情,请参阅创建防火墙规则。
如需对现有防火墙规则启用或停用防火墙政策规则日志记录,请按照以下说明操作。启用日志记录后,您可以控制是否包括元数据字段。如果省略,则可以节省存储费用。
启用防火墙政策规则日志记录
控制台
在 Google Cloud 控制台中,前往防火墙政策页面。
在日志列中,确定为每个防火墙规则启用还是停用防火墙日志记录。
如需为一个或多个防火墙规则启用日志记录,请选中要更新的每个规则旁边的复选框。
在 VPC 防火墙规则操作栏中,点击配置日志。
在配置日志对话框中,选择开启。
如需省略元数据字段,请展开显示日志详细信息,然后清除包括元数据复选框。
点击 Save configuration(保存配置)。
gcloud
gcloud compute firewall-rules update RULE_NAME \
--enable-logging \
--logging-metadata=LOGGING_METADATA
请替换以下内容:
RULE_NAME:防火墙规则的名称。LOGGING_METADATA:指定防火墙政策规则日志记录是否将元数据字段包括在防火墙规则日志中。只有在启用了日志记录的情况下,您才能配置此字段。值必须为exclude-all或include-all。默认包括元数据字段。
如需了解详情,请参阅 SDK 参考文档。
Terraform
您可以使用 Terraform 资源创建启用日志记录的防火墙规则。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
API
为现有防火墙规则启用防火墙政策规则日志记录。
PATCH https://compute.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-all或include-all。默认包括元数据字段。
如需了解详情,请参阅 firewalls.patch 方法。
停用防火墙政策规则日志记录
控制台
在 Google Cloud 控制台中,前往防火墙政策页面。
在日志列中,确定为每个防火墙规则启用还是停用防火墙日志记录。
如需为一个或多个防火墙规则停用日志记录,请选中要更新的每个规则旁边的复选框。
在 VPC 防火墙规则操作栏中,点击配置日志。
在配置日志对话框中,选择关闭,然后点击保存配置。
gcloud
gcloud compute firewall-rules update RULE_NAME \
--no-enable-logging
将 RULE_NAME 替换为防火墙规则的名称。
API
为现有防火墙规则停用防火墙政策规则日志记录。
PATCH https://compute.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 网络。防火墙规则日志存储在该宿主项目中。
如需查看防火墙规则日志,请使用 Google Cloud 控制台的日志浏览器部分。
下列查询展示了如何搜索特定防火墙事件。
查看所有防火墙日志
如需查看防火墙日志,请执行选项 1 或选项 2。
选项 1
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击资源。
在选择资源列表中,点击子网,然后点击应用。
点击日志名称,然后在列表中选择防火墙。
点击应用。
选项 2
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击查询。
如果您在查询窗格中没有看到查询编辑器字段,请点击显示查询切换开关。
将以下内容粘贴到查询窗格的查询编辑器字段中。请将
PROJECT_ID替换为您的项目 ID。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
点击运行查询。
查看特定子网的日志
如需查看特定子网的防火墙日志,请执行选项 1 或选项 2。
选项 1
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击资源。
在选择资源列表中,点击子网。
选择要查看其日志的子网,然后点击应用。
点击日志名称,然后在列表中选择防火墙。
点击应用。
选项 2
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击查询。
如果您在查询窗格中没有看到查询编辑器字段,请点击显示查询切换开关。
将以下内容粘贴到查询窗格的查询编辑器字段中。将
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 或选项 2。
选项 1
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击资源。
在选择资源列表中,点击虚拟机实例。
选择要查看其日志的实例,然后点击应用。
点击日志名称,然后在列表中选择防火墙。
点击应用。
选项 2
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击查询。
如果您在查询窗格中没有看到查询编辑器字段,请点击显示查询切换开关。
将以下内容粘贴到查询窗格的查询编辑器字段中。将
PROJECT_ID替换为您的项目 ID,将INSTANCE_ID替换为要查看其日志的虚拟机的 ID。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall" jsonPayload.instance.vm_name="INSTANCE_ID"
点击运行查询。
查看来自特定国家/地区的连接的日志
如需查看特定国家/地区的防火墙日志,请执行以下操作:
在 Google Cloud 控制台中,前往 Logs Explorer 页面。
点击查询。
如果您在查询窗格中没有看到查询编辑器字段,请点击显示查询切换开关。
将以下内容粘贴到查询窗格的查询编辑器字段中。将
PROJECT_ID替换为您的项目 ID,将COUNTRY替换为采用 ISO 3166-1alpha-3 标准的编码。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall" jsonPayload.remote_location.country=COUNTRY
导出日志
如需导出防火墙规则日志,请参阅配置和管理接收器。
您可以使用示例查询来缩小所导出日志的范围。
交互表
- 如果是虚拟机之间的通信,则两个虚拟机都可能生成日志记录,具体取决于其各自的防火墙规则。
- 如果防火墙允许初始数据包,则记录的连接包含双向流动的数据包。
- 对于给定的虚拟机,系统会根据该虚拟机上配置的防火墙规则来匹配传入连接,并会根据该虚拟机上配置的出站防火墙规则来匹配传出连接。
- 对于与设有“允许并进行日志记录”的防火墙规则相匹配的被允许的连接,系统仅记录一次。即使连接持续,系统也不会每 5 秒钟重复记录一次日志条目。
- 如果某个被拒的连接与设有“拒绝并进行日志记录”的防火墙规则相匹配,那么只要这一被拒的连接中存在数据包,系统就会每 5 秒钟重复记录一次日志条目。
- 如果您对与已活跃的 TCP 或 UDP 连接相匹配的防火墙规则启用日志记录,系统不会生成新的日志条目。仅当连接保持空闲状态至少 10 分钟,且通过同一连接发送新数据包时,才会创建日志条目。对于空闲时间段短于 10 分钟的持续流量,系统只会为连接生成一条日志条目。
下表介绍了单个虚拟机的防火墙日志记录行为。
如果 VM1 具有入站规则 R1 和出站规则 R2,且它们均与数据包匹配,则防火墙日志记录的行为如下所示:
| VM1 具有入站规则 R1(匹配数据包) | VM1 具有出站规则 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 秒钟重复记录一次同一五元组。