VPC 防火墙规则概览

Virtual Private Cloud (VPC) 防火墙规则应用于给定的项目和网络。如果要将防火墙规则应用于组织中的多个 VPC 网络,请参阅防火墙政策。本页面的其余部分仅介绍 VPC 防火墙规则。

通过 VPC 防火墙规则,您可以根据自己指定的配置允许或拒绝连接传入或传出虚拟机实例。无论实例的配置和操作系统如何,无论它们是否启动,系统都始终会实施 VPC 防火墙规则来保护您的实例。

每个 VPC 网络均发挥分布式防火墙的作用。虽然防火墙规则是在网络级层上定义的,但允许或拒绝连接是按具体实例执行。您可以认为,VPC 防火墙规则不仅存在于您的实例与其他网络之间,也存在于同一网络内的各个实例之间。

如需详细了解防火墙,请参阅防火墙(计算)

Google Cloud 中的防火墙规则

创建 VPC 防火墙规则时,您需要指定 VPC 网络和一些组成部分,用于定义规则的作用。利用这些组成部分,您能够根据流量的协议、目的地端口、来源和目的地来定位某些类型的流量。如需了解详情,请参阅防火墙规则组成部分

如需创建或修改 VPC 防火墙规则,您可以使用 Google Cloud Consolegcloud 命令行工具REST API。创建或修改防火墙规则时,您可以使用规则的目标组件来指定要应用此规则的实例。

除了您创建的防火墙规则外,Google Cloud 还有其他规则可以影响传入(入站)或传出(出站)的连接:

  • Google Cloud 不允许某些 IP 协议,例如 VPC 网络内 TCP 端口 25 上的出站流量。如需了解详情,请参阅始终禁止的流量

  • Google Cloud 始终允许虚拟机实例与其对应的元数据服务器(位于 169.254.169.254)之间的通信。如需了解详情,请参阅始终允许的流量

  • 每个网络都有两条隐式防火墙规则,分别允许传出连接和禁止传入连接。您创建的防火墙规则可以覆盖这些隐式规则。

  • 默认网络预先填充了一些防火墙规则,您可以删除或修改这些规则。

规范

VPC 防火墙规则具有以下特征:

  • 每条防火墙规则均应用于传入(入站)或传出(出站)连接,但不能同时应用于两者。如需了解详情,请参阅连接方向

  • 防火墙规则支持 IPv4 连接。已启用 IPv6 的 VPC 网络也支持 IPv6 连接。按地址指定入站规则的来源或者出站规则的目的地时,可以采用 CIDR 表示法指定 IPv4 或 IPv6 地址或块。

  • 每条防火墙规则可以包含 IPv4 或 IPv6 范围,但不能同时包含两者。

  • 每条防火墙规则执行的操作均为 allowdeny 之一。只要实施了防火墙规则,该规则就会应用于连接。例如,您可以停用某一条规则,以进行问题排查。

  • 创建防火墙规则时,必须选择 VPC 网络。虽然规则是在实例级层实施,但其配置与 VPC 网络相关联。这意味着您无法在 VPC 网络之间共享防火墙规则,包括通过 VPC 网络对等互连或使用 Cloud VPN 隧道连接的网络。

  • VPC 防火墙规则是有状态的。

    • 如果允许通过任一方向的防火墙进行连接,则也允许与此连接匹配的返回流量。您不能将防火墙规则配置为拒绝关联的响应流量。
    • 返回流量必须与已接受的请求流量的 5 元组(来源 IP、目标 IP、源端口、目标端口、协议)匹配,但来源地址和目标地址以及来源端口和目标端口会被对调。
    • Google Cloud 会使用连接跟踪表,将传入数据包与相应的出站数据包相关联。
    • 无论所用协议是否支持连接,Google Cloud 都会实施连接跟踪。如果来源与目标之间(针对入站规则)或目标与目的地之间(针对出站规则)允许建立连接,只要防火墙的连接跟踪状态为活跃状态,则所有响应流量都允许通过。如果每 10 分钟至少发送一个数据包,则视为防火墙规则的跟踪状态为活跃状态。
    • 通过防火墙允许生成 ICMP 响应流量,例如,生成允许的“ICMP TYPE 3, DESTINATION UNREACHABLE”以响应允许的 TCP/UDP 连接。此行为与 RFC 792 一致。
  • VPC 防火墙规则不会重组分段的 TCP 数据包。因此,适用于 TCP 协议的防火墙规则只能应用于第一个分段,因为其中包含 TCP 标头。适用于 TCP 协议的防火墙规则不适用于后续的 TCP 分段。

  • 防火墙规则表中跟踪的最大连接数取决于实例的机器类型支持的有状态连接数。 如果超出跟踪连接数上限,则系统将停止跟踪具有最长空闲间隔的连接,以便跟踪新连接。

    实例机器类型 有状态连接的最大数量
    共享核心机器类型 130000 个
    具有 1-8 个 vCPU 的实例 每个 vCPU 130000 个连接
    具有 8 个以上 vCPU 的实例 总共 1040000 (130000×8) 个连接

