使用数据包镜像

数据包镜像可用于镜像进出特定虚拟机实例的流量。您可以利用所收集到的流量,检测安全威胁并监控应用性能。如需详细了解数据包镜像,请参阅数据包镜像概览

镜像的流量将发送到已安装相应软件的虚拟机。如需查看提供软件的供应商列表,请参阅数据包镜像合作伙伴提供商

以下各部分介绍了如何创建和管理数据包镜像政策。

限制

请勿在包含 Private Service Connect 服务连接的 VPC 网络中启用数据包镜像。如果同时存在这两种配置,则流量可能会被丢弃。

准备工作

在创建数据包镜像政策之前,您必须具备适当的权限。还必须在要镜像的实例所在的地区中创建内部 TCP/UDP 负载平衡器(收集器目标)。

权限

Google Cloud 提供了两种与数据包镜像相关的角色,用于创建和管理数据包镜像政策:

  • compute.packetMirroringUser 授予用户创建、更新和删除数据包镜像政策的权限。如需使用数据包镜像,用户必须在创建数据包镜像政策的项目中具有此角色。

  • compute.packetMirroringAdmin 授予用户对特定资源进行镜像的权限。即使用户有权创建数据包镜像政策,他们仍然需要具备对相关来源进行镜像的权限。如果项目中的政策所有者可能没有任何其他权限(例如在共享 VPC 场景中),那么需要使用此角色。

如需详细了解如何使用 IAM 角色,请参阅 IAM 文档中的授予、更改和撤消对资源的访问权限

内部负载平衡器

您必须有一个内部 TCP/UDP 负载平衡器配置用于执行数据包镜像,而且它必须与所镜像的实例位于同一区域。来自镜像的来源的所有流量都会发送到负载平衡器后的收集器实例。

如需为数据包镜像配置内部 TCP/UDP 负载平衡器,必须将转发规则配置为数据包镜像收集器。发送到负载平衡器的非镜像的流量会被丢弃。此外,如果数据包镜像政策可能适用于收集器实例,则数据包镜像会忽略这些实例,不会镜像其流量。

我们建议您对收集器实例使用实例模板和托管实例组。托管实例组提供自动扩缩和自动修复功能,以满足您的流量需求和可用性要求。如果您使用托管实例组,请勿依赖启动磁盘作为永久性数据。将您的数据备份到另一个中心位置以保留这些数据。

如需详细了解实例组和内部 TCP/UDP 负载均衡器,请参阅以下文档:创建实例模板创建代管式实例组配置负载均衡器组件

为内部 TCP/UDP 负载均衡器创建转发规则时,请使用 --is-mirroring-collector 标志。

gcloud compute forwarding-rules create COLLECTOR_RULE \
    --region=REGION \
    --load-balancing-scheme=internal \
    --backend-service=COLLECTOR_BACKEND_SERVICE \
    --ports=all \
    --is-mirroring-collector \
    --network=NETWORK

替换以下内容:

  • COLLECTOR_RULE:转发规则的名称。
  • REGION:转发规则的区域。
  • COLLECTOR_BACKEND_SERVICE:此负载均衡器的后端服务。
  • NETWORK:转发规则的网络。

防火墙规则

镜像的流量必须能够从来源实例传送到属于内部 TCP/UDP 负载平衡器的目的地实例。您可能已设有允许这种流量的规则。

  • 检查镜像的实例是否设有以下出站规则:允许这些实例将流量发送到内部l TCP/UDP 负载平衡器的转发规则。
  • 检查负载平衡器的实例组中的收集器实例是否设有以下入站规则:允许这些实例接收来自镜像的实例或镜像的实例的 IP 地址范围的流量。例如,您可以指定来源范围 0.0.0.0/0,以收集来自镜像的实例的所有传入流量。为阻止互联网流量到达收集器实例,请仅为其分配内部 IP 地址。

如果您还没有允许这种流量的规则,请参阅使用防火墙规则来创建此规则。

创建数据包镜像政策

创建数据包镜像政策,以开始对进出特定实例的流量进行镜像。

