数据包镜像

本页面简要介绍了数据包镜像。

数据包镜像会克隆 Virtual Private Cloud (VPC) 网络中特定实例的流量,并将其转发以供检查。数据包镜像可捕获所有流量和数据包数据,包括载荷和标头。捕获可配置为同时捕获出站流量和入站流量、仅捕获入站流量或仅捕获出站流量。

镜像发生在虚拟机 (VM) 实例而非网络上。因此,数据包镜像会占用虚拟机上额外的带宽。

当您需要监控和分析安全状态时,数据包镜像非常有用。它会导出所有流量,而不仅仅是采样期间的流量。例如,您可以借助用于分析镜像流量的安全软件来检测所有威胁或异常情况。此外,您还可以检查所有流量,以检测应用性能问题。如需了解详情,请参阅示例使用场景

工作原理

数据包镜像会复制来自镜像的来源的流量,并将其发送至收集器目标。如需配置数据包镜像,您需要创建用于指定来源和目标的数据包镜像政策。

  • 镜像的来源是 Compute Engine 虚拟机实例(可通过指定子网、网络标记或实例名称来进行选择)。如果您指定某个子网,则该子网中的所有现有实例及未来实例都将被镜像。您可以指定一个或多个来源类型;如果某实例与其中至少一个类型匹配,则会对其进行镜像。

    数据包镜像会从应用了数据包镜像政策的网络中的实例网络接口收集流量。如果某个实例具有多个网络接口,除非已配置允许对这些接口进行镜像的其他政策,否则不会进行此操作。

  • 收集器目标是位于内部负载均衡器后端的实例组。该实例组中的实例称为收集器实例。

    指定收集器目标时,应输入与内部直通式网络负载均衡器关联的转发规则的名称。然后,Google Cloud 会将镜像流量转发到这些收集器实例。数据包镜像的内部负载均衡器与其他内部负载均衡器类似,不同之处在于前者必须针对数据包镜像配置转发规则。发送到负载均衡器的所有非镜像的流量都会被丢弃。

过滤

默认情况下,数据包镜像会收集镜像实例的所有 IPv4 流量。您可以使用过滤条件来扩展收集的流量,以包括所有或部分 IPv6 流量,而不是收集所有 IPv4 流量。您还可以使用过滤条件来缩小镜像流量的范围,从而帮助限制镜像实例所使用的带宽。

您可以配置过滤条件,以根据协议、CIDR 范围(IPv4、IPv6 或二者)、流量方向(仅入站流量、仅出站流量或二者)或它们的组合来收集流量。

政策顺序

一个实例可以应用多项数据包镜像政策。数据包镜像政策的优先级始终为 1000 且无法更改。相同的政策不受支持。Google Cloud 可以将流量发送到已配置相同数据包镜像政策的任何负载均衡器。如需以可预测的方式持续向单个负载均衡器发送镜像流量,请创建其过滤条件的地址范围不重叠的政策。如果范围重叠,请设置唯一的过滤条件协议。

Google Cloud 会根据每项政策的过滤条件,为每个流选择一项政策。如果您有不同的政策,则 Google Cloud 会使用与镜像流量匹配的相应政策。例如,您可能有一个政策具有过滤条件 198.51.100.3/24:TCP,另一个政策具有过滤条件 2001:db8::/64:TCP:UDP。由于各项政策不同,Google Cloud 使用的政策没有歧义。

但是,如果您的政策存在重叠,Google Cloud 会评估其过滤条件以选择要使用的政策。例如,您可能有两个政策,一个具有针对 10.0.0.0/24:TCP 的过滤条件,另一个具有针对 10.0.0.0/16:TCP 的过滤条件。这些政策重叠,因为它们的 CIDR 范围重叠。

在选择政策时,Google Cloud 会通过比较政策过滤条件的 CIDR 范围大小来确定其优先级。