隐式规则

每个 VPC 网络都有两条隐式 IPv4 防火墙规则。如果在 VPC 网络中启用了 IPv6,则该网络还具有两条隐式 IPv6 防火墙规则。这些规则不会显示在 Cloud Console 中。

隐式 IPv4 防火墙规则存在于所有 VPC 网络中,无论 VPC 网络是如何创建的,也无论 VPC 网络是自动模式还是自定义模式。默认网络具有相同的隐式规则。

  • 隐式 IPv4 允许出站流量规则。这条出站规则的操作为 allow、目的地为 0.0.0.0/0,且优先级为可能的最低优先级 (65535)。它允许任何实例向任何目的地发送流量,但不包括 Google Cloud 禁止的流量。出站访问可能受更高优先级的防火墙规则限制。如果没有其他防火墙规则拒绝出站流量,并且实例具有外部 IP 地址或使用 Cloud NAT 实例,则允许访问互联网。如需了解详情,请参阅互联网访问要求

  • 隐式 IPv4 拒绝入站流量规则。这条入站规则的操作为 deny、来源为 0.0.0.0/0,且优先级为可能的最低优先级 (65535),它通过禁止发往所有实例的连接来保护所有实例。入站访问可能会被更高优先级的规则所允许。默认网络包含的一些额外规则会替换此规则,从而允许某些类型的传入连接。

如果启用了 IPv6,则 VPC 网络还具有以下两条隐式规则:

  • 隐式 IPv6 允许出站流量规则。这条出站规则的操作为 allow、目的地为 ::/0,且优先级为可能的最低优先级 (65535)。它允许任何实例向任何目的地发送流量,但不包括 Google Cloud 禁止的流量。出站访问可能受更高优先级的防火墙规则限制。如果没有其他防火墙规则拒绝出站流量,并且实例具有外部 IP 地址,则允许访问互联网。

  • 隐式 IPv6 拒绝入站流量规则。这条入站规则的操作为 deny、来源为 ::/0,且优先级为可能的最低优先级 (65535),它通过禁止发往所有实例的连接来保护所有实例。入站访问可能会被更高优先级的规则所允许。

隐式规则不能移除,但它们有着可能限度内的最低优先级。只要您的规则具有更高的优先级(优先级数字小于 65535),您创建的规则就可以覆盖这些规则。由于 deny 规则的优先级高于同优先级的 allow 规则,因此优先级为 65535 的入站 allow 规则永远不会生效。

默认网络中预先填充的规则

默认网络预先填充了一些允许连接传入实例的防火墙规则。这些规则可以根据需要删除或修改:

  • default-allow-internal
    允许网络内实例之间的所有协议和端口的入站连接。此规则具有第二低的优先级 65534,可切实有效地允许来自同一网络中其他虚拟机实例的传入连接。 此规则允许 10.128.0.0/9 中的流量(从 10.128.0.110.255.255.254),该范围覆盖网络中的所有子网。
  • default-allow-ssh
    在 TCP 目的地端口 22 上允许任何来源与网络中的任意实例建立入站连接。此规则的优先级为 65534
  • default-allow-rdp
    在 TCP 目的地端口 3389 上允许任何来源与网络中的任意实例建立入站连接。此规则的优先级为 65534,它允许连接到运行 Microsoft 远程桌面协议 (RDP) 的实例。
  • default-allow-icmp
    允许从任何来源到网络中任意实例的 ICMP 流量。该规则的优先级为 65534,并且支持类似于 ping 的工具。

始终禁止的流量

Google Cloud 始终会禁止下表中描述的流量。您的防火墙规则不能用于允许其中任何一种流量。