控制台

  1. 转到 Google Cloud Console 中的“数据包镜像”页面。
    转到“数据包镜像”页面
  2. 点击创建政策
  3. 输入有关政策的以下信息,然后点击继续

    1. 输入政策的名称。
    2. 选择镜像的来源和收集器目的地所在的区域。数据包镜像政策必须与来源和目的地位于同一区域。
    3. 忽略优先级字段。目前无法对其进行调整。
    4. 在创建政策时,选择已启用以激活该政策。
  4. 选择镜像的来源和收集器目的地所在的 VPC 网络,然后点击继续

    来源和目的地可以位于相同或不同的 VPC 网络中。如果它们位于同一个 VPC 网络中,请选择镜像的来源和目的地在同一 VPC 网络中 (Mirrored sources and destination are in the same VPC network),然后选择网络。如果它们位于不同的网络中,请选择镜像的来源和收集器目的地在对等互连的不同 VPC 网络中 (Mirrored source and collector destination are in separete, peered VPC networks),然后选择镜像的来源网络,再选择收集器目的地网络。

  5. 选择镜像的来源,然后点击继续。您可以选择一个或多个来源。Google Cloud 会镜像与您的至少一个选定来源匹配的所有实例。

    • 子网 - 选择一个或多个子网。Google Cloud 会对选定子网中现有的实例和将来出现的实例进行镜像。
    • 网络标记 - 指定一个或多个网络标记。 Google Cloud 会镜像至少具有一个指定标记的实例。
    • 实例名称 - 选择要镜像的特定实例。
  6. 选择已针对数据包镜像进行了配置的内部 TCP/UDP 负载平衡器,然后点击继续。Google Cloud 会将镜像的流量发送到内部 TCP/UDP 负载平衡器后面的实例。

    对于共享 VPC,如果收集器目的地和镜像的来源在同一共享 VPC 网络中,则必须选择收集器目的地所在的项目,然后选择负载平衡器。

  7. 如果您想限制所镜像的具体流量,请选择镜像已过滤的流量。默认情况下,Google Cloud 会镜像所有流量。

    您可以根据 IP 地址范围、协议、流量方向或它们的组合来选择镜像流量。

  8. 点击提交以创建数据包镜像政策。

gcloud

创建数据包镜像政策并指定一个或多个要镜像的来源。 Google Cloud 会镜像与您的至少一个指定来源匹配的所有实例。

gcloud compute packet-mirrorings create POLICY_NAME \
  --region=REGION \
  --network=NETWORK_NAME \
  --collector-ilb=FORWARDING_RULE_NAME \
  [--mirrored-subnets=SUBNET,[SUBNET,...]] \
  [--mirrored-tags=TAG,[TAG,...]] \
  [--mirrored-instances=INSTANCE,[INSTANCE,...]] \
  [--filter-cidr-ranges=ADDRESS_RANGE,[ADDRESS_RANGE,...]] \
  [--filter-protocols=PROTOCOL,[PROTOCOL,...]] \
  [--filter-direction=DIRECTION]

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

  • POLICY_NAME 是数据包镜像政策的名称。
  • REGION 是镜像的来源和收集器目的地所在的地区。
  • NETWORK_NAME 是镜像的来源所在的网络。
  • FORWARDING_RULE_NAME 是配置为镜像收集器的转发规则的名称。Google Cloud 会将所有镜像的流量发送到关联的内部 TCP/UDP 负载平衡器。
  • SUBNET 是要镜像的子网的名称。Google Cloud 会对该子网中现有的实例和将来出现的实例进行镜像。
  • TAG 是网络标记。Google Cloud 会对具有该网络标记的实例进行镜像。
  • INSTANCE 是要镜像的实例的完全限定 ID。
  • ADDRESS_RANGE 是要镜像的 IP 地址范围(CIDR 范围)。
  • PROTOCOL 是要镜像的 IP 协议。有效值为 tcpudpicmpespahipipsctpIANA 协议编号。您可以在逗号分隔列表中提供多个协议。如果省略 --filter-protocols,则所有协议都会进行镜像。
  • DIRECTION 是要相对于虚拟机镜像的流量的方向。默认情况下,此值设置为 BOTH,这意味着同时镜像入站流量和出站流量。您可以限制捕获的流量:指定 INGRESS 以仅捕获入站数据包,或指定 EGRESS 以仅捕获出站数据包。

