亚马逊AWS官方博客
通过 VPC 流日志中额外的元数据加深对网络流量的了解
通过 Amazon Virtual Private Cloud 的流日志,您可以捕获有关传入和传出 VPC 中网络接口的 IP 流量的信息。流日志数据可发布到 Amazon CloudWatch Logs 或 Amazon Simple Storage Service (S3)。
自 2015 年我们推出 VPC 流日志以来,您一直在使用它来处理各种使用案例,例如解决 VPC 中的连接问题、入侵检测、异常检测或归档,以实现合规性。迄今为止,VPC 流日志提供的信息包括源 IP、源端口、目标 IP、目标端口、操作(接受和拒绝)以及状态。启用后,VPC 流日志的条目显示效果如下。
虽然这些信息足以帮您理解大多数流,但需要额外的计算和查找才能将 IP 地址与实例 ID 匹配,或者需要猜测流的方向性才能得出有意义的结论。
今天,我们宣布可以在流日志记录中包含额外的元数据,以便更好地了解网络流量。通过减少从日志数据中提取有意义信息所需的计算或查找次数,经过充实的流日志将允许您简化脚本,或者完全消除后期处理的需要。
当您创建新的 VPC 流日志时,除现有字段外,您现在还可以选择添加以下元数据:
-
vpc-id
:包含源弹性网络接口 (ENI) 的 VPC 的 ID。 -
subnet-id
:包含源 ENI 的子网的 ID。 -
instance-id
:与源接口关联的实例的 Amazon Elastic Compute Cloud (EC2) 实例 ID。如果 ENI 由 AWS 服务(如 AWS PrivateLink、NAT 网关、网络负载均衡器等)设置,则此字段为“-
” -
tcp-flags
:在聚合期间内观察到的 TCP 标志的位掩码。例如,FIN
是 0x01 (1)、SYN
是 0x02 (2)、ACK
是 0x10 (16),SYN
+ACK
是 0x12 (18) 等等(这些位在 RFC793“传输控制协议规范”的“控制位”部分中指定)。
这让您可以理解谁发起或终止了连接。TCP 使用三次握手建立连接。连接方机器将SYN
数据包发送到目的地,目的地使用SYN + ACK
作为答复,最后,连接方机器发送ACK
。在流日志中,握手显示为两行,tcp-flags
值为2 (SYN
),18 (SYN + ACK
)。ACK
仅会在附带有 SYN 时报告(否则会造成过于严重的噪声,无法过滤掉)。 -
type
:流量类型:IPV4、IPV6 或 Elastic Fabric Adapter。 -
pkt-srcaddr
:源的数据包级 IP 地址。您通常要将此字段与srcaddr
结合使用,以区分流量流通过的中间层的 IP 地址,例如 NAT 网关。 -
pkt-dstaddr
:目标的数据包级 IP 地址,与上一项类似,但是表示的是目标 IP 地址。
要创建 VPC 流日志,您可以使用 AWS 管理控制台、AWS 命令行界面 (CLI) 或 CreateFlowLogs API,并选择使用这些字段的哪些附加信息和使用顺序,例如:
您也可以使用 AWS 命令行界面 (CLI),如下所示:
$ aws ec2 create-flow-logs --resource-type VPC \
--region eu-west-1 \
--resource-ids vpc-12345678 \
--traffic-type ALL \
--log-destination-type s3 \
--log-destination arn:aws:s3:::sst-vpc-demo \
--log-format '${version} ${vpc-id} ${subnet-id} ${instance-id} ${interface-id} ${account-id} ${type} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${pkt-srcaddr} ${pkt-dstaddr} ${protocol} ${bytes} ${packets} ${start} ${end} ${action} ${tcp-flags} ${log-status}'
# be sure to replace the bucket name and VPC ID !
{
"ClientToken": "1A....HoP=",
"FlowLogIds": [
"fl-12345678123456789"
],
"Unsuccessful": []
}
内容经过充实的 VPC 流日志会传送到 S3 中。我们将自动添加必要的 S3 存储桶策略,以授权 VPC 流日志写入您的 S3 存储桶。VPC 流日志不会捕获网络接口的实时日志流,可能需要延迟几分钟才能开始收集数据并将数据发布到所选目标。您的日志最终会在 S3 上可用,路径为:s3://<bucket name>/AWSLogs/<account id>/vpcflowlogs/<region>/<year>/<month>/<day>/
从我的笔记本电脑(IP 地址为 90.90.0.200)到 EC2 实例的 SSH 连接如下所示:
3 vpc-exxxxxx2 subnet-8xxxxf3 i-0bfxxxxxxaf eni-08xxxxxxa5 48xxxxxx93 IPv4 172.31.22.145 90.90.0.200 22 62897 172.31.22.145 90.90.0.200 6 5225 24 1566328660 1566328672 ACCEPT 18 OK
3 vpc-exxxxxx2 subnet-8xxxxf3 i-0bfxxxxxxaf eni-08xxxxxxa5 48xxxxxx93 IPv4 90.90.0.200 172.31.22.145 62897 22 90.90.0.200 172.31.22.145 6 4877 29 1566328660 1566328672 ACCEPT 2 OK
172.31.22.145
是 EC2 实例的私有 IP 地址,也就是您在实例上键入 ifconfig
时会看到的 IP 地址。 在聚合期间,所有标志都会执行“OR”(逻辑或)运算。如果连接时间很短,SYN
和 FIN
(3) 以及 SYN
+ACK
和 FIN
(19) 可能都会在相同的行中设置。
创建流日志后,您不能再添加额外的字段,也不能再修改日志结构,以防意外破坏使用此数据的脚本。如需执行任何修改,您都必须删除并重新创建 VPC 流日志。您无需额外付费即可在 VPC 流日志中捕获额外的信息,只需按照标准 VPC 流日志定价付费即可,切记,在选择所有字段时,内容经过充实的 VPC 流日志记录可能会占用更多存储空间。 我们建议您仅选择与您的使用案例相关的字段。
目前可以使用 VPC 流日志的所有区域均可使用内容经过充实的 VPC 流日志,您可以立即开始体验这一新版功能。
补充说明:据团队说,他们还在竭力为这个日志添加更多元数据,请继续关注最新动态。