始终禁止的流量 详情
除 TCP、UDP、ICMP、AH、ESP、SCTP 和 GRE 以外的协议,用于 Google Cloud 资源的外部 IP 地址 资源类型可以进一步限制协议。用于协议转发或负载平衡的转发规则只会针对已配置的协议和端口传递流量。
到 TCP 目标端口 25 (SMTP) 的出站流量 来自以下来源的流量:
• 从实例发送到互联网上的外部 IP 地址的流量
• 从实例发送到实例的外部 IP 地址的流量
到目标端口 68 的 UDP IPv4 数据包(DHCPv4 响应)和到目标端口 546 的 UDP IPv6 数据包(DHCPv6 响应) 来自元数据服务器 (169.254.169.254) 以外的来源 IP 地址的流量

始终允许的流量

Google Cloud 会在 169.254.169.254 与每个实例一起运行一个本地元数据服务器。此服务器对于实例的操作至关重要,无论您配置何种防火墙规则,实例都可以访问此服务器。元数据服务器为实例提供以下基本服务:

GKE 防火墙规则

Google Kubernetes Engine 在创建以下资源时会自动创建防火墙规则:

  • GKE 集群
  • GKE Service
  • GKE Ingress

如需了解详情,请参阅自动创建的防火墙规则

防火墙规则组件

每条防火墙规则均由以下配置组件组成:

  • 连接方向:入站规则应用于从指定来源发送到 Google Cloud 目标的传入连接,而出站规则应用于从目标发送到指定目的地的连接。

  • 数字形式的优先级,用于确定是否应用规则。仅应用其他组件与流量匹配的最高优先级(优先级编号最小)规则;优先级较低并且与此规则存在冲突的规则会被忽略。

  • 对匹配项执行的操作,要么是 allow,要么是 deny,用于确定规则是允许还是禁止连接。

  • 防火墙规则的实施状态:您可以启用和停用防火墙规则,而无需删除这些规则。

  • 一个目标,定义了哪些实例(包括 GKE 集群和 App Engine 柔性环境实例)将应用该规则。

  • 入站规则的来源过滤条件或出站规则的目的地过滤条件。

  • 协议(例如 TCP、UDP 或 ICMP)和目的地端口。

  • 布尔值日志选项,用于将与规则匹配的连接记录到 Cloud Logging 中。

组件汇总

入站规则
优先级 操作 实施 目标(用于定义目的地) 来源过滤 协议和端口
065535 的整数(含边界值);默认为 1000
allowdeny enabled(默认)或 disabled 目标参数指定目的地;目的地可以是以下项之一: 以下各项之一:
  • IPv4 地址范围
  • IPv6 地址范围
  • IPv4 地址范围以及按网络标记指定的实例
  • IPv4 地址范围以及按服务帐号指定的实例
  • IPv6 地址范围以及按网络标记指定的实例
  • IPv6 地址范围以及按服务帐号指定的实例
如果未指定来源,则使用 0.0.0.0/0 的 IPv4 范围。

指定协议,或者同时指定协议和目标端口。

如果未设置,则该规则适用于所有协议和目标端口。

出站规则
优先级 操作 实施 目标(用于定义来源) 目标过滤条件 协议和端口
065535 的整数(含边界值);默认为 1000
allowdeny enabled(默认)或 disabled 目标参数指定来源;来源可以是以下项之一:
  • VPC 网络中的所有实例
  • 通过网络标记指代的实例
  • 通过服务帐号指代的实例
您会看到下列其中一种公开范围:
  • IPv4 地址范围
  • IPv6 地址范围
如果未指定目的地,则使用 0.0.0.0/0 的 IPv4 范围。
指定协议,或者同时指定协议和目的地端口。

如果未设置,则该规则适用于所有协议和目的地端口。

流量方向

防火墙规则的方向可以是入站或出站。方向始终是从防火墙规则应用的虚拟机的角度(目标)定义。

  • 入站方向描述了从来源发送到目标的连接。入站规则适用于数据包目的地为相应目标的新会话的数据包。

  • 出站方向描述了从目标发送到目的地的流量。出站规则适用于数据包来源为相应目标的新会话的数据包。

  • 如果您未指定方向,Google Cloud 将使用入站方向。

