AWS WAF日志分析基础架构
此项目包括:AWS WAF 提供分析和可视化日志的基础架构。CloudFront + S3 网站托管和WAF 日志Athena 一个全面的分析解决方案。
🏗️ 体系结构
graph TD
A[CloudFront Distribution] --> B[S3 Website Bucket]
A --> C[WAF Web ACL]
C --> D[Kinesis Firehose]
D --> E[S3 WAF Logs Bucket]
E --> F[Glue Catalog]
F --> G[Athena Table]
G --> H[Lambda Function]
H --> I[Athena Query Results]🚀 主要功能
1.网站托管
- 云前端+S3:快速内容分发
- HTTPS 自动重定向:安全通信
- 源访问控制(OAC): S3 提高时段安全性
2. WAF 安全性
- AWS WAF v2:全面的安全保护
- 托管规则集:自动检测常见攻击模式
- 记录:所有请求的详细日志
3.日志分析系统
- Kinesis消防水带:实时日志分发
- S3 分区:有效的日志保存(按年/月/日/小时)
- 胶水目录:元数据管理
- 雅典娜: SQL 查询日志分析
4. Lambda 関数
- Athena查询功能:执行自定义查询
- MCP服务器:模型上下文协议対応
📊 WAF 日志表配置
表格信息
- 表名称:
waf_logs - 数据库名称:
waf_logs_database - 数据格式:JSON
- 分区:年/月/日/时间别
主要列
|列名|数据类型|说明| | ------------------- | -------- | -------------------------------------------- | | timestamp | bigint 请求的时间戳(毫秒) | action | string 执行的动作(ALLOW/BLOCK/COUNT等) | httprequest | struct | HTTP 请求信息(IP、URI、方法等) | terminatingruleid | string |结束规则的ID | | webaclid | string | WAF Web ACL 的,之ID |
分区键
year: 年(YYYY 形式)month: 月(MM 形式、2 桁)day: 日(DD 形式、2 桁)hour:时间(HH形式、2桁)
🛠️ 安装,安装
前提条件
- Node.js 18 以上
- AWS CLI 已配置
- AWS CDK v2
安装
# 依存関係のインストール
npm install
# TypeScriptのコンパイル
npm run build部署
# CDKブートストラップ(初回のみ)
npx cdk bootstrap
# スタックのデプロイ
npx cdk deploy📝 使用例
基本的WAF 日志分析查询
SELECT
from_unixtime(timestamp/1000) as request_time,
httprequest.clientip as client_ip,
httprequest.country as country,
httprequest.httpmethod as method,
httprequest.uri as uri,
action,
terminatingruleid
FROM waf_logs_database.waf_logs
WHERE year='2025' AND month='01'
LIMIT 100;🔧 开发指令
# TypeScriptのコンパイル
npm run build
# ファイル変更の監視
npm run watch
# テストの実行
npm run test
# CDKコマンド
npx cdk synth # CloudFormationテンプレートの生成
npx cdk diff # デプロイ前の差分確認
npx cdk deploy # スタックのデプロイ
npx cdk destroy # スタックの削除📁 项目结构
infra/
├── bin/
│ └── infra.ts # CDKアプリケーションエントリーポイント
├── lib/
│ └── infra-stack.ts # メインのCDKスタック定義
├── lambda/
│ └── athena-query.ts # Athenaクエリ実行Lambda関数
├── website/
│ ├── index.html # メインウェブサイト
│ └── error.html # エラーページ
├── test/
│ └── infra.test.ts # テストファイル
├── package.json # 依存関係定義
├── cdk.json # CDK設定
└── tsconfig.json # TypeScript設定🔍 出力値
部署后,将输出以下信息:
- 网站BucketName:用于网站托管S3 时段名称
- 分布域Name: CloudFront 分发域名
- 分发URL: CloudFront 分配的URL
- WebACLArn: WAF Web ACL 的,之ARN
- 雅典娜成绩奖金名称: Athena 查询结果用S3 时段名称
- 胶水数据库名称: Glue 数据库名称
- Athena工作组名称: Athena 工作组名称
- AthenaQuery函数: Athena 查询Lambda 单击功能区上ARN
- 样本AthenaQuery:示例查询
🔒 安全性
- S3 铲斗:全部私有设置
- CloudFront:源访问控制(OAC)使用
- 空军:受管理规则集保护
- 国际机械师协会:根据最小权限原则设置权限
📈 监视和日志
- WAF 记录:所有请求S3 保存到
- 云监控: WAF 自动度量
- 雅典娜: SQL 查询详细分析
📄 许可证
这个项目MIT 在许可证下公开。
