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 分析流量——无需服务器、无需数据管道,仅按扫描量付费。 ## 🏗️ 架构 ![架构](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/788c115a5e081202.png) ## 📁 项目结构 ``` 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, 分区投影, 多线程, 按量计费, 无服务器分析, 服务器监控, 漏洞利用检测, 系统分析, 系统审计, 网络分析