以同一网络中两台虚拟机之间的连接为例。可以使用以下任一防火墙规则来控制从虚拟机 1 到虚拟机 2 的流量:

  • 目标为虚拟机 2 且来源为虚拟机 1 的入站规则。

  • 目标为虚拟机 1 且目的地为虚拟机 2 的出站规则。

优先级

防火墙规则优先级是一个从 065535 的整数(含边界值)。数字越小,优先级越高。如果您在创建规则时未指定优先级,系统会为其分配优先级 1000

在评估不同的防火墙规则时,防火墙规则的相对优先级决定其应用与否。评估逻辑的工作原理如下:

  • 针对给定类型的流量,在适用于目标的规则中,将应用优先级最高的规则。目标特异性并不重要。例如,如果一条针对所有目标且适用于特定目的地端口和协议的入站规则优先级较高,则它会覆盖具有类似定义且适用于相同目的地端口和协议但针对特定目标的较低优先级规则。

  • 针对给定协议和目的地端口定义,将应用优先级最高的规则,即便协议和目的地端口定义更宽泛。例如,如果一条入站规则允许发往给定目标的所有协议和目的地端口的流量,而其优先级较高,则会覆盖针对同一目标但拒绝 TCP 22 端口的优先级较低的入站规则。

  • 只有在两条规则的优先级相同时,操作为 deny 的规则才会覆盖另一条操作为 allow 的规则。使用相对优先级,可以构建覆盖 deny 规则的 allow 规则,也可以构建覆盖 allow 规则的 deny 规则。

  • 具有相同优先级和相同操作的规则具有相同的结果。但是,评估期间使用的规则是不确定的。通常,除非您启用防火墙规则日志记录,否则使用哪个规则无关紧要。如果您希望日志按照一致且明确定义的顺序显示评估的防火墙规则,请为它们分配唯一的优先级。

考虑下面的例子,其中存在两条防火墙规则:

  • 来自来源 0.0.0.0/0(任何 IPv4 地址)的入站流量规则适用于所有目标、所有协议和所有目的地端口,其操作为 deny,优先级为 1000

  • 来自来源 0.0.0.0/0(任何 IPv4 地址)的入站流量规则适用于具有标记 webserver 的特定目标,针对 TCP 80 端口上的流量,操作为 allow

第二条规则的优先级决定了针对 webserver 目标,是否允许流向端口 80 的 TCP 流量:

  • 如果第二条规则的优先级设置为大于 1000 的数字,则该规则的优先级较低,因此系统将应用拒绝所有流量的第一条规则。

  • 如果第二条规则的优先级设置为 1000,则两条规则的优先级相同,因此系统将应用拒绝所有流量的第一条规则。

  • 如果第二条规则的优先级设置为小于 1000 的数字,则该规则的优先级较高,因此允许 TCP 80 端口上发送到 webserver 目标的流量。如果没有其他规则,第一条规则仍会拒绝发送到 webserver 目标的其他类型的流量,以及发送到不带 webserver 标记的实例的所有流量(包括 TCP 80 端口上的流量)。

前面的示例演示了如何使用优先级来创建选择性的 allow 规则和全局 deny 规则,以实现最小权限最佳安全做法。

对匹配项执行的操作

防火墙规则的操作组件会根据该规则的其他组件来确定是允许还是禁止流量:

  • allow 操作允许与其他指定组件匹配的连接。

  • deny 操作禁止与其他指定组件匹配的连接。

实施

您可以通过将一条防火墙规则的状态设置为 enableddisabled,更改是否实施该防火墙规则。在问题排查或者向实例授予临时访问权限时,停用规则非常有用。停用规则、执行测试,然后重新启用规则,这要比删除然后再重新创建规则容易得多。

除非您另行指定,否则所有防火墙规则在创建后都会设为 enabled 状态。您也可以选择在创建规则时将其指定为 disabled 状态。

您可以通过更新规则,将防火墙规则的实施状态在 enableddisabled 之间切换。

更改防火墙规则的实施状态后,更改仅会应用到新连接。现有连接不受实施状态更改的影响。

在如下情况中,应考虑停用防火墙规则:

  • 问题排查:如果您不确定一条防火墙规则是否确实起到了禁止或允许流量的作用,可以暂时停用该规则,以确定其是否确实发挥了作用。在对一条规则与其他规则结合使用所产生的效果进行问题排查时,这种做法非常有用。
  • 维护:停用防火墙规则可以使定期维护更简单。假设您的防火墙规则会禁止发往目标(例如,目标标记所指代的实例)的传入 SSH 流量,并且该规则处于 enabled 状态。在您需要执行维护工作时,您可以停用该规则。完成维护工作后,再次启用该规则。