Google Cloud 会根据过滤条件来选择政策:

  • 如果政策具有不同的 CIDR 范围(但有所重叠)和完全相同的协议,Google Cloud 会选择 IP 地址范围最具体的政策。假设离开镜像实例的 TCP 数据包的目标为 10.240.1.4,并且存在两个具有过滤条件 10.240.1.0/24:ALL10.240.0.0/16:TCP 的政策。由于 10.240.1.4 的最具体的匹配项是 10.240.1.0/24:ALL,因此 Google Cloud 会使用具有过滤条件 10.240.1.0/24:ALL 的政策。

  • 如果政策指定的 CIDR 范围完全相同,但协议有所重叠,则 Google Cloud 会使用协议最具体的政策。例如,过滤条件 10.240.1.0/24:TCP10.240.1.0/24:ALL 范围相同,但协议重叠。对于匹配的 TCP 流量,Google Cloud 会使用 10.240.1.0/24:TCP 政策。10.240.1.0/24:ALL 政策适用于所有其他协议的匹配流量。

  • 如果政策的 CIDR 范围完全相同,但协议不同,则这些政策不会重叠。Google Cloud 会使用与镜像流量的协议相对应的政策。例如,您可能有一个针对 2001:db8::/64:TCP 的政策和一个针对 2001:db8::/64:UDP 的政策。 Google Cloud 会使用 TCP 或 UDP 政策,具体取决于镜像流量的协议。

  • 如果政策存在重叠,且具有完全相同的过滤条件,则政策完全相同。在这种情况下,每次针对这些政策重新评估匹配的流量时,Google Cloud 可能会选择相同政策或不同的政策。我们建议您避免创建相同的数据包镜像政策。

VPC 流日志

VPC 流日志不会记录镜像的数据包。如果收集器实例位于启用了 VPC 流日志的子网中,则系统会记录直接发送到该收集器实例的流量,包括来自镜像实例的流量。也就是说,如果原始目标 IPv4 或 IPv6 地址与收集器实例的 IPv4 或 IPv6 地址匹配,则系统会记录流。

如需详细了解 VPC 流日志,请参阅使用 VPC 流日志

关键属性

以下所列各项介绍了您在使用数据包镜像之前,需要了解的相关限制或行为:

  • 每个数据包镜像政策定义了镜像来源和一个收集器目标。您必须遵循以下规则:

    • 所有镜像来源必须位于同一个项目、VPC 网络和 Google Cloud 区域中。
    • 收集器目标必须与镜像来源位于同一区域。收集器目标可以与镜像来源位于同一 VPC 网络中,也可以使用 VPC 网络对等互连连接到镜像来源网络的 VPC 网络。
    • 每个镜像政策只能引用一个收集器目标。但是,多个镜像政策可以引用同一个收集器目标。
  • 数据包镜像支持所有第 4 层协议

  • 您无法在虚拟机实例的同一网络接口上镜像和收集流量,因为这会导致镜像循环。

  • 如需镜像同一 Google Kubernetes Engine (GKE) 节点上的 Pod 之间传递的流量,您必须为集群启用节点内可见性

  • 如需镜像 IPv6 流量,请使用过滤条件指定要镜像的 IPv6 流量的 IPv6 CIDR 范围。您可以使用 CIDR 范围过滤条件 ::/0 镜像所有 IPv6 流量。您可以使用以下以逗号分隔的 CIDR 范围过滤条件镜像所有 IPv4 和 IPv6 流量:0.0.0.0/0,::/0

  • 镜像流量会占用镜像实例的带宽。例如,如果某镜像实例遇到 1 Gbps 的入站流量和 1 Gbps 的出站流量,则该实例的总流量为 1 Gbps 的入站流量和 3 Gbps 的出站流量(1 Gbps 的正常出站流量和 2 Gbps 的镜像出站流量)。如需限制所收集的流量,您可使用过滤条件。

  • 数据包镜像的具体费用取决于从镜像实例传输到实例组的出站流量以及流量是否在各地区之间传输。

  • 数据包镜像对入站和出站方向均适用。如果两个镜像虚拟机实例互相发送流量,则 Google Cloud 会收集同一数据包的两个版本。 您可以通过指定仅镜像入站数据包或仅镜像出站数据包来更改此行为。

  • 您可以为项目创建的数据包镜像政策数量存在上限。如需了解详情,请参阅配额页面上每个项目的配额。

  • 对于每个数据包镜像政策,您可以指定的镜像来源的数量上限取决于来源类型:

    • 5 个子网
    • 5 个标签
    • 50 个实例
  • 数据包镜像过滤条件的数量上限为 30,即 IPv4 和 IPv6 地址范围的数量乘以协议数量。例如,您可以指定 30 个范围和 1 个协议,过滤条件数量为 30。但您不能指定 30 个范围和 2 个协议,此时过滤条件数量为 60,超过了上限值。

  • 您需要为数据包镜像处理的数据量付费, 如需了解详情,请参阅数据包镜像价格。

    您还需要为与数据包镜像相关的所有必备组件和出站流量付费。例如,收集流量的实例按正常费率收费。此外,如果数据包镜像流量在不同地区之间传输,则您需要为出站流量付费。如需详细了解价格信息,请参阅相关的价格页面

  • 只有在虚拟机在应用层加密镜像时,镜像的流量才会加密。虽然 VPC 网络和对等互连的 VPC 网络中虚拟机之间的连接会进行加密,但管理程序会执行加密和解密。从虚拟机的角度来看,此流量并未加密。

