使用 VPC 流日志记录 IP 流量 - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 VPC 流日志记录 IP 流量

利用 VPC 流日志这项功能,您可以捕获有关传入和传出您的 VPC 中网络接口的 IP 流量的信息。流日志数据可以发布到以下位置:亚马逊 CloudWatch 日志、亚马逊 S3 或亚马逊数据 Firehose。创建流日志后,您可以在配置的日志组、存储桶或传输流中检索和查看流日志记录。

流日志可帮助您处理多种任务,例如:

  • 诊断过于严格的安全组规则

  • 监控达到您实例的流量

  • 确定在网络接口上往返的流量的方向

流日志数据的收集在您网络流量路径之外,因此不会影响网络吞吐量或延迟。您可以创建或删除流日志,而不会对网络性能造成任何有风险的影响。

流日志基础知识

您可以为 VPC、子网或网络接口创建流日志。如果您为子网或 VPC 创建流日志,则会监视该子网或 VPC 中的每个网络接口。

受监控网络接口的流日志数据记录为流日志记录,这些是日志事件,由描述该流量的字段组成。有关更多信息,请参阅 流日志记录

要创建流日志,请指定:

  • 要为其创建流日志的资源

  • 要捕获的流量的类型(接受的流量、拒绝的流量或所有流量)

  • 指定您要将流日志数据发布到的目标

在以下示例中,您创建一个流日志,用于捕获私有子网中某个 EC2 实例的网络接口的已接受流量,并将流日志记录发布到 Amazon S3 存储桶。


                实例的流日志

在以下示例中,流日志捕获子网的所有流量,并将流日志记录发布到 Amazon Lo CloudWatch gs。流日志将捕获子网中所有网络接口的流量。


                子网的流日志

创建流日志后,需要几分钟来开始收集数据并将数据发布到选定目标。流日志不会为您的网络接口捕获实时日志流。有关更多信息,请参阅 创建流日志

如果您在为子网或 VPC 创建流日志后在子网中启动实例,则只要网络接口有网络流量,我们就会为新的网络接口创建日志流(用于 CloudWatch 日志)或日志文件对象(对于 Amazon S3)。

您可以为其他 Amazon 创建的网络接口创建流日志,例如:

  • Elastic Load Balancing

  • Amazon RDS

  • Amazon ElastiCache

  • Amazon Redshift

  • Amazon WorkSpaces

  • NAT 网关

  • 中转网关

不论网络接口是什么类型,您必须使用 Amazon EC2 控制台或 Amazon EC2 API 为网络接口创建流日志。

您可以将标签应用于流日志。每个标签都包含您定义的一个键和一个可选值。标签可以帮助您整理流日志,例如按目的或拥有者。

如果您不再需要某个流日志,可将其删除。删除流日志会禁用资源的流日志服务,因此将不再创建或发布新的流日志记录。删除流日志不会删除任何现有的流日志数据。删除流日志后,您可以将其从目的地中直接删除。有关更多信息,请参阅 删除流日志

流日志记录

流日志记录代表您的 VPC 中的网络流。默认情况下,每条记录捕获在聚合时间间隔(又称为捕获窗口)内发生的网络 Internet 协议 (IP) 流量流(按每个网络接口 5 元组来定性)。

每条记录都是一个字符串,字段用空格分隔。记录包括 IP 流的不同组件的值,包括源、目标和协议。

当您创建流日志时,您可以为流日志记录使用默认格式,也可以指定自定义格式。

聚合时间间隔

聚合时间间隔表示捕获特定流并聚合到流日志记录中的时间段。默认情况下,最大聚合时间间隔为 10 分钟。创建流日志时,您可以选择指定最大 1 分钟的聚合时间间隔。最大聚合时间间隔为 1 分钟的流日志的大小,比最大聚合时间间隔为 10 分钟的流日志大。

当网络接口附加到基于 Nitro 的实例时,无论指定的最大聚合时间间隔为多少,聚合时间间隔始终不超过 1 分钟。

在聚合间隔内捕获数据后,处理数据并将其发布到 CloudWatch 日志或 Amazon S3 需要更多时间。流日志服务通常在大约 5 分钟内将 CloudWatch 日志传送到日志,在大约 10 分钟内将日志传送到 Amazon S3。但是,日志交付已尽了最大努力,您的日志可能会延迟到典型交付时间之后。

