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, 安全态势管理, 逆向工具