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

使用 VPC 流日志记录 IP 流量

利用 VPC 流日志这项功能,您可以捕获有关传入和传出您的 VPC 中网络接口的 IP 流量的信息。可将流日志数据发布到 Amazon CloudWatch Logs 或 Amazon S3。在创建流日志后,您可以在所选的目标中检索和查看其数据。

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

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

  • 监控达到您实例的流量

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

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

流日志基础知识

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

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

要创建流日志,请指定:

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

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

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

在以下示例中,您创建一个流日志 (fl-aaa),用于捕获实例 A1 的网络接口的已接受流量,并将流日志记录发布到 Amazon S3 存储桶。您可以创建第二个流日志,用于捕获子网 B 的所有流量,并将流日志记录发布到 Amazon CloudWatch Logs。流日志 (fl-bbb) 捕获子网 B 中所有网络接口的流量。没有任何流日志捕获实例 A2 的网络接口的流量。


                子网和实例的流日志

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

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

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

  • Elastic Load Balancing

  • Amazon RDS

  • Amazon ElastiCache

  • Amazon Redshift

  • Amazon WorkSpaces

  • NAT 网关

  • 中转网关

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

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

如果您不再需要某个流日志,可将其删除。删除流日志将会禁用资源的流日志服务,不再创建新的流日志记录,也不会将这些记录发布到 CloudWatch Logs 或 Amazon S3。删除流日志不删除网络接口的任何现有流日志记录、日志流(对于 CloudWatch Logs)或日志文件对象(对于 Amazon S3)。要删除现有的日志流,请使用 CloudWatch Logs 控制台。要删除现有日志文件对象,请使用 Amazon S3 控制台。在删除流日志之后,可能需要数分钟时间来停止收集数据。有关更多信息,请参阅 删除流日志

流日志记录

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

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

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

聚合时间间隔

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

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

在聚合时间间隔内捕获数据后,需要额外的时间来处理数据并将其发布到 CloudWatch Logs 或 Amazon S3。流日志服务通常在大约 5 分钟内将日志传送到 CloudWatch Logs,在大约 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 – 安全组和网络 ACL 允许记录的流量。

  • 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 标志的位掩码值:

  • SYN — 2

  • SYN-ACK — 18

  • FIN — 1

  • RST — 4

ACK 仅在随 SYN 一起时报告。

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

pkt-srcaddr 字段的 IP 地址范围子集的名称(如果源 IP 地址用于Amazon服务)。可能的值包括: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

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

Parquet 数据类型:STRING

5

flow-direction

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

Parquet 数据类型:STRING

5

traffic-path

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

  • 1 — 通过同一 VPC 中的另一个资源

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

  • 3 — 通过虚拟私有网关

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

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

  • 6 — 通过本地网关

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

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

Parquet 数据类型:INT_32

5

流日志限制

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

  • 您无法为 EC2-Classic 平台中的网络接口启用流日志。这包含通过 ClassicLink 与 VPC 链接的 EC2-Classic 实例。

  • 您不能为与您的 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 字段创建流日志。

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

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

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

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

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

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

  • DHCP 流量。

  • 镜像流量。

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

  • 在终端节点网络接口和 Network Load Balancer 网络接口之间的流量。

流日志定价

将流日志发布到 CloudWatch Logs 或 Amazon S3 时,适用已出售日志的数据引入和存档费用。有关更多信息和示例,请参阅 Amazon CloudWatch 定价

要跟踪将流日志发布到 Amazon S3 存储桶所产生的费用,可以将成本分配标签应用到流日志订阅。要跟踪将流日志发布到 CloudWatch Logs 所产生的费用,您可以将成本分配标签应用到目标 CloudWatch Logs 日志组。此后,您的Amazon成本分配报告中就会包含按这些标签汇总的使用量和成本。您可以应用代表业务类别(例如成本中心、应用程序名称或拥有者)的标签,以便整理您的成本。有关更多信息,请参阅 Amazon Billing and Cost Management 用户指南 中的使用成本分配标签