UTKARSH698/CSPM

GitHub: UTKARSH698/CSPM

一个基于事件驱动的 AWS 云安全态势管理工具,实现了 23 项 CIS Benchmark 检查与自动修复、合规评分和告警通知的完整流水线。

Stars: 0 | Forks: 0

# CSPM ### 云安全态势管理 — AWS 安全自动化 [![Python](https://img.shields.io/badge/Python-3.11-blue?style=flat-square&logo=python&logoColor=white)](https://python.org) [![Terraform](https://img.shields.io/badge/Terraform-IaC-7B42BC?style=flat-square&logo=terraform&logoColor=white)](https://terraform.io) [![Tests](https://img.shields.io/badge/Tests-64_passing-brightgreen?style=flat-square)](tests/) [![License](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)](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, 上游代理, 事件驱动, 云安全态势管理, 前端应用, 单元测试, 合规性评分, 基础架构即代码, 安全合规, 安全检查, 安全组, 安全规则引擎, 无后门, 无服务器, 无线安全, 最小权限原则, 漏洞探索, 端口范围检测, 网络代理, 网络安全, 自动修复, 隐私保护