来源、目的地、目标

您可以根据所创建防火墙的方向来指定来源或目的地(但不能同时指定这两者)。目标参数的含义因防火墙规则的方向而异。

  • 对于入站规则,目标参数指定了流量的目的地实例;您不能使用目的地参数。您可以使用来源参数指定来源。

  • 对于出站规则,目标参数指定了流量的来源实例;您不能使用来源参数。您可以使用目的地参数指定目的地。

实例还包括 GKE 集群和 App Engine 柔性环境实例。

目标参数

目标参数始终用于标识 Google Cloud 实例,但目标是流量目的地还是流量来源则取决于规则的方向,如来源、目的地、目标

您可以使用以下选项之一指定目标:

  • 网络中的所有实例:防火墙规则适用于网络中的所有实例。

  • 目标标记指代的实例:防火墙规则仅适用于具有匹配的网络标记的实例。

  • 目标服务帐号指代的实例:防火墙规则仅适用于使用特定服务帐号的实例。如需了解您可以对每项防火墙规则应用的目标服务帐号数量的上限,请参阅 VPC 配额

如需了解目标标记和目标服务帐号的优势和限制,请参阅按服务帐号过滤与按网络标记过滤

入站规则的目标和 IP 地址

无论目标是如何指定的,入站防火墙规则的目标都适用于到达 VPC 网络中某个实例的网络接口 (NIC) 的所有流量。入站防火墙规则会对目的地与如下某个 IP 地址匹配的数据包生效:

  • 分配给 VPC 网络中该实例的网络接口的主要内部 IPv4 地址。

  • VPC 网络中该实例的网络接口上的任何已配置别名 IP 范围

  • 与 VPC 网络中该实例的网络接口相关联的外部 IPv4 地址。

  • 如果在子网上配置 IPv6,则为分配给虚拟机的任何 IPv6 地址

  • 用于负载均衡或协议转发的与转发规则相关联的内部或外部 IPv4 地址(如果实例是负载均衡器的后端或协议转发的目标实例)

出站规则的目标和 IP 地址

无论目标是如何指定的,出站防火墙规则的目标都适用于从 VPC 网络中某个虚拟机实例的网络接口 (NIC) 发出的所有流量。

  • 默认情况下,停用 IP 转发。出站流量防火墙规则会对来源与以下任意一项匹配的数据包生效:

    • 实例的 NIC 的主要内部 IPv4 地址

    • 实例的 NIC 上任何已配置的别名 IP 地址范围

    • 如果在子网上配置 IPv6,则为分配给虚拟机的任何 IPv6 地址

    • 用于负载均衡或协议转发的与转发规则相关联的内部或外部 IPv4 地址(如果实例是负载均衡器的后端或协议转发的目标实例)

  • 启用 IP 转发后,虚拟机可以发送任何来源的数据包。

来源参数

来源参数仅适用于入站规则。它必须是以下各项之一:

  • 来源 IPv4 范围或来源 IPv6 范围:您可以将 IP 地址范围指定为数据包的来源。范围可以是 IPv4 或 IPv6 地址,但不能同时使用这两者。范围可以包括 VPC 网络内部和外部的地址。

  • 来源标记:您可以将数据包的来源定义为同一 VPC 网络中虚拟机实例的网络接口的主要内部 IP 地址,并通过匹配的网络标记识别这些来源实例。来源标记仅适用于通过 VPC 网络中的另一个适用实例的网络接口发送的流量。即使外部 IP 地址属于实例,来源标记也不能控制来源为该外部 IP 地址的数据包。如需了解您可以对每项防火墙规则应用的来源标记数量的上限,请参阅 VPC 资源配额

  • 来源服务帐号:您可以将数据包的来源定义为同一 VPC 网络中实例的网络接口的主要内部 IP 地址,并通过使用的服务帐号识别这些来源实例。来源服务帐号仅适用于通过 VPC 网络中的另一个适用实例的网络接口发送的流量。即使外部 IP 地址属于实例,来源服务帐号也不能控制来源为外部 IP 地址的数据包。如需了解您可以对每项防火墙规则应用的来源服务帐号数量的上限,请参阅 VPC 配额

  • 可以使用来源 IP 地址范围和来源标记的组合。

  • 可以使用来源 IP 地址范围和来源服务帐号的组合。

  • 如果将来源 IP 地址范围、来源标记和来源服务帐号全部都省略,则 Google Cloud 会将来源定义为任何 IPv4 地址 (0.0.0.0/0)。不包括 IPv6 来源。