默认格式

使用默认格式,流日志记录按可用字段表中显示的顺序包括版本 2 字段。您无法自定义或更改默认格式。要捕获其他字段或不同字段子集,请指定自定义格式。

自定义格式

使用自定义格式,您可以指定流日志记录中包含哪些字段以及采用哪种顺序。这使您可以根据具体需求创建流日志,并忽略无关的字段。使用自定义格式,还可减少从发布的流日志提取特定信息所需的单独流程。您可以指定任意数量的可用流日志字段,但必须至少指定一个。

可用字段

下表描述了对流日志记录可用的所有字段。版本列表示在其中引入了字段的 VPC 流日志版本。默认格式包括所有版本 2 字段,与它们在表格中出现的顺序相同。

将流日志数据发布到 Amazon S3 时,字段的数据类型将取决于流日志格式。如果格式为纯文本,则所有字段的类型均为 STRING。如果格式为 Parquet,请参阅字段数据类型表。

如果某个字段不适用于或无法计算特定记录,则记录为该条目显示一个“-”符号。不直接来自数据包标头的元数据字段是最大努力的近似值,它们的值可能缺失或不准确。

字段 描述 版本

version

VPC 流日志版本。如果您使用默认格式,则版本为 2。如果您使用自定义格式,则版本是指定字段中的最高版本。例如,如果您只在版本 2 中指定字段,则版本为 2。如果您在版本 2、3 和 4 中指定字段组合,则版本为 4。

Parquet 数据类型:INT_32

2

account-id

记录流量的源网络接口所有者的 Amazon 账户 ID。如果网络接口是由 Amazon 服务创建的,例如在创建 VPC 终端节点或 Network Load Balancer 时,则可能会显示该字段unknown的记录。

Parquet 数据类型:STRING

2

interface-id

为其记录流量的网络接口的 ID。

Parquet 数据类型:STRING

2

srcaddr

传入流量的源地址,或者网络接口上传出流量的网络接口 IPv4 或 IPv6 地址。网络接口的 IPv4 地址始终是其私有 IPv4 地址。另请参阅 pkt-srcaddr。

Parquet 数据类型:STRING

2

dstaddr

传出流量的目标地址,或者网络接口上传入流量的网络接口 IPv4 或 IPv6 地址。网络接口的 IPv4 地址始终是其私有 IPv4 地址。另请参阅 pkt-dstaddr。

Parquet 数据类型:STRING

2

srcport

流量的源端口。

Parquet 数据类型:INT_32

2

dstport

流量的目标端口。

Parquet 数据类型:INT_32

2

protocol

流量的 IANA 协议编号。有关更多信息,请参阅分配的 Internet 协议编号

Parquet 数据类型:INT_32

2

packets

在流中传输的数据包的数量。

Parquet 数据类型:INT_64

2

bytes

在流中传输的字节数。

Parquet 数据类型:INT_64

2

start

在聚合时间间隔内,接收流的第一个数据包的时间(以 Unix 秒为单位)。这可能是在网络接口上传输或收到数据包之后最多 60 秒。

Parquet 数据类型:INT_64

2

end

在聚合时间间隔内,接收流的最后一个数据包的时间(以 Unix 秒为单位)。这可能是在网络接口上传输或收到数据包之后最多 60 秒。

Parquet 数据类型:INT_64

2

action

与流量关联的操作:

  • ACCEPT — 流量已被接受。

  • REJECT — 流量已被拒绝。例如,安全组或网络 ACL 不允许流量,或数据包在连接关闭之后到达。

Parquet 数据类型:STRING

2

log-status

流日志的日志记录状态:

  • OK – 数据正常记录到选定目标。

  • NODATA – 聚合时间间隔内没有传入或传出网络接口的网络流量。

  • SKIPDATA – 在聚合时间间隔内跳过了一些流日志记录。这可能是由于内部容量限制或内部错误。

Parquet 数据类型:STRING

2

vpc-id

包含记录其流量的网络接口的 VPC 的 ID。

Parquet 数据类型:STRING

3

