AWS VPC Flow Logs 实战:流量监控、费用分析与安全排查(2026最新教程)

📅 · AWS 国际版实战教程 - ChengziCloud

一句话结论

Meta Description: AWS VPC Flow Logs 完整实战教程:Flow Log 开启配置、CloudWatch/S3/Athena 三方案对比、流量费用分析、安全排查、ACL/Security Group 诊断、2026最新价格表与5大避坑指南。

本文要点
  • 前言
  • VPC Flow Logs 是什么:为什么要开
  • Flow Log 存储方案对比:CloudWatch Logs vs S3
  • 控制台实操:5 分钟开启 Flow Log
  • 流量费用分析:5 个 SQL 查询搞定
  • Flow Log 费用估算表
  • VPC Flow Logs vs VPC Reachability Analyzer vs Traffic Mirror
  • 5 个常见踩坑场景

Meta Description: AWS VPC Flow Logs 完整实战教程:Flow Log 开启配置、CloudWatch/S3/Athena 三方案对比、流量费用分析、安全排查、ACL/Security Group 诊断、2026最新价格表与5大避坑指南。

关键词:AWS VPC Flow Logs、AWS流量监控、AWS VPC日志、AWS Athena流量分析、AWS网络费用分析、AWS VPC安全排查、AWS Flow Log配置

前言

先给结论:VPC Flow Logs 是 AWS 网络层面的"黑匣子"——它记录 VPC 中每一条网络流量的五元组信息(源IP、目的IP、端口、协议、动作),配合 S3 存储 + Athena 查询,可以实现"谁在访问什么、花了多少流量费、是否有异常连接"的全链路可观测。 决策口诀:"生产环境必开 Flow Log 存 S3,搭配 Athena 做 SQL 分析;测试环境可以只开 CloudWatch Logs 用于快速排查;别在全流量模式下忽略存储成本。" 本文基于 2026 年 AWS 最新控制台实操,手把手带你配置 Flow Log、选对存储方案、用 Athena 做流量费用分析,并给出 5 个真实踩坑场景的解决方案。

一、VPC Flow Logs 是什么:为什么要开

VPC Flow Logs 是 AWS 提供的网络流量日志记录功能,可以捕获进入和离开 VPC 网络接口(ENI)的 IP 流量信息。每条 Flow Log 记录包含以下字段:

字段含义示例
account-idAWS 账号 ID123456789012
interface-id网络接口 IDeni-0abc123def456
srcaddr源 IP 地址203.0.113.50
dstaddr目的 IP 地址10.0.1.100
srcport源端口54321
dstport目的端口443
protocolIP 协议号6(TCP)
packets数据包数量150
bytes字节数25600
action接受/拒绝ACCEPT / REJECT
log-status日志状态OK / NODATA / SKIPDATA

必须开启 Flow Log 的 3 个理由:

场景没有 Flow Log 的后果开了 Flow Log 能做什么
费用异常排查不知道流量从哪来,NAT Gateway 费用飙升无从查起按源IP/目的IP聚合流量,定位费用热点
安全事件响应不知道谁在访问数据库端口,被入侵无法溯源筛选 REJECT 记录发现扫描行为,分析异常连接
合规审计等保/ISO 27001 要求网络流量可追溯Flow Log 保留 90 天满足审计要求

关键事实:VPC Flow Log 本身不收费(记录动作免费),但存储和查询会产生费用。CloudWatch Logs 存储 $0.50/GB,S3 存储 $0.023/GB/月,Athena 查询 $5/TB。选错存储方案,一个月轻松烧掉 $50+。

二、Flow Log 存储方案对比:CloudWatch Logs vs S3

AWS 提供两种 Flow Log 存储目的地,选对方案能省 90% 的存储费用:

对比维度CloudWatch LogsS3
存储价格$0.50/GB(摄入) + $0.03/GB/月(存储)$0.023/GB/月(标准) / $0.0125/GB/月(IA)
查询方式CloudWatch Logs Insights(有限的查询语法)Athena SQL(完整 SQL 支持)
数据保留默认永久保留,可设保留期永久保留,可设生命周期策略自动转 IA/Glacier
实时性近实时(1~5 分钟延迟)批量交付(约 5~10 分钟一批)
适合场景快速排查、实时告警长期存储、费用分析、合规审计
100GB/月存储费~$53(摄入 $50 + 存储 $3)~$2.30
1TB/月存储费~$530~$23