来源和 IP 地址

如果入站防火墙规则的来源参数包含来源标记或来源服务帐号,则 Google Cloud 会识别与标记或服务帐号匹配的虚拟机,并在防火墙规则的有效来源集中包含来自这些虚拟机的以下 IP 地址。

  • VPC 网络中虚拟机网络接口 (NIC) 的主要内部 IPv4 地址

  • 分配给 VPC 网络中虚拟机 NIC 的任何 IPv6 地址

如果使用来源标记或来源服务帐号,则不包括该 NIC 的别名 IP 范围以及关联转发规则的 IP 地址。如果您需要包括虚拟机网络接口的别名 IP 地址范围,请使用来源 IPv4 范围添加别名范围。

如果防火墙规则使用来源 IP 地址范围和来源标记的组合,或者来源 IP 地址范围和来源服务帐号的组合,则有效来源集包含由标记或服务帐号标识的 IP 地址以及来源 IP 地址范围中指定的 IP 地址。

目的地参数

目的地参数仅适用于出站规则。目的地参数仅接受 IP 地址范围。范围可以包括 VPC 网络内部和外部的地址。

如果您未指定目的地范围,则 Google Cloud 会将目的地定义为所有 IPv4 地址 (0.0.0.0/0)。不包括 IPv6 目的地。

协议和端口

您可以通过指定协议或者同时指定协议和目的地端口来缩小防火墙规则的范围。您可以指定一个协议,也可以指定协议及其目的地端口的组合。如果同时省略协议和端口,防火墙规则将适用于任何协议和任何目的地端口上的所有流量。您只能指定目的地端口。系统不支持基于来源端口的规则。

为了使防火墙规则具体化,必须先指定协议。如果协议支持端口,则可以有选择地指定目的地端口号或端口范围。但并非所有协议都支持端口。例如,存在 TCP 和 UDP 端口,但不存在 ICMP 端口。(ICMP 确实具有不同的 ICMP 类型,但它们不是端口,不能在防火墙规则中指定。)

您可以在防火墙规则中使用以下协议名称:tcpudpicmp(适用于 IPv4 ICMP)、espahsctpipip。对于所有其他协议,请使用 IANA 协议编号

许多协议在 IPv4 和 IPv6 中使用相同的名称和编号,但某些协议(如 ICMP)并非如此。

防火墙规则不支持 IPv6 逐跳协议。

Google Cloud 防火墙规则使用端口信息指代数据包的目的地端口,而不是其来源端口:

  • 对于入站防火墙规则,目的地端口是由规则的目标参数标识的系统上的端口(对于入站规则,目标参数指定了流量的目的地虚拟机)。

  • 对于出站防火墙规则,目的地端口表示由规则的目的地参数标识的系统上的端口。

下表汇总了 Google Cloud 防火墙规则的有效协议和目的地端口指定组合。

指定 示例 说明
无协议和端口 - 如果未指定协议,防火墙规则适用于所有协议及其适用目的地端口。
协议 tcp 如果指定的协议不包含任何端口信息,防火墙规则适用于该协议及其所有适用端口。
协议和一个端口 tcp:80 如果指定了一个协议和一个目的地端口,防火墙规则适用于该协议的该目的地端口。
协议和端口范围 tcp:20-22 如果指定了协议和端口范围,防火墙规则适用于该协议的目的地端口范围。
组合 icmp,tcp:80
tcp:443
udp:67-69
您可以指定防火墙规则适用的多种协议和目的地端口的组合。如需了解详情,请参阅创建防火墙规则

按服务帐号过滤来源和目标

您可以使用服务帐号创建更具体的防火墙规则:

  • 对于入站和出站规则,您可以使用服务帐号指定目标。

  • 对于入站规则,您可以将传入数据包的来源指定为网络(其中的虚拟机使用特定服务帐号)中任何虚拟机的主要内部 IP 地址。