subnet-id

包含记录其流量的网络接口的子网的 ID。

Parquet 数据类型:STRING

3

instance-id

与要记录其流量的网络接口关联的实例的 ID(如果实例由您所有)。对于请求方管理的网络接口,返回“-”符号,例如,NAT 网关的网络接口。

Parquet 数据类型:STRING

3

tcp-flags

以下 TCP 标志的位掩码值:

  • FIN — 1

  • SYN — 2

  • RST — 4

  • SYN-ACK – 18

如果未记录支持的标志,则 TCP 标志值为 0。例如,由于 tcp-flags 不支持记录 ACK 或 PSH 标志,因此具有这些不受支持标志的流量记录将导致 tcp-flags 值为 0。但是,如果不支持的标志附带有支持标志,我们将报告受支持标志的值。例如,如果 ACK 是 SYN-ACK 的一部分,则会报告 18。而且,如果有像 SYN+ECE 这样的记录,由于 SYN 是支持的标志,而 ECE 不是,那么 TCP 标志值为 2。如果由于某种原因标志组合无效且无法计算其值,则值为 -。如果未发送标志,则 TCP 标志值为 0。

在聚合时间间隔内,TCP 标志可以是 OR-ed。对于短连接,标志必须在与流日志记录相同的行上设置,例如,对于 SYN-ACK 和 FIN 的 19,以及对于 SYN 和 FIN 的 3。有关示例,请参阅 TCP 标志序列

有关 TCP 标志的一般信息(例如 FIN、SYN 和 ACK 等标志的含义),请参阅 Wikipedia 上的 TCP 分段结构

Parquet 数据类型:INT_32

3

type

流量的类型。可能的值包括:IPv4 | IPv6 | EFA。有关更多信息,请参阅 Elastic Fabric Adapter

Parquet 数据类型:STRING

3

pkt-srcaddr

流量的数据包级别(原始)源 IP 地址。将此字段与 srcaddr 字段一起使用,用于区分流量流经的中间层 IP 地址与流量的原始源 IP 地址。例如,当流量流经 NAT 网关的网络接口时,或者当 Amazon EKS 中 Pod 的 IP 地址不同于运行 Pod 的实例节点的网络接口 IP 地址时(用于 VPC 中的通信)。

Parquet 数据类型:STRING

3

pkt-dstaddr

流量的数据包级别(原始)目标 IP 地址。将此字段与 dstaddr 字段一起使用,用于区分流量流经的中间层的 IP 地址与流量的最终目标 IP 地址。例如,当流量流经 NAT 网关的网络接口时,或者当 Amazon EKS 中 Pod 的 IP 地址不同于运行 Pod 的实例节点的网络接口 IP 地址时(用于 VPC 中的通信)。

Parquet 数据类型:STRING

3

region

包含记录其流量的网络接口的区域。

Parquet 数据类型:STRING

4

az-id

包含记录其流量的网络接口的可用区的 ID。如果流量来自子位置,则记录会对此字段显示“-”符号。

Parquet 数据类型:STRING

4

sublocation-type

sublocation-id 字段中返回的子位置类型:可能的值包括:波长 | 前哨 | 本地扩展区。如果流量不是来自子位置,则记录会对此字段显示“-”符号。

Parquet 数据类型:STRING

4

sublocation-id

包含记录其流量的网络接口的子位置的 ID。如果流量不是来自子位置,则记录会对此字段显示“-”符号。

Parquet 数据类型:STRING

4

pkt-src-aws-service

如果源 IP 地址用于 Amazon 服务,则为该pkt-srcaddr字段的 IP 地址范围子集的名称。可能的值包括:AMAZON | AMAZON_APPFLOW | AMAZON_CONNECT | API_GATEWAY | CHIME_MEETINGS | CHIME_VOICECONNECTOR | CLOUD9 | CLOUDFRONT | CODEBUILD | DYNAMODB | EBS | EC2 | EC2_INSTANCE_CONNECT | GLOBALACCELERATOR | KINESIS_VIDEO_STREAMS | ROUTE53 | ROUTE53_HEALTHCHECKS | ROUTE53_HEALTHCHECKS_PUBLISHING | ROUTE53_RESOLVER | S3 | WORKSPACES_GATEWAYS。

