如何使用 CloudWatch Logs Insights 分析自定义 VPC 流日志?

5 分钟阅读
0

我已经配置了自定义 VPC 流日志。如何使用 Amazon CloudWatch Logs Insights 发现模式和趋势?

简短描述

您可以使用 CloudWatch Logs Insights 来分析 VPC 流日志。CloudWatch Log Insights 会自动发现许多 Amazon 提供的日志中的字段以及 JSON 格式的录入事件,以便轻松构建查询和日志探索。采用默认格式的 VPC 流日志将由 CloudWatch Logs Insights 自动发现。

但是,VPC 流日志是以自定义格式部署的。因此,它们不会被自动发现,您必须修改查询。本文提供了几个查询示例,您可以自定义和扩展这些查询以匹配您的使用案例。

此自定义 VPC 流日志格式用于:

${account-id} ${vpc-id} ${subnet-id} ${interface-id} ${instance-id} ${srcaddr} ${srcport} ${dstaddr} ${dstport} ${protocol} ${packets} ${bytes} ${action} ${log-status} ${start} ${end} ${flow-direction} ${traffic-path} ${tcp-flags} ${pkt-srcaddr} ${pkt-src-aws-service} ${pkt-dstaddr} ${pkt-dst-aws-service} ${region} ${az-id} ${sublocation-type} ${sublocation-id}

解决方法

检索最新的 VPC 流日志

由于 CloudWatch Logs Insights 不会自动发现日志字段,因此您必须使用 parse 关键字来隔离所需的字段。在此查询中,结果按流日志事件的开启时间排序,并限制为最近的两个日志条目。

查询

#Retrieve latest custom VPC Flow Logs
parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| sort start desc
| limit 2

结果

account_id vpc_id  subnet_id interface_idinstance_idsrcaddrsrcport
123456789012 vpc-0b69ce8d04278ddd subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e172.31.0.10455125
123456789012 vpc-0b69ce8d04278ddd1 subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e91.240.118.8149422

按源/目标 IP 地址对汇总数据传输

接下来,按源/目标 IP 地址对汇总网络流量。在此示例中,sum 统计数据用于对 bytes 字段执行聚合。这将计算主机之间传输的数据的累积总数。如需更多上下文,则包含 flow_direction。然后,此聚合的结果将临时分配给 Data_Transfered 字段。然后,按照 Data_Transfered 的降序对结果进行排序,并返回两个最大的对。

查询

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| stats sum(bytes) as Data_Transferred by srcaddr, dstaddr, flow_direction
| sort by Data_Transferred desc
| limit 2

结果

srcaddrdstaddrflow_directionData_Transferred
172.31.1.2473.230.172.154egress346952038
172.31.0.463.230.172.154egress343799447

按 EC2 实例 ID 分析数据传输

您可以使用自定义 VPC 流日志直接分析 Amazon Elastic Compute Cloud (Amazon EC2) 实例 ID。根据之前的查询,您现在可以使用 instance_id 字段来确定最活跃的 EC2 实例。

查询

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| stats sum(bytes) as Data_Transferred by instance_id
| sort by Data_Transferred desc
| limit 5

结果

instance_idData_Transferred
-1443477306
i-03205758c9203c979517558754
i-0ae33894105aa500c324629414
i-01506ab9e9e90749d198063232
i-0724007fef3cb06f354847643

筛选已被拒绝的 SSH 流量

为了更好地了解被您的安全组和网络访问控制列表 (ACL) 拒绝的流量,请筛选 reject VPC 流日志。您可以进一步缩小此筛选条件的范围,以包括协议和目标端口。要识别在 SSH 流量上已被拒绝的主机,请扩展筛选条件以包括 TCP 协议(例如,协议 6)和目标端口为 22 的流量。

查询

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter action = "REJECT" and protocol = 6 and dstport = 22
| stats sum(bytes) as SSH_Traffic_Volume by srcaddr
| sort by SSH_Traffic_Volume desc
| limit 2

结果

srcaddrSSH_Traffic_Volume
23.95.222.129160
179.43.167.7480

隔离特定源/目标对的 HTTP 数据流

要使用 CloudWatch Logs Insights 进一步调查数据趋势,请隔离两个 IP 地址之间的双向流量。在此查询中,["172.31.1.247"," 172.31.11.212"] 返回使用 IP 地址作为源 IP 地址或目标 IP 地址的流日志。为了隔离 HTTP 流量,filter 语句将 VPC 流日录入事件与协议 6 (TCP) 和端口 80 进行匹配。使用 display 关键字返回所有可用字段的子集。

查询

#HTTP Data Stream for Specific Source/Destination Pair
parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter srcaddr in ["172.31.1.247","172.31.11.212"] and dstaddr in ["172.31.1.247","172.31.11.212"] and protocol = 6 and (dstport = 80 or srcport=80)
| display interface_id,srcaddr, srcport, dstaddr, dstport, protocol, bytes, action, log_status, start, end, flow_direction, tcp_flags
| sort by start desc
| limit 2

结果

interface_idsrcaddrsrcportdstaddrdstportprotocolbytesactionlog_status
eni-0b74120275654905e172.31.11.21280172.31.1.2472937665160876ACCEPTOK
eni-0b74120275654905e172.31.1.24729376172.31.11.21280697380ACCEPTOK

隔离特定源/目标对的 HTTP 数据流

您可以使用 CloudWatch Logs Insights 将结果可视化为条形图或饼图。如果结果包含 bin () 函数,则返回带有时间戳的查询结果。然后可以使用折线图或堆叠面积图可视化此时间序列

在上一个查询的基础上,您可以使用统计总和(字节)作为 Data_Trasferred by bin(1m) 来计算每隔一分钟传输的累计数据。要查看此可视化,请在 CloudWatch Logs Insights 控制台中的日志可视化表之间切换。

查询

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter srcaddr in ["172.31.1.247","172.31.11.212"] and dstaddr in ["172.31.1.247","172.31.11.212"] and protocol = 6 and (dstport = 80 or srcport=80)
| stats sum(bytes) as Data_Transferred by bin(1m)

结果

bin (1m)Data_Transferred
2022-04-01 15:23:00 .00017225787
2022-04-01 15:21:00 .00017724499
2022-04-01 15:20:00 .0001125500
2022-04-01 15:19:00 .000101525
2022-04-01 15:18:00 .00081376

相关信息

支持的日志和发现的字段

使用 CloudWatch Logs Insights 进行日志数据分析

CloudWatch Logs Insights 查询命令

教程:运行生成时间序列可视化的查询

AWS 官方
AWS 官方已更新 2 年前