结论:如果需要长期保留或做 SQL 分析,必须选 S3——存储成本相差 20 倍以上。CloudWatch Logs 适合短期排查(保留 7~14 天),不适合做费用分析。

方案 A:Flow Log → CloudWatch Logs(快速排查)


// 创建 CloudWatch Logs 日志组
aws logs create-log-group \
  --log-group-name /vpc/flowlogs/production \
  --region us-east-1

// 为 VPC 创建 Flow Log(仅记录 REJECT 流量,减少日志量)
aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-0abc123def456 \
  --traffic-type REJECT \
  --log-destination-type cloud-watch-logs \
  --log-group-name /vpc/flowlogs/production \
  --deliver-logs-permission-arn arn:aws:iam::123456789012:role/flowlogs-role

traffic-type 选择建议:

类型日志量适用场景
ACCEPT中等只看成功连接,排查"谁访问了什么"
REJECT最小只看被拒绝的连接,排查安全问题
ALL最大全量记录,适合审计场景,但存储成本最高

方案 B:Flow Log → S3 + Athena(费用分析推荐)


// 创建 S3 桶存放 Flow Log
aws s3 mb s3://my-vpc-flow-logs-2026 --region us-east-1

// 为 VPC 创建 Flow Log(记录全量流量,存到 S3)
aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-0abc123def456 \
  --traffic-type ALL \
  --log-destination-type s3 \
  --log-destination arn:aws:s3:::my-vpc-flow-logs-2026/flow-logs/ \
  --s3-destination-options FileFormat=parquet,PartitioningFields=year,month,day

关键参数:FileFormat=parquet + PartitioningFields=year,month,day。Parquet 格式比默认的 Text 格式查询快 10 倍、存储省 60%;按日期分区让 Athena 只扫描需要的日期,查询费用大幅降低。

三、控制台实操:5 分钟开启 Flow Log

步骤 1:进入 VPC 控制台

登录 AWS 控制台 → VPC → 选择目标 VPC → 标签栏点击 "Flow Logs" → "Create flow log"。

步骤 2:配置 Flow Log

配置项推荐值说明
命名prod-vpc-flowlog方便识别
FilterAll(或 Rejected)全量或仅拒绝
DestinationSend to S3费用分析选 S3
S3 桶 ARNarn:aws:s3:::my-vpc-flow-logs-2026已创建的桶
Log record formatDefault包含所有标准字段
Max aggregation interval1 minute1 分钟聚合,延迟低

步骤 3:等待数据采集

Flow Log 启用后约 5~10 分钟开始写入数据。验证方式:


// 检查 Flow Log 状态
aws ec2 describe-flow-logs \
  --filter Name=resource-id,Values=vpc-0abc123def456 \
  --query 'FlowLogs[*].[FlowLogId,FlowLogStatus,TrafficType]' \
  --output table

// 检查 S3 桶是否有数据写入
aws s3 ls s3://my-vpc-flow-logs-2026/flow-logs/ --recursive --summarize

步骤 4:Athena 建表查询


