JacksonMlk/sentinela

GitHub: JacksonMlk/sentinela

结合 Claude AI 的 AWS FinOps 与安全分析平台,通过 STS AssumeRole 自动采集多账户数据,生成成本与风险交叉关联的可执行报告。

Stars: 5 | Forks: 3

# Sentinela — AWS FinOps 与安全平台 ![Status](https://img.shields.io/badge/status-beta-orange) ![Python](https://img.shields.io/badge/python-3.10+-blue) ![FastAPI](https://img.shields.io/badge/fastapi-0.115-009688) ![License](https://img.shields.io/badge/license-MIT-green) ![Last Commit](https://img.shields.io/github/last-commit/jacksonmlk/sentinela-opensource) ![Sentinela — Operations Panel](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/71c83a6202201652.png) ## 为什么我要构建这个 在咨询行业从事 FinOps 和云安全工作时,我针对每一个新客户账户不断重复着同样的手工周期: 1. 登录 AWS 控制台,打开 Cost Explorer,导出电子表格 2. 针对 IAM、S3、Security Groups 和 VPC 执行安全检查清单 3. 在 Excel 中交叉比对所有内容,拼凑出一张“昂贵**且**不安全”的幻灯片 4. 使用 `aws cli` 命令和节省估算编写可落地的速赢措施 每份报告需要花费 2-3 天的时间,而其中最难的部分——**将成本与风险联系起来**——往往因为赶不上截止日期而被舍弃。 Sentinela 的诞生正是为了端到端地自动化这一流程: - **STS AssumeRole** 消除了账户之间繁杂的凭证切换 - **并行收集** 在单次运行中抓取约 30 个 AWS 数据源(Cost Explorer、EC2、RDS、IAM、GuardDuty、Security Hub 等) - **Claude AI** 将原始数据转化为结合上下文的分析,而非千篇一律的检查清单式答案 - **组合矩阵** 揭示出那些既昂贵**又**不安全的资源 - **只读客户端门户** 无需重新导出 PDF 即可将报告交付给客户 结果便是:过去需要 2-3 天手工完成的工作,如今变成了约 10 分钟的自动化分析。 ## 截图
操作面板(管理员) 整合的客户投资组合、按优先级排序的告警,FinOps 和安全评分并排展示。 ![Admin Dashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/71c83a6202201652.png)
FinOps 仪表板 12 个月成本趋势、按服务/UsageType 分类明细、异常及预测。 ![FinOps Dashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/f2e5eb7113201657.png)
安全仪表板 0-100 分评分,Critical/High/Medium 级别发现,按分数影响排名的首要问题。 ![Security Dashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e96cfc87ee201703.png)
速赢措施 — FinOps 低投入操作及预估美元节省额、可直接运行的 `aws cli` 命令以及分步指南。 ![Quick Wins FinOps](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8f339f0a33201710.png)
速赢措施 — 安全 按严重程度分组的安全速赢措施,附带修复命令和分数影响估算。 ![Quick Wins Security](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/c46ff577f9201718.png)
客户端门户 通过唯一 token 交付给客户的只读视图——概览、FinOps、安全及速赢措施。 ![Client Portal](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/12abc1ec57201723.png)
## 概览 **Sentinela** 将以往的手工操作自动化:连接到每个客户的 AWS 账户,收集成本与安全数据,进行交叉比对,并生成一份按优先级排序的报告。借助集成到每项分析中的 **Claude AI (Anthropic)**,每一条洞察都结合了账户的真实数据生成——而非泛泛的通用建议。 ### 平台功能 | 模块 | 功能描述 | |--------|--------------| | **FinOps 仪表板** | 月度成本、12 个月趋势、按服务和 UsageType 分类明细、已检测到的异常 | | **成熟度模型** | 涵盖 5 个维度的评分:标签、资源适度调整、承诺折扣、浪费消除、治理 | | **闲置资源** | 未挂载的 EBS 卷、未使用的 EIP、已停止的实例、无流量的 Load Balancer | | **安全仪表板** | 0-100 分评分、Critical/High/Medium 级别发现、IAM、S3、Security Groups、加密 | | **组合分析** | 成本与风险交叉的优先级矩阵——识别出同时昂贵且不安全的资源 | | **速赢措施** | 低投入操作及预估美元节省额和分步指南 | | **项目** | 具有预期投资回报率 (ROI) 的中期战略举措 | | **客户端门户** | 带有唯一 token 的只读链接,供客户跟进进度 | ## 架构 ``` flowchart TD Admin("👤 Operator / Admin"):::navy subgraph Platform[" Sentinela Platform "] API("⚡ FastAPI + Jinja2"):::navy subgraph Engine[" Analysis Engine "] AWS("☁️ AWS Analyzer\nboto3"):::orange AI("🤖 Claude AI\nAnthropic API"):::pink end DB[("🗄️ Database\nSQLite / PostgreSQL")]:::blue subgraph Views[" Dashboards "] V1("Admin Panel"):::chip V2("FinOps Dashboard"):::chip V3("Security Dashboard"):::chip V4("Client Portal"):::chip end end CA("💼 Client A\nAWS Account"):::client CB("💼 Client B\nAWS Account"):::client CC("💼 Client C\nAWS Account"):::client Admin -->|HTTPS| API API --> AWS API --> AI API --> DB AWS -.->|STS AssumeRole| CA AWS -.->|STS AssumeRole| CB AWS -.->|STS AssumeRole| CC classDef navy fill:#0B1956,stroke:none,color:#fff classDef orange fill:#FF9900,stroke:none,color:#fff classDef pink fill:#FF679A,stroke:none,color:#fff classDef blue fill:#3B5EDB,stroke:none,color:#fff classDef chip fill:#EEF2F9,stroke:#0B1956,color:#0B1956 classDef client fill:#fff,stroke:#0B1956,color:#0B1956 ``` ### 分析流程 ``` 1. Admin registers a client with an IAM Role ARN │ ▼ 2. Operator triggers analysis via /admin/clients/{id}/analyze │ ▼ 3. aws_analyzer assumes the client's role via STS and collects ~30 data sources in parallel: Cost Explorer, EC2, RDS, EKS, Lambda, S3, IAM, GuardDuty, Security Hub, CloudTrail… │ ▼ 4. claude_analyzer sends the data to Claude AI and receives structured JSON analysis: • FinOps: score, savings, maturity, quick wins • Security: score, findings, quick wins • Combined: cross-priority matrix │ ▼ 5. Results stored in the database and surfaced in the admin dashboards + client portal ``` 详细的技术决策(为什么使用 SQLite + PostgreSQL,为什么使用 STS AssumeRole,为什么选择 Jinja2 而不是 SPA 等)详见 **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)**。 ## 技术栈 | 层级 | 技术 | |-------|-----------| | 后端 | Python 3.10+, FastAPI, SQLAlchemy | | 前端 | Jinja2, 原生 HTML/CSS/JS, Chart.js | | AI | Anthropic Claude API (claude-opus / claude-sonnet) | | AWS SDK | boto3 | | 数据库 | SQLite (开发环境) / PostgreSQL (生产环境) | | 容器化 | Docker | | 编排 | Kubernetes (EKS) | | 调度 | APScheduler (自动周期性分析) | ## 收集的数据 ### FinOps | 数据 | AWS 服务 | |------|-------------| | 按服务和 UsageType 划分的成本(12 个月) | Cost Explorer | | 下个月预测 | Cost Explorer | | 检测到的成本异常 | Cost Explorer | | 资源适度调整建议 | Compute Optimizer | | RI / Savings Plans 建议 | Cost Explorer | | 未挂载的 EBS 卷 | EC2 | | 未使用的 Elastic IP | EC2 | | 旧快照(+90 天) | EC2 | | 已停止的实例 | EC2 | | 闲置的 Load Balancer | ELBv2 | | S3 存储桶(大小、生命周期) | S3 + CloudWatch | | 每个实例的 CPU/内存指标 | CloudWatch | | 延长支持版本 (RDS, EKS, Lambda) | RDS / EKS / Lambda | ### 安全 | 数据 | AWS 服务 | |------|-------------| | Root MFA,密码策略 | IAM | | 未启用 MFA 的用户 | IAM | | 旧的访问密钥(+90 天) | IAM | | 过于宽松的策略 | IAM | | 非活跃用户 | IAM | | 公开的 S3 存储桶 | S3 | | 未加密的 S3 存储桶 | S3 | | 对 0.0.0.0/0 开放的 Security Groups | EC2 | | 未启用 Flow Logs 的 VPC | EC2 | | 未加密的 EBS 卷 | EC2 | | 未加密的 RDS 实例 | RDS | | 各区域的 GuardDuty | GuardDuty | | CloudTrail 状态 | CloudTrail | | Security Hub 发现 | Security Hub | | AWS Config 未通过的规则 | Config | ## 快速开始 ### 前置条件 - Python 3.10+ - 已在本地配置好 AWS 凭证(CLI 或环境变量) - 一个 [Anthropic API 密钥](https://console.anthropic.com) ### 本地运行 ``` # 1. Clone 并准备环境 git clone https://github.com/jacksonmlk/sentinela-opensource.git cd sentinela-opensource python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt # 2. 配置环境变量 cp .env.example .env # 编辑 .env 并至少填写: # ANTHROPIC_API_KEY=sk-ant-... # ADMIN_SECRET_TOKEN=something-secure # AWS_DEFAULT_REGION=us-east-1 # 3. 启动应用 uvicorn app.main:app --reload --port 8000 # 4. 打开 open http://localhost:8000 # 你将被重定向到 /admin/login — 请使用来自 .env 的 ADMIN_SECRET_TOKEN ``` ### 接入你的第一个客户 在客户的 AWS 账户中,创建一个信任你的操作员账户的角色,并附加 `ReadOnlyAccess` + `SecurityAudit` 策略。完整的操作步骤(信任策略、`aws cli` 命令、凭证模式)详见 **[SETUP.md](SETUP.md)**。 ### 生产环境部署 (EKS) ``` # 在 deploy.sh 中配置变量并运行: ./deploy.sh ``` Kubernetes manifests 位于 `k8s/` 目录下。你需要: - 创建一个 ECR 仓库 - 使用 `.env.example` 中的变量配置 `sentinela-env` Secret - 在 `k8s/ingress.yaml` 中调整 IAM Role ARN 和域名 ## 环境变量 | 变量 | 是否必须 | 描述 | |----------|----------|-------------| | `ANTHROPIC_API_KEY` | ✅ | Anthropic API 密钥 | | `ANTHROPIC_MODEL` | ✅ | Claude 模型(例如 `claude-sonnet-4-6`) | | `ADMIN_SECRET_TOKEN` | ✅ | 管理员面板密码 | | `DATABASE_URL` | ✅ | SQLite 或 PostgreSQL | | `AWS_DEFAULT_REGION` | ✅ | 默认 AWS 区域 | | `FINOPS_AWS_PROFILE` | 开发环境 | 用于开发的本地 AWS Profile | | `COGNITO_*` | 生产环境 | 用于企业身份验证的 OIDC 设置 | ## 状态与已知局限 Sentinela 目前处于 **beta** 阶段——它可以端到端地工作并已应用于生产环境,但仍存在一些不足之处: - **尚无自动化测试。** 迄今为止的重点是通过真实客户验证整个流程。添加冒烟测试和 CI 已被提上日程。 - **Schema 迁移通过在 FastAPI `lifespan` ([app/main.py](app/main.py)) 中手动执行 `ALTER TABLE` 实现**——适用于当前的 schema,但引入 Alembic 是自然的下一步。 - **仅支持 AWS。** GCP 和 Azure 目前不在考虑范围内。 - **基于行的多租户,而非基于数据库。** 适合咨询业务工作流;但尚未针对公共 SaaS 模式进行安全强化。 - **每次分析的 Anthropic API 成本。** 根据账户大小和所用模型(Sonnet vs Opus),一次完整分析的成本从几美分到几美元不等。 - **葡萄牙语 UI。** 模板、提示词和报告均为 PT-BR。尚未实现国际化。 ## 未来构想 ### 重点方向 — Sentinela v2:自主修复代理 目前的 Sentinela 负责分析和报告。v2 版本将形成闭环: - 操作员在仪表板中审查发现,并**批准**需要修复的内容 - 由 Claude 驱动的代理执行修复:应用存储桶策略、收紧 IAM、针对基础设施级别的更改发起 Terraform PR - **Dry-run 模式** 在任何操作触及账户之前,展示确切将要应用的 diff 差异 - 每一项操作都会记录审批人、理由以及回滚步骤 这是从*“我该怎么做?”*到*“在我的批准下替我执行”*的自然演进。 ### 其他方向 这并非正式的路线图——只是一些合乎逻辑的发展方向。暂无时间表。 - [ ] 多云支持(先支持 GCP,然后是 Azure) - [ ] 在 GitHub Actions 上的冒烟测试 + CI - [ ] 将 schema 管理迁移至 Alembic - [ ] 后台任务导出 PDF/Docx(目前为同步执行) - [ ] 分析完成后的 Webhook 通知(Slack/Teams/Discord) - [ ] 同一客户连续分析结果之间的历史差异对比 - [ ] 偏差检测——在两次运行之间分数下降时发出告警 - [ ] 英语 UI / i18n 欢迎贡献代码——参见 **[CONTRIBUTING.md](CONTRIBUTING.md)**。 ## 安全 发现了漏洞?请**不要公开提 issue**。请查看 **[SECURITY.md](SECURITY.md)** 以了解负责任的披露渠道。 ## 许可证 [MIT](LICENSE) © Jackson Santos
标签:AV绕过, AWS, Claude AI, DPI, EC2, FastAPI, FinOps, GuardDuty, IaC, IAM, Python, RDS, S3, Security Hub, VPC, 云合规, 云成本管理, 后端开发, 子域名突变, 开源, 成本分析, 无后门, 测试用例, 自动化报告, 请求拦截, 逆向工具