Parquet 数据类型:STRING

5

pkt-dst-aws-service

如果目标 IP 地址用于 Amazon 服务,则为该pkt-dstaddr字段的 IP 地址范围子集的名称。有关可能的值的列表,请参阅 pkt-src-aws-service 字段。

Parquet 数据类型:STRING

5

flow-direction

相对于捕获流量的接口而言流的方向。可能的值包括:ingress | egress。

Parquet 数据类型:STRING

5

traffic-path

传出流量到达目的地的路径。要确定流量是否为传出流量,请检查 flow-direction 字段。可能的值如下所示。如果没有任何值适用,则该字段将设置为 -。

  • 1 – 通过同一 VPC 中的其他资源,包括在该 VPC 中创建网络接口的资源

  • 2 — 通过互联网网关或网关 VPC 终端节点

  • 3 — 通过虚拟私有网关

  • 4 — 通过区域内 VPC 对等连接

  • 5 — 通过区域间 VPC 对等连接

  • 6 — 通过本地网关

  • 7 — 通过网关 VPC 终端节点(仅限基于 Nitroc 的实例)

  • 8 — 通过互联网网关(仅限基于 Nitro 的实例)

Parquet 数据类型:INT_32

5

流日志限制

要使用流日志,您需要了解以下限制:

  • 您不能为与您的 VPC 对等的 VPC 启用流日志,除非该对等 VPC 在您的账户中。

  • 创建流日志后,您无法更改其配置或者流日志记录格式。例如,您无法将不同的 IAM 角色与流日志关联,或者在流日志记录中添加或删除字段。不过,您可以删除流日志并使用必需的配置创建新的流日志。

  • 如果网络接口有多个 IPv4 地址,并且流量发送到辅助私有 IPv4 地址,则流日志会在 dstaddr 字段中显示主要私有 IPv4 地址。要捕获原始目标 IP 地址,请使用 pkt-dstaddr 字段创建流日志。

  • 如果流量发送到某个网络接口而目标不是网络接口 IP 地址中的任何一个,则流日志会在 dstaddr 字段中显示主要私有 IPv4 地址。要捕获原始目标 IP 地址,请使用 pkt-dstaddr 字段创建流日志。

  • 如果来自某个网络接口的流量而源不是网络接口 IP 地址中的任何一个,则流日志会在 srcaddr 字段中显示主要私有 IPv4 地址。要捕获原始源 IP 地址,请使用 pkt-srcaddr 字段创建流日志。

  • 如果流量发送到网络接口或从网络接口发送,则流日志中的 srcaddrdstaddr 字段始终显示主要私有 IPv4 地址,而不管数据包源或目标如何。要捕获数据包源或目标,请使用 pkt-srcaddrpkt-dstaddr 字段创建流日志。

  • 当您的网络接口附加到基于 Nitro 的实例时,无论指定的最大聚合时间间隔为多少,聚合时间间隔始终不超过 1 分钟。

流日志不会捕获所有 IP 流量。以下类型的流量不予以记录:

  • 实例与 Amazon DNS 服务器联系时生成的流量。如果您使用自己的 DNS 服务器,则将记录到该 DNS 服务器的所有流量。

  • Windows 实例为 Amazon Windows 许可证激活而生成的流量。

  • 实例元数据传入和传出 169.254.169.254 的流量。

  • Amazon Time Sync Service 的传入和传出 169.254.169.123 的流量。

  • DHCP 流量。

  • 镜像流量。

  • 到默认 VPC 路由器的预留 IP 地址的流量。

  • 端点网络接口和网络负载均衡器网络接口之间的流量。

定价

发布流日志时,将收取已出售日志的数据摄取和存档费用。有关发布销售日志时定价的更多信息,请打开 Amazon Pricin CloudWatch g,选择日志,然后找到销售日志。

若要跟踪发布流日志所产生的费用,您可以将成本分配标签应用到目的地资源。此后,您的 Amazon 成本分配报告将包括按这些标签汇总的使用量和成本。您可以应用代表业务类别(例如成本中心、应用程序名称或拥有者)的标签,以便整理您的成本。有关更多信息,请参阅下列内容: