UTKARSH698/CSPM
GitHub: UTKARSH698/CSPM
一个基于事件驱动的 AWS 云安全态势管理工具,实现了 23 项 CIS Benchmark 检查与自动修复、合规评分和告警通知的完整流水线。
Stars: 0 | Forks: 0
# CSPM
### 云安全态势管理 — AWS 安全自动化
[](https://python.org)
[](https://terraform.io)
[](tests/)
[](LICENSE)
## 本项目演示了什么
- **安全自动化 pipeline** — EventBridge 每小时触发一次 Lambda;扫描器审计 4 个 AWS 服务;自动修复程序修复安全的问题;合规分数发布到 CloudWatch。
- **23 项 CIS AWS Foundations Benchmark 检查** — 映射到 CIS v1.5,涵盖 S3、IAM、EC2/Security Groups 和 CloudTrail。
- **自动修复** — S3 Block Public Access、bucket versioning 和开放的安全组规则通过编程方式修复。IAM/CloudTrail 问题则标记为人工复查(自动应用风险过高)。
- **具备端口范围感知的 SG 检查** — 允许 TCP 0–65535 的规则仍会触发 SSH 检查。大多数工具仅匹配精确的端口号。
- **IPv4 + IPv6 覆盖** — 同时检查 `0.0.0.0/0` 和 `::/0`。大多数工具会遗漏 IPv6。
- **64 个测试** — 使用 moto 来 mock AWS API — 无需凭证,运行时间小于 5 秒。
- **合规性评分** — `(passed / total) × 100` 作为 CloudWatch 自定义 metric 推送,并附带 7 天趋势 dashboard。
架构
EventBridge (每小时)
│
▼
┌───────────────┐ audits ┌──────────────────────────┐
│ Scanner λ │ ─────────────► │ S3 · IAM · EC2 · CT APIs │
└───────┬───────┘ └──────────────────────────┘
│
┌────┼────────────────────────────────┐
▼ ▼ ▼ ▼
S3 CloudWatch SNS Remediator λ
findings score critical │
(JSON) metric alerts ┌──────┴──────────┐
▼ ▼
S3 public access Open SG rules
auto-fixed removed
(audit log to S3)
**流程:** Scanner 审计 → 发现结果保存至 S3 → 合规分数推送至 CloudWatch → 严重发现触发 SNS 邮件 → scanner 异步调用 Remediator (fire-and-forget) → Remediator 修复安全的问题并记录其余问题。
安全检查(23 项检查,CIS AWS Foundations Benchmark v1.5)
| Service | Checks | Critical Findings |
|---|---|---|
| S3 | Block Public Access, versioning, access logging, default encryption | S3-001: public access enabled |
| IAM | Root MFA, root access keys, password policy, key age | IAM-001/002: root account exposure |
| EC2 / Security Groups | SSH, RDP, MySQL, Postgres, MongoDB, Redis, Elasticsearch, all-traffic, default SG | SG-22/3389: internet-exposed admin ports |
| CloudTrail | Trail exists, multi-region, log validation, CloudWatch integration, public bucket, logging paused | CT-001: no trail; CT-005: logs publicly accessible |
自动修复
| Finding | Action |
|---|---|
| S3 Block Public Access disabled | Enables all 4 Block Public Access settings |
| S3 versioning disabled | Enables versioning |
| SSH / RDP open to internet | Revokes the specific offending inbound rule |
| All-traffic SG rule | Removes the open-world inbound rule |
| IAM / CloudTrail issues | Logged for human review — auto-fix too risky |
默认启用 `DRY_RUN=true` — 仅记录将要执行的每项操作,而不改动任何内容。在复查您的首次扫描结果后,请将 `DRY_RUN` 设置为 `false`。
合规分数示例
Scan 1 — new account, no config: 66.7% ████████████████████░░░░░░░░░░
Scan 2 — CloudTrail created: 68.0% ████████████████████░░░░░░░░░░
Scan 3 — IAM + SG + CT fixed: 76.0% ██████████████████████░░░░░░░░
Scan 4 — CloudWatch Logs linked: 80.0% ████████████████████████░░░░░░
技术栈
`Python 3.11` `AWS Lambda` `EventBridge` `S3` `SNS` `CloudWatch` `IAM` `EC2` `CloudTrail` `Terraform` `pytest` `moto` `GitHub Actions`
工程亮点
**异步修复** — Scanner 使用 `InvocationType=Event` (fire-and-forget) 调用 Remediator。无论需要修复多少问题,Scanner 的延迟始终保持在 6 秒以下。
**单个 zip 包,两个 Lambda** — 两个函数共享一个部署包,但使用不同的 handler 路径。简化了打包流程,缩小了攻击面。
**IAM 最小权限原则** — Scanner 角色:对 S3、IAM、EC2、CloudTrail 只读。Remediator 角色:仅具有其所需的特定写入操作权限。两者均无管理员权限或跨服务访问权限。
**开放的形式化问题** — 一系列单独正确的修复是否会产生整体不安全的中间状态,这是本项目凸显的核心未解决问题。依赖排序的修复阻止了我能构造出的情况,但形式化的完整性需要一个修复状态空间的模型。参见 [TECHNICAL.md](TECHNICAL.md)。
快速开始
git clone https://github.com/UTKARSH698/CSPM
cd CSPM/infrastructure
cp terraform.tfvars.example terraform.tfvars
# 设置 alert_email 和 aws_region
terraform init
terraform apply
# 运行首次扫描
aws lambda invoke --function-name cspm-scanner --region us-east-1 result.json
cat result.json
**运行测试(无需 AWS 凭证):**
pip install pytest boto3 "moto[s3,iam,ec2,cloudtrail]"
pytest tests/ -v --cov=scanner --cov=remediator
项目结构
cspm/
├── scanner/
│ ├── scanner.py # Lambda handler — 编排所有检查
│ └── checks/
│ ├── s3_checks.py # 4 项检查
│ ├── iam_checks.py # 4 项检查
│ ├── sg_checks.py # 9 项检查
│ └── cloudtrail_checks.py # 6 项检查
├── remediator/
│ ├── remediator.py
│ └── actions/
│ ├── s3_actions.py
│ └── sg_actions.py
├── infrastructure/ # Terraform — 约 19 个 AWS 资源
│ ├── lambda.tf
│ ├── eventbridge.tf
│ ├── cloudwatch_dashboard.tf
│ └── iam.tf
├── tests/ # 64 个测试,moto mocks
├── TECHNICAL.md # 修复安全性分析、威胁模型、形式化问题
└── .github/workflows/ # CI: 在 PR 时 lint + test | merge 时 deploy
已知局限性
- 仅限单区域 — 无跨区域聚合
- 扫描之间无实时漂移检测(仅限时间点快照)
- 在所有并发的错误配置状态下,修复未在形式上证明是完整的
- 对于所有操作类型,Remediator 在 Lambda 重试之间不具备幂等性
- 完整的形式化分析请参见 **[TECHNICAL.md](TECHNICAL.md)**。
*MIT License · Utkarsh Batham*标签:Amazon CloudWatch, Amazon EventBridge, Anthropic, AWS, AWS Lambda, CIS基准, CloudTrail, CSPM, DevSecOps, DPI, EC2, EC2, ECS, IaC, IaC, IAM, IPv4/IPv6, Python, S3, Serverless, SNS告警, Terraform, TinkerPop, 上游代理, 事件驱动, 云安全态势管理, 前端应用, 单元测试, 合规性评分, 基础架构即代码, 安全合规, 安全检查, 安全组, 安全规则引擎, 无后门, 无服务器, 无线安全, 最小权限原则, 漏洞探索, 端口范围检测, 网络代理, 网络安全, 自动修复, 隐私保护