如需详细了解各标志,请参阅 SDK 参考文档

API

创建数据包镜像政策并指定一个或多个要镜像的来源。 Google Cloud 会镜像与您的至少一个指定来源匹配的所有实例。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/packetMirrorings
{
  "name": "POLICY_NAME",
  "network": {
    "url": "NETWORK_URL"
  },
  "priority": PRIORITY,
  "mirroredResources": {
    "subnetworks": [
      {
        "url": "SUBNET_URL"
      }
    ],
    "tags": [
      "TAG"
    ],
    "instances": [
      {
        "url": "INSTANCE"
      }
    ]
  },
  "collectorIlb": {
    "url": "FORWARDING_RULE_URL"
  },
  "filter": {
    "IPProtocols": [
      "PROTOCOL"
    ],
    "cidrRanges": [
      "ADDRESS_RANGE"
    ]
  }
}

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

  • PROJECT_ID 是您要在其中创建政策的项目的 ID。
  • POLICY_NAME 是数据包镜像政策的名称。
  • REGION 是镜像的来源和收集器目的地所在的地区。
  • NETWORK_URL 是镜像的来源所在网络的网址。
  • FORWARDING_RULE_URL 是配置为镜像收集器的转发规则的网址。Google Cloud 会将所有镜像的流量发送到关联的内部 TCP/UDP 负载平衡器。
  • SUBNET_URL 是要镜像的子网的网址。Google Cloud 会对该子网中现有的实例和将来出现的实例进行镜像。
  • TAG 是网络标记。Google Cloud 会对具有该网络标记的实例进行镜像。
  • INSTANCE 是要镜像的实例的完全限定 ID。
  • ADDRESS_RANGE 是要镜像的 IP 地址范围(CIDR 范围)。
  • PROTOCOL 是要镜像的 IP 协议。有效值为 tcpudpicmpespahipipsctpIANA 协议编号。您可以在逗号分隔列表中提供多个协议。如果省略 filter.IPProtocols,则所有协议都会进行镜像。

如需详细了解各字段,请参阅 packetmirrorings.insert 方法。

Terraform

您可以使用 Terraform 资源创建数据包镜像政策。

resource "google_compute_packet_mirroring" "default" {
  project     = google_compute_instance.mirror.project # Replace this with a reference to your project ID
  region      = "us-central1"
  name        = "my-mirroring"
  description = "My packet mirror"
  network {
    url = var.network # Replace this with a reference to your VPC network
  }
  collector_ilb {
    url = google_compute_forwarding_rule.default.id # Replace this with a reference to your forwarding rule
  }
  mirrored_resources {
    tags = ["foo"]
    instances {
      url = google_compute_instance.mirror.id # Replace this with a reference to your VM instance
    }
  }
  filter {
    ip_protocols = ["tcp"]
    cidr_ranges  = ["0.0.0.0/0"]
    direction    = "BOTH"
  }
}

如需验证您的数据包镜像政策是否已生效,请参阅监控数据包镜像政策

修改数据包镜像政策

更新现有政策以更改其镜像来源或收集器目的地。

控制台

  1. 转到 Google Cloud Console 中的“数据包镜像”页面。
    转到“数据包镜像”页面
  2. 在数据包镜像政策列表中,点击您要修改的政策。
  3. 在“政策详情”页面上,点击修改
  4. 修改您要更新的字段。控制台遵循与您创建政策时相同的流程。如需了解各字段,请参阅创建数据包镜像政策

gcloud

更新现有数据包镜像政策。

