Amazon Virtual Private Cloud
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

VPC 流日志

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

流日志可以帮助您完成大量任务;例如,排查流量未到达实例的原因,这反过来可帮助您诊断限制过于严格的安全组规则。您还可以使用流日志作为安全工具来监视到达您的实例的流量。

在使用流日志时会收取 CloudWatch Logs 费用,而无论您是将它们发送到 CloudWatch Logs 还是 Amazon S3。有关更多信息,请参阅 Amazon CloudWatch 定价

流日志基础知识

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

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

要创建流日志,您必须指定要为其创建流日志的资源、要捕获的流量类型(接受的流量、拒绝的流量或所有流量),以及您要将流日志数据发布到的目标。如果已创建流日志,则需要几分钟来开始收集数据并将数据发布到选定目标。流日志不会为您的网络接口捕获实时日志流。有关更多信息,请参阅 创建流日志

如果在为子网或 VPC 创建了流日志之后,您在子网中启动了多个实例,则在该网络接口上记录到任何网络流量时,将立即为每个新网络接口创建一个新日志流(对于 CloudWatch Logs)或日志文件对象(对于 Amazon S3)。

您可以为其他 AWS 创建的网络接口创建流日志,例如 Elastic Load Balancing、Amazon RDS、Amazon ElastiCache、Amazon Redshift 和 Amazon WorkSpaces。但是,您不能使用这些服务控制台或 API 来创建流日志;您必须使用 Amazon EC2 控制台或 Amazon EC2 API。与此类似,您不能使用 CloudWatch Logs、Amazon S3 控制台或 API 为网络接口创建流日志。

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

流日志记录

流日志记录代表您的流日志中的网络流。每个记录捕获特定捕获窗口中的特定 5 元组的网络流。5 元组是一组 5 个不同的值,指定 Internet 协议 (IP) 流的源、目标和协议。捕获窗口是一段持续时间,在这段时间内流日志服务会聚合数据,然后再发布流日志记录。捕获窗口大约为 10 分钟,但最长可以为 15 分钟。

流日志记录语法

流日志记录是以空格分隔的字符串,采用以下格式:

<version> <account-id> <interface-id> <srcaddr> <dstaddr> <srcport> <dstport> <protocol> <packets> <bytes> <start> <end> <action> <log-status>

下表描述了流日志记录的各个字段。

字段 描述
version VPC 流日志版本。
account-id 流日志的 AWS 账户 ID。
interface-id 为其记录流量的网络接口的 ID。
srcaddr 源 IPv4 或 IPv6 地址。网络接口的 IPv4 地址始终是其私有 IPv4 地址。
dstaddr 目标 IPv4 或 IPv6 地址。网络接口的 IPv4 地址始终是其私有 IPv4 地址。
srcport 流量的源端口。
dstport 流量的目标端口。
protocol 流量的 IANA 协议编号。有关更多信息,请参阅分配的 Internet 协议编号
packets 捕获窗口中传输的数据包的数量。
bytes 捕获窗口中传输的字节数。
start 捕获窗口启动的时间,采用 Unix 秒的格式。
end 捕获窗口结束的时间,采用 Unix 秒的格式。
action 与流量关联的操作:
  • ACCEPT:安全组或网络 ACL 允许记录的流量。

  • REJECT:安全组或网络 ACL 未允许记录的流量。

log-status 流日志的日志记录状态:
  • OK:数据正常记录到选定目标。

  • NODATA:捕获窗口中没有传入或传出网络接口的网络流量。

  • SKIPDATA:捕获窗口中跳过了一些流日志记录。这可能是由于内部容量限制或内部错误。

注意

如果某个字段不适用于特定记录,则记录为该条目显示一个“-”符号。

流日志记录示例

已接受流量和已拒绝流量的流日志记录

下面是一个流日志记录的示例,其中允许指向账户 123456789010 中的网络接口 eni-abc123de 的 SSH 流量(目标端口 22,TCP 协议):

2 123456789010 eni-abc123de 172.31.16.139 172.31.16.21 20641 22 6 20 4249 1418530010 1418530070 ACCEPT OK

