duranruizsantiago-lang/cloudguard
GitHub: duranruizsantiago-lang/cloudguard
CloudGuard 是一款基于无服务器架构的 AWS 安全态势扫描器,通过自动化的 CIS 基准检查帮助团队发现云资源配置中的安全风险。
Stars: 0 | Forks: 0
🛡️ CloudGuard
Automated AWS Security Posture Scanner — Serverless • Event-Driven • IaC
## 概述
CloudGuard 是一款采用无服务器架构构建的**生产级 AWS 安全态势扫描器**。它会根据安全最佳实践和 CIS 基准自动评估您的 AWS 资源——检测公开的 S3 存储桶、开放的安全组、IAM 配置错误等。
它完全以基础设施即代码(Terraform)的形式部署,通过 EventBridge 定期运行,将扫描结果存储在 DynamoDB 中,并通过 SNS 对关键问题发出警报。API Gateway 负责公开扫描结果并支持按需扫描。
## 架构
```
┌──────────────────────┐
│ EventBridge Rule │
│ (rate: 24 hours) │
└──────────┬───────────┘
│ trigger
┌──────────▼───────────┐
│ Lambda: Scanner │
│ (Python 3.12) │
│ ┌────────────────┐ │
│ │ S3 Scanner │ │
│ │ SG Scanner │ │
│ │ IAM Scanner │ │
│ │ Report Gen │ │
│ └────────────────┘ │
└──┬────────┬───────────┘
│ │
┌─────────────▼─┐ ┌──▼──────────────┐
│ DynamoDB │ │ SNS Topic │
│ Findings │ │ Critical Alerts │
│ Table │ │ → Email │
└───────────────┘ └───────────────────┘
┌──────────────────────────────────────────────────────┐
│ API Gateway (HTTP) │
│ GET /scans → Lambda: API │
│ GET /scans/{id} → Lambda: API │
│ POST /scan → Lambda: API (on-demand) │
└──────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────┐
│ CloudWatch Dashboard │
│ Lambda metrics + Logs (30 day retention) │
└──────────────────────────────────────────────────────┘
```
## 安全检查
### S3 存储桶
| 检查项 | 严重程度 | CIS |
|-------|----------|-----|
| 公开访问(ACL、策略、阻止公开访问) | 🔴 严重 | 2.1.1 |
| 默认加密(SSE-S3 / SSE-KMS) | 🟠 高 | 2.1.1 |
| 已启用版本控制 | 🟡 中 | 2.1.1 |
| 服务器访问日志 | 🟡 中 | 2.1.1 |
### EC2 安全组
| 检查项 | 严重程度 | CIS |
|-------|----------|-----|
| 对 0.0.0.0/0 开放的规则(尤其是 SSH/RDP) | 🔴 严重 | 5.1 |
| 未使用的安全组 | 🔵 低 | 5.1 |
### IAM
| 检查项 | 严重程度 | CIS |
|-------|----------|-----|
| 所有用户已启用 MFA | 🟠 高 | 1.2 |
| 访问密钥已轮换(90 天) | 🟠 高 | 1.4 |
| 管理员策略(通配符) | 🔴 严重 | 1.16 |
| Root 账户使用情况 | 🔴 严重 | 1.1 |
## 快速开始
### 本地演示
```
git clone https://github.com/duranruizsantiago-lang/cloudguard.git
cd cloudguard
# 使用模拟的 AWS 数据运行扫描
python3 -c "from src.scanner.main import run_scan; from src.scanner.reporter import generate_report, report_to_json; r = generate_report(run_scan()); print(report_to_json(r))"
```
### AWS 部署
```
cd terraform
# 初始化
terraform init
# Plan (审查资源)
terraform plan -var "alert_email=your@email.com"
# 部署
terraform apply -var "alert_email=your@email.com"
```
### API 用法(部署后)
```
# 获取扫描历史
curl https://{api-id}.execute-api.us-east-1.amazonaws.com/scans
# 触发按需扫描
curl -X POST https://{api-id}.execute-api.us-east-1.amazonaws.com/scan
```
## 扫描输出示例
```
{
"scan_id": "scan-20260727-120000",
"summary": {
"total_checks": 19,
"passed": 12,
"failed": 7,
"pass_rate": 63.16,
"by_severity": {
"CRITICAL": 3,
"HIGH": 2,
"MEDIUM": 2,
"LOW": 1
}
},
"findings": [
{
"id": "S3-PUBLIC-public-assets-bucket",
"severity": "CRITICAL",
"status": "FAIL",
"description": "Bucket has public access via ACL and wildcard policy",
"remediation": "Enable 'Block all public access' in S3 bucket settings"
}
]
}
```
## 项目结构
```
cloudguard/
├── terraform/
│ ├── main.tf # All AWS resources (Lambda, DynamoDB, API GW, SNS, etc.)
│ ├── variables.tf # Configurable parameters
│ └── outputs.tf # Deployment outputs (API endpoint, function names)
├── src/
│ ├── scanner/
│ │ ├── main.py # Lambda handler + AWS simulator
│ │ ├── checks.py # Finding/Severity/Status data models
│ │ ├── s3_scanner.py # S3 security checks
│ │ ├── sg_scanner.py # Security group checks
│ │ ├── iam_scanner.py # IAM security checks
│ │ └── reporter.py # JSON & Markdown report generation
│ ├── api/
│ │ └── main.py # API Gateway Lambda handler
│ └── layer/
│ └── requirements.txt
├── tests/
│ └── test_scanner.py # 21 tests covering all scanners
└── README.md
```
## 使用的 AWS 服务
| 服务 | 用途 |
|---------|---------|
| **Lambda** | 用于扫描和 API 的无服务器计算 |
| **API Gateway** | 用于获取扫描结果和按需触发的 REST API |
| **DynamoDB** | 用于存储扫描结果的 NoSQL 存储,带有基于严重程度的 GSI |
| **EventBridge** | 定期的每日扫描触发器 |
| **SNS** | 通过电子邮件发送关键发现警报 |
| **CloudWatch** | Lambda 日志、指标仪表板 |
| **IAM** | 最小权限执行角色 |
## 为什么这体现了 AWS 解决方案架构师技能
| 技能 | 展示方式 |
|-------|----------------------|
| **无服务器架构** | Lambda + API Gateway + DynamoDB + EventBridge |
| **事件驱动设计** | EventBridge → Lambda → DynamoDB → SNS pipeline |
| **基础设施即代码** | 完整的 Terraform 部署,包含变量和输出 |
| **安全最佳实践** | IAM 最小权限、静态加密、CIS 基准 |
| **成本优化** | PAY_PER_REQUEST DynamoDB,Lambda 合理配置大小(128-256MB) |
| **监控与可观测性** | CloudWatch 日志、指标仪表板、SNS 警报 |
| **API 设计** | 带有 HTTP API 的 RESTful API Gateway(比 REST API 更便宜且更快) |
| **高可用性** | 多可用区 DynamoDB,Lambda 自动扩缩容 |
## 运行测试
```
pip install pytest
pytest tests/ -v
# 21 已通过 ✅
```
## 关于本项目
作为我的云安全作品集的一部分构建。展示了:
- **AWS 无服务器** — Lambda、API Gateway、DynamoDB、EventBridge、SNS
- **基础设施即代码** — 具有模块化设计的 Terraform
- **云安全** — CIS 基准、S3/SG/IAM 加固
- **Python 工程** — 整洁的架构、类型提示、21 个通过的测试
- **解决方案架构** — 事件驱动、成本优化、最小权限 IAM
## 许可证
MIT — 请参阅 [许可证](LICENSE)
标签:Anthropic, AWS, CIS基准, DPI, ECS, Terraform, 安全态势管理, 逆向工具