AWS VPC Flow Logs 实战:流量监控、费用分析与安全排查(2026最新教程)
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-id | AWS 账号 ID | 123456789012 |
| interface-id | 网络接口 ID | eni-0abc123def456 |
| srcaddr | 源 IP 地址 | 203.0.113.50 |
| dstaddr | 目的 IP 地址 | 10.0.1.100 |
| srcport | 源端口 | 54321 |
| dstport | 目的端口 | 443 |
| protocol | IP 协议号 | 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 Logs | S3 |
|---|---|---|
| 存储价格 | $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 | 方便识别 |
| Filter | All(或 Rejected) | 全量或仅拒绝 |
| Destination | Send to S3 | 费用分析选 S3 |
| S3 桶 ARN | arn:aws:s3:::my-vpc-flow-logs-2026 | 已创建的桶 |
| Log record format | Default | 包含所有标准字段 |
| Max aggregation interval | 1 minute | 1 分钟聚合,延迟低 |
步骤 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.5TB | CloudWatch | ~$800(存储) |
省钱设置 5 条:
- 用 Parquet 格式:比 Text 格式查询快 10 倍,存储省 60%
- 按日期分区:
PartitioningFields=year,month,day,Athena 只扫描需要的日期 - S3 生命周期策略:30 天后转 IA(省 45%),90 天后转 Glacier(省 90%)
- 只记录 REJECT:如果只关心安全问题,
traffic-type=REJECT日志量减少 90%+ - 设置 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 记录。