JohnMaldonado/aws-vpc-traffic-analysis-flowlogs-athena
GitHub: JohnMaldonado/aws-vpc-traffic-analysis-flowlogs-athena
一个基于 Terraform、Parquet 与 Athena 的 AWS VPC 流量分析方案,实现低成本、服务器less 的安全审计。
Stars: 0 | Forks: 0
# 🔍 分析 AWS VPC 流量 — Flow Logs + Athena
使用 Terraform 基础设施即代码(IaC)在 AWS 上捕获并分析网络流量,采用 Parquet 格式的 VPC Flow Logs 和 Amazon Athena 进行 SQL 查询。
## 📋 项目功能
部署完整的 VPC,包含两个 EC2 实例(公有与私有),启用 Parquet 格式的 VPC Flow Logs 并输出到 S3,并创建带有分区投影的 Athena 表以通过 SQL 分析流量——无需服务器、无需数据管道,仅按扫描量付费。
## 🏗️ 架构

## 📁 项目结构
```
aws-vpc-traffic-analysis-flowlogs-athena/
├── terraform/
│ ├── main.tf # Recursos AWS: VPC, EC2, S3, Flow Log, Athena
│ ├── variables.tf # Parámetros configurables
│ └── outputs.tf # IPs, bucket names, comandos SSH
├── queries/
│ ├── flow_logs_analysis.sql # 5 queries de análisis de seguridad
│ └── traffic_generator.sh # Script para generar tráfico en EC2
└── docs/
└── architecture.png
```
## ⚡ 部署资源
| 资源 | 描述 |
|---|---|
| VPC | 10.15.0.0/16 的私有网络,启用 DNS |
| 公有子网 | 10.15.1.0/24 — 带有公网 IP 的 EC2 |
| 私有子网 | 10.15.2.0/24 — 无公网 IP 的 EC2 |
| 互联网网关 | 双向互联网访问 |
| NAT 网关 | 为私有子网提供出站互联网 |
| EC2 x2 | Amazon Linux 2023,t3.micro |
| S3(Flow Logs) | 加密的 Parquet 存储(AES-256) |
| S3(Athena 结果) | 查询结果输出 |
| VPC Flow Log | 捕获 ALL(ACCEPT + REJECT)并以 Parquet 格式记录 |
| Athena 数据库 | `jhon_a15_flowlogs_db`,启用分区投影 |
| Athena 工作组 | 配置输出至 S3 |
| 7 个预置查询 | DDL 语句与 5 条安全分析查询 |
## 🔍 包含的分析查询
```
-- 1. Top 10 IPs por volumen de tráfico
SELECT srcaddr, COUNT(*), SUM(bytes) FROM vpc_flow_logs
GROUP BY srcaddr ORDER BY SUM(bytes) DESC LIMIT 10;
-- 2. Todos los REJECTs (intentos bloqueados)
SELECT from_unixtime(start), srcaddr, dstport, action
FROM vpc_flow_logs WHERE action = 'REJECT';
-- 3. Tráfico entre IPs específicas (bidireccional)
SELECT * FROM vpc_flow_logs
WHERE (srcaddr = 'X' AND dstaddr = 'Y') OR (srcaddr = 'Y' AND dstaddr = 'X');
-- 4. Conexiones SSH al puerto 22
SELECT srcaddr, action, tcp_flags FROM vpc_flow_logs WHERE dstport = 22;
-- 5. Tráfico por protocolo (TCP/UDP/ICMP)
SELECT protocol, COUNT(*), SUM(bytes) FROM vpc_flow_logs GROUP BY protocol;
```
## 🚀 部署步骤
### 前提条件
- Terraform >= 1.3
- 已配置的 AWS CLI(`aws configure`)
- 已生成的 SSH 密钥对
### 步骤
```
# 克隆仓库
git clone https://github.com/JohnMaldonado/aws-vpc-traffic-analysis-flowlogs-athena.git
cd aws-vpc-traffic-analysis-flowlogs-athena/terraform
# 创建 terraform.tfvars 并使用您的 SSH 密钥(不要上传到仓库)
echo 'public_key_material = "'$(cat ~/.ssh/id_ed25519.pub)'"' > terraform.tfvars
# 初始化并应用
terraform init
terraform apply -auto-approve
# 查看输出(IP、SSH 命令、存储桶)
terraform output
```
### 生成测试流量
```
# SSH 到公共 EC2
ssh -i ~/.ssh/id_ed25519 ec2-user@$(terraform output -raw public_ec2_public_ip)
# 从公共 EC2:
ping -c 20 # genera flows ICMP
wget -q -O /dev/null https://amazon.com # genera flows TCP/HTTPS
nc -zv 443 # genera flows REJECT
```
### 验证 S3 中的日志(等待约 10 分钟)
```
aws s3 ls s3://$(terraform output -raw flow_logs_s3_bucket)/AWSLogs/ --recursive | head -5
```
## 🔎 配置 Athena
1. 打开 Athena 控制台 → 工作组 `primary`
2. 设置 → 查询结果位置 → `s3:///query-results/`
3. 运行 `queries/flow_logs_analysis.sql` 中的 DDL
4. 运行 5 条分析查询
## 💡 设计决策
**为何选择 Parquet 而非 CSV?**
Parquet 是列式存储 — Athena 仅读取所查询的列。结果:扫描数据量减少约 80%,成本降低约 80%。本实验中每次查询仅扫描约 20KB。
**为何使用分区投影?**
无需每次生成新日志后运行 `MSCK REPAIR TABLE`,Athena 会自动从 S3 路径推断分区。
**为何采用堡垒主机模式?**
私有 EC2 无公网 IP,仅可通过公有 EC2 跳转访问(SSH 跳板)。这将攻击面降至最低:仅一个入口点暴露于 SSH。
## ⚠️ 清理资源
```
terraform destroy -auto-approve
```
## 📊 预估成本(实验环境)
| 资源 | 预估成本(约 4 小时) |
|---|---|
| NAT 网关 | ~$0.18 |
| EC2 x2 t3.micro | ~$0.08 |
| S3 存储 | < $0.001 |
| Athena 查询 | < $0.001 |
| **总计** | **约 $0.26** |
标签:Amazon Linux 2023, Athena, AWS, DPI, EC2, ECS, Flow Logs, IaC, Internet Gateway, NAT Gateway, Parquet, S3 加密, SQL, Terraform, VPC, 分区投影, 多线程, 按量计费, 无服务器分析, 服务器监控, 漏洞利用检测, 系统分析, 系统审计, 网络分析