使用场景

以下部分介绍了一些真实场景,说明了为何建议您使用数据包镜像。

企业级安全

安全和网络工程团队必须确保能够捕获所有可能指示存在安全漏洞和入侵的异常情况和威胁。他们会对所有流量进行镜像,以全面检查可疑的流。由于攻击可能涉及多个数据包,因此安全团队必须能够获取每个流的所有数据包。

例如,以下安全工具要求您捕获多个数据包:

  • 入侵检测系统 (IDS) 工具,它们需要单个流的多个数据包来匹配签名,以便能够检测持续出现的威胁。

  • 深度数据包检测引擎,负责检查数据包载荷以检测协议异常情况。

  • 针对 PCI 合规性和其他法规用例的网络取证会要求检查大多数数据包。数据包镜像提供了一种针对不同攻击途径进行捕获的解决方案,例如不频繁的通信或尝试失败的通信。

应用性能监控

网络工程师可以使用镜像流量来排查应用和数据库团队报告的性能问题。为了检查网络问题,网络工程师可以查看传输的内容,而不是依赖应用日志。

例如,网络工程师可以使用数据包镜像中的数据来完成以下任务:

  • 分析协议和行为,以便找到并解决诸如数据包丢失或 TCP 重置等问题。

  • (实时)分析来自远程桌面、VoIP 和其他交互式应用的流量模式。网络工程师可以搜索影响应用用户体验的问题,如多次重新发送数据包或超出预期的重新连接次数。

收集器目标拓扑示例

您可以在各种设置中使用数据包镜像。以下示例展示了收集器目标的位置及其针对不同数据包镜像配置(例如 VPC 网络对等互连和共享 VPC)的政策。

收集器目标位于同一网络中

以下示例展示了镜像来源和收集器目标位于同一 VPC 网络中时的数据包镜像配置。

镜像来源和目标收集器位于同一 VPC 网络中时的数据包镜像政策。
所有资源位于同一 VPC 网络中时的数据包镜像政策(点击可放大)。

在上图中,数据包镜像政策配置为对 mirrored-subnet 进行镜像,并将镜像流量发送到内部直通式网络负载均衡器。Google Cloud 会对该子网中的现有和未来实例上的流量进行镜像。对进出互联网、本地主机或 Google 服务的所有流量进行镜像。

收集器目标位于对等网络中

您可以构建集中式收集器模型,其中不同 VPC 网络中的实例将镜像流量发送到中央 VPC 网络中的收集器目标。这样,您就可以使用单个目标收集器。

在以下示例中,collector-load-balancer 内部直通式网络负载均衡器位于 project-anetwork-a VPC 网络中的 us-central1 区域。此目标收集器可被两个数据包镜像政策使用:

  • policy-1 收集来自 project-anetwork-a VPC 网络中的 us-central1 区域的镜像来源的数据包,并将其发送到 collector-load-balancer 目标。

  • policy-2 收集来自 project-bnetwork-b VPC 网络中的 us-central1 区域的镜像来源的数据包,并将其发送到相同的 collector-load-balancer 目标。