下面是一个流日志记录的示例,其中拒绝了指向账户 123456789010 中的网络接口 eni-abc123de 的 RDP 流量(目标端口 3389,TCP 协议):

2 123456789010 eni-abc123de 172.31.9.69 172.31.9.12 49761 3389 6 20 4249 1418530010 1418530070 REJECT OK

无数据和跳过记录的流日志记录

以下示例的流日志记录在捕获窗口中未记录数据:

2 123456789010 eni-1a2b3c4d - - - - - - - 1431280876 1431280934 - NODATA

以下示例的流日志记录在捕获窗口中跳过了记录:

2 123456789010 eni-4b118871 - - - - - - - 1431280876 1431280934 - SKIPDATA

安全组和网络 ACL 规则

如果您正使用流日志来诊断过于严格或过于宽松的安全组规则或网络 ACL 规则,请注意这些资源的状态性。安全组是有状态的,这意味着对所允许流量的响应也会被允许,即使安全组中的规则不允许也是如此。相反,网络 ACL 是无状态的,因此对所允许流量的响应需要遵守网络 ACL 规则。

例如,您从家中的计算机 (IP 地址为 203.0.113.12) 对您的实例 (网络接口的私有 IP 地址为 172.31.16.139) 使用 ping 命令。您的安全组入站规则允许 ICMP 流量,出站规则不允许 ICMP 流量,但是,由于安全组是有状态的,因此允许从您的实例响应 ping。您的网络 ACL 允许入站 ICMP 流量,但不允许出站 ICMP 流量。由于网络 ACL 是无状态的,响应 Ping 将被丢弃,不会传输到您家中的计算机。在流日志中,它显示为 2 个流日志记录:

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 ACCEPT 记录。

  • 网络 ACL 拒绝的响应 ping 的 REJECT 记录。

2 123456789010 eni-1235b8ca 203.0.113.12 172.31.16.139 0 0 1 4 336 1432917027 1432917142 ACCEPT OK
2 123456789010 eni-1235b8ca 172.31.16.139 203.0.113.12 0 0 1 4 336 1432917094 1432917142 REJECT OK

如果您的网络 ACL 允许出站 ICMP 流量,流日志会显示两个 ACCEPT 记录 (一个针对发起 ping,一个针对响应 ping)。如果您的安全组拒绝入站 ICMP 流量,流日志会显示一个 REJECT 记录,因为流量无权到达您的实例。

IPv6 流量的流日志记录

下面是流日志记录的示例,其中允许账户 123456789010 中从 IPv6 地址 2001:db8:1234:a100:8d6e:3477:df66:f105 到网络接口 eni-f41c42bf 的 SSH 流量 (端口 22)。

2 123456789010 eni-f41c42bf 2001:db8:1234:a100:8d6e:3477:df66:f105 2001:db8:1234:a102:3304:8879:34cf:4071 34892 22 6 54 8855 1477913708 1477913820 ACCEPT OK

流日志限制

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

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

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

  • 您不能标记流日志。

  • 在创建流日志之后,您不能更改其配置;例如,您不能将不同的 IAM 角色与流日志关联。不过,您可以删除流日志并使用必需的配置创建新的流日志。

  • 请注意,流日志 API 操作 (ec2:*FlowLogs) 支持资源级别的权限。要创建 IAM 策略来控制流日志 API 操作的使用,您必须在语句中为资源元素使用 * 通配符,以便授予用户使用该操作的所有资源的权限。有关更多信息,请参阅 控制访问 Amazon VPC 资源

  • 如果网络接口有多个 IPv4 地址,并且流量发送到辅助私有 IPv4 地址,则流日志会在目的地 IP 地址字段中显示主要私有 IPv4 地址。

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

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

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

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

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

  • DHCP 流量。

  • 到默认 VPC 路由器的预留 IP 地址的流量。有关更多信息,请参阅 VPC 和子网大小调整

  • 在终端节点网络接口和 网络负载均衡器 网络接口之间的流量。有关更多信息,请参阅 VPC 终端节点服务 (AWS PrivateLink)