gcloud compute packet-mirrorings update POLICY_NAME \
  --region=REGION \
  [--collector-ilb=FORWARDING_RULE_NAME] \
  [--mirrored-subnets=SUBNET,[SUBNET,...]] \
  [--mirrored-tags=TAG,[TAG,...]] \
  [--mirrored-instances=INSTANCE,[INSTANCE,...]] \
  [--filter-cidr-ranges=ADDRESS_RANGE,[ADDRESS_RANGE,...]] \
  [--filter-protocols=PROTOCOL,[PROTOCOL,...]]

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

  • POLICY_NAME 是要修改的数据包镜像政策的名称。
  • REGION 是政策所在的区域。
  • FORWARDING_RULE_NAME 是配置为收集器的转发规则的名称。Google Cloud 会将所有镜像的流量发送到关联的内部 TCP/UDP 负载平衡器。
  • SUBNET 是要镜像的子网的名称。Google Cloud 会对该子网中现有的实例和将来出现的实例进行镜像。
  • TAG 是网络标记。Google Cloud 会对具有该网络标记的实例进行镜像。
  • INSTANCE 是要镜像的实例的完全限定 ID。
  • ADDRESS_RANGE 是要镜像的 IP 地址范围(CIDR 范围)。
  • PROTOCOL 是要镜像的 IP 协议。有效值为 tcpudpicmpespahipipsctpIANA 协议编号。您可以在逗号分隔列表中提供多个协议。如果省略 --filter-protocols,则所有协议都会进行镜像。

如需详细了解各标志,请参阅 SDK 参考文档

API

更新现有数据包镜像政策。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/packetMirrorings/POLICY_NAME
{
  "priority": PRIORITY,
  "mirroredResources": {
    "subnetworks": [
      {
        "url": "SUBNET_URL"
      }
    ],
    "tags": [
      "TAG"
    ],
    "instances": [
      {
        "url": "INSTANCE"
      }
    ]
  },
  "collectorIlb": {
    "url": "FORWARDING_RULE_URL"
  },
  "filter": {
    "IPProtocols": [
      "PROTOCOL"
    ],
    "cidrRanges": [
      "ADDRESS_RANGE"
    ],
    "direction" : DIRECTION,
  }
}

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

  • PROJECT_ID 是政策所在项目的 ID。
  • POLICY_NAME 是要修改的数据包镜像政策的名称。
  • REGION 是政策所在的区域。
  • FORWARDING_RULE_URL 是配置为镜像收集器的转发规则的网址。Google Cloud 会将所有镜像的流量发送到关联的内部 TCP/UDP 负载平衡器。
  • SUBNET_URL 是要镜像的子网的网址。Google Cloud 会对该子网中现有的实例和将来出现的实例进行镜像。
  • TAG 是网络标记。Google Cloud 会对具有该网络标记的实例进行镜像。
  • INSTANCE 是要镜像的实例的完全限定 ID。
  • ADDRESS_RANGE 是要镜像的 IP 地址范围(CIDR 范围)。
  • PROTOCOL 是要镜像的 IP 协议。有效值为 tcpudpicmpespahipipsctpIANA 协议编号。您可以在逗号分隔列表中提供多个协议。如果省略 filter.IPProtocols,则所有协议都会进行镜像。
  • DIRECTION 是从虚拟机的角度看要镜像的流量的方向。有效值为 INGRESS(仅捕获出站流量)、EGRESS(仅捕获出站流量)或 BOTH(默认值,同时捕获入站流量和出站流量)。

如需详细了解各字段,请参阅 packetmirrorings.patch 方法。

列出数据包镜像政策

列出数据包镜像政策以查看现有政策。

控制台

  1. 转到 Google Cloud Console 中的“数据包镜像”页面。
    转到“数据包镜像”页面

    Cloud Console 会列出您的项目中的所有政策。

gcloud

列出项目中或某个特定地区的现有数据包镜像政策。

gcloud compute packet-mirrorings list \
  [--filter="region:(REGION...)"]

REGION 替换为包含所要列出政策的区域的名称。

如需详细了解各标志,请参阅 SDK 参考文档

API

列出项目中的现有数据包镜像政策。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/packetMirrorings

列出特定区域的现有数据包镜像政策。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/packetMirrorings

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

  • PROJECT_ID 是包含所要列出政策的项目的 ID。
  • REGION 是包含所要列出政策的区域。