由于镜像来源存在于不同的 VPC 网络中,因此需要两个镜像政策。

收集器目标所在的中央网络中的数据包镜像政策。该网络与镜像来源所在的其他网络对等互连。
数据包镜像政策所在的中央网络与镜像来源所在的其他网络对等互连(点击可放大)。

在上图中,收集器目标会收集两个不同网络中的子网的镜像流量。所有资源(来源和目标)必须位于同一区域。network-a 中的设置与示例类似,其中镜像来源和收集器目标位于同一 VPC 网络中policy-1 配置为收集来自 subnet-a 的流量并将其发送到 collector-ilb

policy-2project-a 中进行配置,但将 subnet-b 指定为镜像来源。由于 network-anetwork-b 已建立对等互连,因此目标收集器可以收集来自 subnet-b 的流量。

这些网络位于不同的项目中,可能具有不同的所有者。如果所有者拥有相应权限,则可以创建数据包镜像政策:

  • 如果 project-a 的所有者创建了数据包镜像政策,则必须在网络、子网或实例上拥有 compute.packetMirroringAdmin 角色才能在 project-b 中镜像。

  • 如果 project-b 的所有者创建了数据包镜像政策,则他们必须在 project-a 中拥有 compute.packetMirroringUser 角色。

如需详细了解如何在两个 VPC 网络之间启用专用连接,请参阅 VPC 网络对等互连

共享 VPC

在以下共享 VPC 场景中,收集器目标的镜像实例均位于同一共享 VPC 网络中。即使资源都位于同一网络中,它们也可以位于不同的项目中,例如宿主项目或多个不同的服务项目。以下示例展示了必须创建数据包镜像政策的位置及其创建者。

如果镜像来源和收集器目标均位于同一项目中,则无论它们位于宿主项目中还是服务项目中,设置均与所有资源都位于同一 VPC 网络中时类似。项目所有者可以创建所有资源并在该项目中设置所需权限。

如需了解详情,请参阅共享 VPC 概览

收集器目标位于服务项目中

在以下示例中,收集器目标位于使用宿主项目中的子网的服务项目中。在这种情况下,政策也位于服务项目中。该政策也位于宿主项目中。

数据镜像的宿主项目和服务项目之间的关系。
收集器目标位于服务项目中(点击可放大)。

在上图中,服务项目包含使用共享 VPC 网络中的收集器子网的收集器实例。数据包镜像政策在服务项目中创建,并配置为对具有 subnet-mirrored 中网络接口的实例进行镜像。

服务项目或宿主项目用户可以创建数据包镜像政策。为此,用户必须在收集器目标所在的服务项目中具有 compute.packetMirroringUser 角色。此外,用户还必须对镜像来源具有 compute.packetMirroringAdmin 角色。

收集器目标位于宿主项目中

在以下示例中,收集器目标位于宿主项目中,而镜像实例位于服务项目中。

此示例可能适用于开发者在服务项目中部署应用并使用共享 VPC 网络的场景。他们无需管理网络基础架构或数据包镜像。相反,控制宿主项目和共享 VPC 网络的集中式网络或安全团队负责预配数据包镜像政策。

数据镜像的宿主项目和服务项目之间的关系。
收集器目标位于宿主项目中(点击可放大)。

在上图中,数据包镜像政策是在收集器目标所在的宿主项目中创建的。该政策配置为对镜像子网中的实例进行镜像。服务项目中的虚拟机实例可以使用镜像子网,并对它们的流量进行镜像。

服务项目或宿主项目用户可以创建数据包镜像政策。为此,服务项目中的用户必须在宿主项目中具有 compute.packetMirroringUser 角色。宿主项目中的用户需要对服务项目中的镜像来源具有 compute.packetMirroringAdmin 角色。

多接口虚拟机实例

您可以在数据包镜像政策中添加具有多个网络接口的虚拟机实例。由于政策可以对单个网络中的资源进行镜像,因此您无法创建一个政策来对实例的所有网络接口的流量进行镜像。如果您需要镜像多网络接口实例的多个网络接口,则必须为每个接口创建一个数据包镜像政策,因为每个接口都连接到一个唯一的 VPC 网络。

后续步骤