您必须先在防火墙规则所在的项目中创建服务帐号,然后再创建依赖该服务帐号的防火墙规则。尽管系统不会阻止您创建使用来自其他项目的服务帐号的规则,但是如果防火墙规则项目中不存在该服务帐号,则不会强制执行该规则。

使用服务帐号识别实例的防火墙规则会应用于使用服务帐号新建且与服务帐号关联的实例以及更改了服务帐号的现有实例。更改与实例关联的服务帐号时,您需要停止并重启实例。您可以将服务帐号与单个实例关联,也可以与代管式实例组使用的实例模板关联。

按服务帐号过滤与按网络标记过滤

本部分着重强调了在决定要使用服务帐号还是网络标记来定义目标和来源(适用于入站规则)时,需要考虑的要点。

如果您需要严格控制防火墙规则应用于虚拟机的方式,请使用目标服务帐号和来源服务帐号(而不是目标标记和来源标记):

  • 网络标记是一种任意特性。有权修改实例的任何 Identity and Access Management (IAM) 主帐号都可以将一个或多个网络标记与该实例关联。对项目具有 Compute Engine Instance Admin 角色的 IAM 主帐号具有此权限。可以修改实例的 IAM 主帐号可以更改其网络标记,这可能会更改该实例的适用防火墙规则集。

  • 服务帐号表示与实例关联的身份。一个服务帐号只能与一个实例关联。通过控制为其他 IAM 主帐号授予服务帐号用户角色这一操作,您可以控制对服务帐号的访问权限。为了让 IAM 主帐号使用服务帐号来启动实例,该主帐号必须至少使用此服务帐号的 Service Account User 角色以及创建实例的适当权限(例如,具有项目的 Compute Engine Instance Admin 角色)。

在任何防火墙规则中,都不能将服务帐号和网络标记混合搭配使用:

  • 在任何防火墙规则(入站或出站)中,都不能将目标服务帐号和目标标记一起使用。

  • 以下是您按目标标记或目标服务帐号指定目标时,对于入站防火墙规则无效的来源:

    目标 无效来源
    目标标记 来源服务帐号

    来源 IP 地址范围和来源服务帐号的组合
    目标服务帐号 来源标记

    来源 IP 地址范围和来源标记的组合

服务帐号和网络标记的操作注意事项包括:

  • 更改实例的服务帐号时,需要停止并重启实例。可以在实例运行时添加或移除标记。

  • 您可以对防火墙规则指定目标服务帐号、来源服务帐号、目标网络标记和来源网络标记数量的上限。如需了解详情,请参阅 VPC 资源配额

  • 如果通过网络标记标识实例,防火墙规则适用于实例的主要内部 IP 地址。

  • 服务帐号防火墙规则适用于 GKE 节点,而不适用于 GKE Pod。

使用场景

以下用例演示了防火墙规则的工作原理。这些示例中均启用了所有防火墙规则。

入站场景

入站防火墙规则控制从来源发送到 VPC 网络内目标实例的传入连接。入站规则的来源可以定义为以下各项之一:

  • IPv4 或 IPv6 地址范围;默认为任何 IPv4 地址 (0.0.0.0/0)
  • 您的 VPC 网络中由网络标记标识的其他实例
  • 您的 VPC 网络中由服务帐号标识的其他实例
  • 您的 VPC 网络中由 IPv4 或 IPv6 地址范围和网络标记标识的其他实例
  • 您的 VPC 网络中由 IPv4 或 IPv6 地址范围和服务帐号标识的其他实例

默认来源是任意 IPv4 地址 (0.0.0.0/0)。如果您要控制 VPC 网络之外的来源(包括互联网上的其他来源)的传入连接,请使用某个 CIDR 格式的 IP 地址范围。

操作为 allow 的入站规则会根据其他规则组件允许传入流量。除了指定规则的来源和目标之外,还可以将规则限制为仅应用于特定协议和目的地端口。同样,具有 deny 操作的入站规则可根据防火墙规则组成部分禁止传入流量,从而用于保护实例。

入站示例

下图展示了可以通过防火墙规则控制的入站连接的一些示例。这些示例在规则分配中使用目标参数将这些规则应用于特定实例。