// 在 Athena 中创建 Flow Log 表
CREATE EXTERNAL TABLE vpc_flow_logs (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol int,
  packets bigint,
  bytes bigint,
  start bigint,
  `end` bigint,
  action string,
  log_status string
)
PARTITIONED BY (year string, month string, day string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
LOCATION 's3://my-vpc-flow-logs-2026/flow-logs/'
TBLPROPERTIES ('parquet.compression'='SNAPPY');

四、流量费用分析:5 个 SQL 查询搞定

查询 1:Top 10 流量消耗 IP(找费用热点)


SELECT srcaddr, dstaddr, dstport,
       SUM(bytes) / 1024 / 1024 AS total_mb,
       COUNT(*) AS flow_count
FROM vpc_flow_logs
WHERE year = '2026' AND month = '08' AND day = '25'
  AND action = 'ACCEPT'
GROUP BY srcaddr, dstaddr, dstport
ORDER BY total_mb DESC
LIMIT 10;

典型发现:NAT Gateway 的公网出流量 IP 往往是费用大户——一个被攻击的 EC2 实例可能在一天内产生 500GB 出流量,按 $0.09/GB 计算就是 $45。

查询 2:按端口统计流量分布


SELECT dstport,
       CASE dstport
         WHEN 80 THEN 'HTTP'
         WHEN 443 THEN 'HTTPS'
         WHEN 3306 THEN 'MySQL'
         WHEN 5432 THEN 'PostgreSQL'
         WHEN 6379 THEN 'Redis'
         WHEN 22 THEN 'SSH'
         ELSE 'Other'
       END AS service,
       SUM(bytes) / 1024 / 1024 AS total_mb
FROM vpc_flow_logs
WHERE year = '2026' AND month = '08'
  AND action = 'ACCEPT'
GROUP BY dstport
ORDER BY total_mb DESC;

查询 3:NAT Gateway 流量拆分(费用归因)


// NAT Gateway 费用 = 处理费 $0.045/h + 数据处理费 $0.045/GB
// 先算各 IP 的出流量占比
SELECT srcaddr,
       SUM(bytes) / 1024 / 1024 / 1024 AS out_gb,
       SUM(bytes) / 1024 / 1024 / 1024 * 0.045 AS estimated_nat_cost
FROM vpc_flow_logs
WHERE year = '2026' AND month = '08'
  AND dstaddr LIKE ':%'  -- 公网 IP
  AND action = 'ACCEPT'
GROUP BY srcaddr
ORDER BY out_gb DESC;

查询 4:异常连接检测(安全排查)


// 查找非常规时间段的 SSH/RDP 连接
SELECT srcaddr, dstaddr, dstport, start,
       FROM_UNIXTIME(start) AS connect_time
FROM vpc_flow_logs
WHERE year = '2026' AND month = '08' AND day = '25'
  AND dstport IN (22, 3389)
  AND action = 'ACCEPT'
  AND (FROM_UNIXTIME(start) LIKE '%02:%'  -- 凌晨 2-4 点
    OR FROM_UNIXTIME(start) LIKE '%03:%')
ORDER BY start;

查询 5:REJECT 流量分析(安全组/ACL 诊断)


// 找到被拒绝最多的来源 IP(可能是扫描器)
SELECT srcaddr, dstport, COUNT(*) AS reject_count
FROM vpc_flow_logs
WHERE year = '2026' AND month = '08'
  AND action = 'REJECT'
GROUP BY srcaddr, dstport
HAVING COUNT(*) > 100
ORDER BY reject_count DESC
LIMIT 20;

五、Flow Log 费用估算表

以一个中等规模生产环境为例(单 VPC、3 个子网、10 个 ENI):

资源月流量存储方案月费用
VPC Flow Log(ALL 流量)~50GB/天 = 1.5TB/月S3 Standard$34.50(存储)
VPC Flow Log(ALL 流量)~50GB/天 = 1.5TB/月S3 Standard-IA$18.75(存储)
Athena 查询~100 次/月,每次扫描 5GB—$2.50($5/TB × 0.5TB)
CloudWatch Logs(对比)1.5TBCloudWatch~$800(存储)

省钱设置 5 条:

  1. 用 Parquet 格式:比 Text 格式查询快 10 倍,存储省 60%
  2. 按日期分区:PartitioningFields=year,month,day,Athena 只扫描需要的日期
  3. S3 生命周期策略:30 天后转 IA(省 45%),90 天后转 Glacier(省 90%)
  4. 只记录 REJECT:如果只关心安全问题,traffic-type=REJECT 日志量减少 90%+
  5. 设置 Athena 查询限制:athena.max_bytes_scanned_per_query 设为 10GB,防止全表扫描烧钱

六、VPC Flow Logs vs VPC Reachability Analyzer vs Traffic Mirror

工具功能费用适用场景
VPC Flow Log记录实际流量日志存储费 $0.023/GB费用分析、安全审计、合规
VPC Reachability Analyzer分析网络可达性(静态)免费网络架构验证、排障
VPC Traffic Mirror镜像流量到检测设备$0.015/GB入侵检测、深度包分析
VPC Reachability Analysis端到端路径分析免费安全组/ACL 配置验证

决策口诀:"日常监控用 Flow Log,架构验证用 Reachability Analyzer,深度检测用 Traffic Mirror。"

七、5 个常见踩坑场景

坑 1:Flow Log 显示 NODATA 状态

原因:VPC 内没有活跃的网络接口,或者 Flow Log 配置的 Traffic Type 不匹配。例如只设了 ACCEPT,但所有流量都被 Security Group 拒绝。

解决:将 Traffic Type 改为 ALL,确认 VPC 内有活跃的 ENI。

坑 2:Flow Log 费用比预想高 10 倍

原因:默认 FileFormat=plain-text,未启用压缩,存储膨胀严重。

解决:重新创建 Flow Log 时指定 FileFormat=parquet,PartitioningFields=year,month,day。已有的 Text 格式 Flow Log 需要删除重建(不支持就地转换格式)。

坑 3:Athena 查询超时或费用爆炸

原因:查询未指定分区条件,Athena 扫描全量数据。

解决:所有 Athena 查询必须带 WHERE year = '...' AND month = '...' AND day = '...' 条件。建议设置 Athena 工作组的 bytes_scanned_cutoff_per_query 为 10GB。

坑 4:Flow Log 数据延迟超过 10 分钟

原因:Max aggregation interval 设为 10 分钟(默认值),流量日志按 10 分钟窗口聚合后批量写入。

解决:将 Max aggregation interval 改为 1 minute,实测延迟降至 1~3 分钟。

坑 5:跨账号 Flow Log 无法写入目标 S3 桶

原因:目标 S3 桶在另一个 AWS 账号,缺少跨账号写入权限。

解决:在目标 S3 桶的 Bucket Policy 中添加允许 Flow Log 服务账号写入的策略:


{
  "Effect": "Allow",
  "Principal": {"Service": "vpc-flow-logs.amazonaws.com"},
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::my-vpc-flow-logs-2026/flow-logs/*"
}

总结

VPC Flow Logs 是 AWS 网络可观测性的基础设施:S3 存储 + Parquet 格式 + Athena SQL 查询是费用分析的黄金组合,存储成本仅为 CloudWatch Logs 的 1/20;设置 30 天 IA 生命周期 + Athena 查询限制 10GB 可以将月度费用控制在 $5 以内。记住口诀:"生产必开 Flow Log,存 S3 用 Parquet,Athena 查费用,生命周期省存储。" 配合 VPC Reachability Analyzer 做架构验证、Security Group 最小化开放端口,构建完整的网络可观测与安全体系。还没有 AWS 账号的朋友,建议先从免费套餐教程开始,零成本体验 AWS 的网络监控能力。

🚀 需要 AWS 国际版账号?通过 3.chengzicloud.cloud 获取最新注册教程与专属优惠,助你轻松上云。

⚠️ 文中价格为 2026 年参考价,实际费用随区域和官方调价变动,请以 AWS 官网为准。

本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多

常见问题(FAQ)

VPC Flow Log 本身收费吗?

不收。Flow Log 的记录动作免费,但存储到 CloudWatch Logs 或 S3 会产生存储费用,Athena 查询会产生计算费用。

Flow Log 能记录哪些流量?

能记录通过 VPC 网络接口(ENI)的所有 IP 流量,包括 VPC 内实例之间、实例与公网之间、VPC 对等连接的流量。不能记录同一子网内通过本地路由的流量(如同一 ENI 的流量)。

Flow Log 的日志保留多久?

CloudWatch Logs 默认永久保留(可设置保留期),S3 默认永久保留(可通过生命周期策略自动删除或转 Glacier)。建议设置 S3 生命周期策略:30 天转 IA,90 天转 Glacier。

一个 VPC 可以创建多少个 Flow Log?

每个 VPC 最多 5 个 Flow Log。如果需要对不同子网用不同的流量过滤(如公网子网记录 ALL,内网子网只记录 REJECT),可以通过对子网单独创建 Flow Log 实现。

Flow Log 数据能导出到其他系统吗?

可以。S3 中的 Flow Log 可以通过 Athena 查询后导出到 CSV,也可以配置 S3 Event Notification + Lambda 实现实时处理,或者用 Amazon OpenSearch 做可视化分析。

Flow Log 记录的是哪个方向的流量?

双向都记录。每条 Flow Log 记录的是一个方向的流量:出站流量(实例 → 外部)和入站流量(外部 → 实例)各一条记录。同一个 TCP 连接会产生 2 条 Flow Log 记录。