如需详细了解各字段,请参阅 packetmirrorings.aggregatedListpacketmirrorings.list 方法。

描述数据包镜像政策

查看现有数据包镜像政策的详细信息,以了解其过滤条件等信息。

控制台

  1. 转到 Google Cloud Console 中的“数据包镜像”页面。
    转到“数据包镜像”页面
  2. 在数据包镜像政策列表中,选择您要查看的政策。

    Cloud Console 会显示所选政策的详细信息。

gcloud

描述现有的数据包镜像政策以查看其详细信息。

gcloud compute packet-mirrorings describe POLICY_NAME \
  --region=REGION \

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

  • POLICY_NAME 是要描述的数据包镜像政策的名称。
  • REGION 是政策所在的区域。

如需详细了解各标志,请参阅 SDK 参考文档

API

描述现有的数据包镜像政策以查看其详细信息。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/packetMirrorings/POLICY_NAME

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

  • PROJECT_ID 是政策所在项目的 ID。
  • POLICY_NAME 是要描述的数据包镜像政策的名称。
  • REGION 是政策所在的区域。

如需详细了解各字段,请参阅 packetmirrorings.get 方法。

停用或启用数据包镜像政策

停用或启用数据包镜像政策,以停止或开始收集镜像的流量。

控制台

  1. 转到 Google Cloud Console 中的“数据包镜像”页面。
    转到“数据包镜像”页面
  2. 在数据包镜像政策列表中,选择要停用或启用的政策。
  3. 点击停用启用
  4. 点击停用启用以确认

gcloud

停用现有数据包镜像政策。

gcloud compute packet-mirrorings update POLICY_NAME \
  --region=REGION \
  --no-enable

启用现有数据包镜像政策。

gcloud compute packet-mirrorings update POLICY_NAME \
  --region=REGION \
  --enable

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

  • POLICY_NAME 是要停用或启用的数据包镜像政策的名称。
  • REGION 是政策所在的区域。

如需详细了解各标志,请参阅 SDK 参考文档

API

停用或启用现有数据包镜像政策。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/packetMirrorings/POLICY_NAME
{
  "enable": "FALSE|TRUE"
}

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

  • PROJECT_ID 是政策所在项目的 ID。
  • POLICY_NAME 是要停用的数据包镜像政策的名称。
  • REGION 是政策所在的区域。

如需详细了解各字段,请参阅 packetmirrorings.patch 方法。

删除数据包镜像政策

删除数据包镜像政策,以将其从您的项目中移除。删除政策后,Google Cloud 会停止镜像与该政策相关的所有流量。

控制台

  1. 转到 Google Cloud Console 中的“数据包镜像”页面。
    转到“数据包镜像”页面
  2. 在数据包镜像政策列表中,选择您要删除的政策。
  3. 点击删除
  4. 点击删除以确认。

gcloud

删除现有数据包镜像政策。

gcloud compute packet-mirrorings delete POLICY_NAME \
  --region=REGION \

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

  • POLICY_NAME 是要删除的数据包镜像政策的名称。
  • REGION 是政策所在的区域。

如需详细了解各标志,请参阅 SDK 参考文档

API

删除现有数据包镜像政策。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/packetMirrorings/POLICY_NAME

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

  • PROJECT_ID 是政策所在项目的 ID。
  • POLICY_NAME 是要删除的数据包镜像政策的名称。
  • REGION 是政策所在的区域。

如需详细了解各字段,请参阅 packetmirrorings.delete 方法。

问题排查

如果您的数据包镜像政策未能收集预期的镜像的流量,请检查以下配置:

  • 检查您是否设有允许流量从镜像的实例流向收集器实例的防火墙规则。

  • 检查镜像的来源是否包含或排除了要镜像的实例。 例如,如果您将某个子网指定为镜像的来源,则该子网中的所有现有实例及将来出现的实例都会被镜像。如果您指定了标记,则系统只会镜像具有匹配的标记的实例。

  • 检查数据包镜像过滤条件是否过于宽泛或过于狭隘。您可能无意中配置了过滤条件来包含或排除某些流量。