入站防火墙规则示例(点击可放大)
入站防火墙规则示例(点击可放大)
  • 优先级为 1000 的入站规则适用于虚拟机 1。这条规则允许来自任意 IPv4 来源 (0.0.0.0/0) 的传入 TCP 流量。它允许来自 VPC 网络中其他实例的 TCP 流量,但要求其遵守适用于这些实例的相应出站流量规则。虚拟机 4 能够通过 TCP 与虚拟机 1 进行通信,因为虚拟机 4 不具有禁止此类通信的出站规则(仅隐式允许出站规则适用)。由于虚拟机 1 具有外部 IP 地址,因此这条规则还通过外部 IP 地址允许来自互联网上外部主机以及来自虚拟机 2 的传入 TCP 流量。

  • 虚拟机 2 没有指定入站防火墙规则,因此隐式拒绝入站规则会禁止所有传入流量。系统会禁止来自网络中其他实例的连接,无论其他实例的出站规则如何。由于虚拟机 2 具有外部 IP 地址,因此存在从互联网上的外部主机到该虚拟机的一条路径,但隐式拒绝规则也会拒绝外部传入流量。

  • 优先级为 1000 的入站规则适用于虚拟机 3。此规则允许来自网络中带有网络标记 client 的实例(如虚拟机 4)的 TCP 流量。系统允许虚拟机 4虚拟机 3 的 TCP 流量,因为虚拟机 4 不具有禁止此类通信的出站规则(仅隐式允许出站规则适用)。由于虚拟机 3 没有外部 IP 地址,因此没有从互联网上外部主机到此虚拟机的路径。

出站情景

出站防火墙规则控制您的 VPC 网络中目标实例的传出连接。具有 allow 操作的出站规则会根据规则的其他组成部分允许来自实例的流量。例如,您可以在指定的协议和目的地端口上,允许发送到特定目的地(例如某个 IPv4 地址范围)的出站流量。类似地,具有 deny 操作的出站规则会以规则的其他组成部分为依据禁止流量。

每条出站规则都需要一个目的地。默认目的地是任意 IPv4 地址 (0.0.0.0/0),但您可以使用 CIDR 格式的 IPv4 或 IPv6 地址范围,创建更具体的目的地。在指定 IP 地址范围时,您可以控制发送到网络中的实例以及网络外目的地(包括互联网上的目的地)的流量。

出站示例

下图展示了可以通过防火墙规则控制的出站连接的一些示例。这些示例在规则分配中使用目标参数将这些规则应用于特定实例。

出站防火墙规则示例(点击可放大)
出站防火墙规则示例(点击可放大)
  • 虚拟机 1 没有指定出站防火墙规则,因此隐式允许出站规则允许该虚拟机将流量发送到任何目的地。该规则允许与 VPC 网络中其他实例之间的连接,但要求其遵守适用于这些实例的相应入站规则。虚拟机 1 可以将流量发送到虚拟机 4,因为虚拟机 4 具有允许来自任何 IP 地址范围的传入流量的入站规则。由于虚拟机 1 具有外部 IP 地址,因此可以将流量发送到互联网上的外部主机。由于防火墙规则是有状态的,所以允许虚拟机 1 所发送流量的传入响应。

  • 优先级为 1000 的出站规则适用于虚拟机 2。此规则拒绝发往所有 IPv4 目的地 (0.0.0.0/0) 的全部传出流量。系统会禁止发送到 VPC 中其他实例的传出流量,无论适用于其他实例的入站流量规则如何。尽管虚拟机 2 具有外部 IP 地址,但此防火墙规则会禁止其发送到互联网上外部主机的传出流量。

  • 优先级为 1000 的出站规则适用于虚拟机 3。此规则禁止其出站 TCP 流量发送到 192.168.1.0/24 IP 地址范围内的任何目的地。虽然虚拟机 4 的入站规则允许所有传入流量,但虚拟机 3 仍不能向虚拟机 4 发送 TCP 流量。不过,由于出站规则仅适用于 TCP 协议,因此虚拟机 3 可不受限制地将 UDP 流量发送到虚拟机 4

    此外,虚拟机 3 可以将任意流量发送到 VPC 网络中 192.168.1.0/24 IP 地址范围以外的其他实例,前提是这些实例具有允许此类流量的入站规则。由于它没有外部 IP 地址,因此也就没有将流量发送到 VPC 网络以外的路径。

后续步骤

自行试用

如果您是 Google Cloud 新手,请创建一个帐号来评估 VPC 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 VPC