Gondran85/cloudops-finance

GitHub: Gondran85/cloudops-finance

基于 AWS Well-Architected Framework 构建的多层高可用个人理财 Web 应用,用于展示低成本、安全、可观测的云架构最佳实践。

Stars: 0 | Forks: 0

# 🏗️ CloudOps Finance ![AWS](https://img.shields.io/badge/AWS-Cloud-FF9900?logo=amazon-aws&logoColor=white) ![Python](https://img.shields.io/badge/Python-3.9-3776AB?logo=python&logoColor=white) ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15-336791?logo=postgresql&logoColor=white) ![Well-Architected](https://img.shields.io/badge/AWS-Well--Architected-232F3E?logo=amazon-aws&logoColor=white) ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg) ![Status: In Progress](https://img.shields.io/badge/Status-In%20Progress-blue) ## 📋 关于本项目 **CloudOps Finance** 是一个个人理财 Web 应用,用户可以在其中记录收入和支出并查看余额。本项目的重点**不在于应用本身**——而是为了展示一种**专业的云架构**:跨两个可用区的高可用性、分层安全、可观测性以及成本治理,所有这些都运行在 AWS 免费套餐之内(或接近免费额度)。 ### 🎯 模拟业务问题 一家金融科技公司需要一个具有弹性、安全且几乎零成本的 Web MVP,以便在投资完整产品之前验证用户对预算跟踪功能的需求。 ## ✅ 已实现(已构建并验证) **网络** - 自定义 VPC(`10.0.0.0/16`),跨 2 个 AZ 的 4 个子网(2 个公有子网,2 个私有子网) - Internet Gateway、路由表、使用 SG 到 SG 引用的三层 Security Groups(ALB → Web → DB) - **不使用 NAT Gateway** — 私有实例仅通过 VPC Endpoints 访问 AWS 服务 **计算与部署** - 跨两个 AZ 的 2 台 EC2 `t3.micro`,位于私有子网中,处于 Application Load Balancer 之后 - 版本化的 Launch Template,强制要求 IMDSv2,**无 SSH 密钥对**,仅通过 SSM Session Manager 访问 - 完全**零接触引导**:不到一分钟即可启动并开始处理流量,无需手动步骤 - 由 Nginx 后的 gunicorn 提供的 Flask 应用,作为 systemd 服务进行管理 - **从 S3 离线安装** Python 依赖项(部署产物模式) — 私有子网中无需访问 PyPI **数据** - RDS PostgreSQL `db.t3.micro`(单 AZ、私有、无公有访问权限) - 凭证存储在 AWS Secrets Manager 中,在运行时通过 EC2 IAM role 读取 - S3 bucket(应用代码 + 预构建的 wheel + 上传文件),私有、已开启版本控制、SSE-S3 **连接(私有)** - VPC Endpoints:S3(Gateway,免费);SSM、SSMMessages、EC2Messages、Secrets Manager(Interface,已启用 Private DNS) **可观测性** - CloudWatch:7 个警报(RDS CPU/存储/连接数,每台实例的 EC2 CPU/状态)+ 一个由 JSON 定义的 dashboard - SNS 邮件通知;已使用 `set-alarm-state` 进行了端到端的告警到邮件路径测试 **审计与治理** - 开启日志文件验证的多区域 CloudTrail - AWS Budgets(3 个阈值)+ Cost Anomaly Detection ## 🔲 计划中 / 路线图(尚未构建) 这些出现在长期的架构愿景中,但**尚未**实现: - **边缘:** Route 53 (DNS) + CloudFront (CDN) — 尚未配置 - **HTTPS/TLS:** ALB 上的 ACM 证书 — 目前仅支持 HTTP - **WAF**(托管规则、速率限制) — 尚未配置 - **Lambda** 用于处理 S3 票据上传 — 尚未配置 - **RDS Multi-AZ** — 目前为单 AZ;设计已达到“Multi-AZ 就绪”(一键切换,无需更改应用) - **基础设施即代码(Terraform)** — 目前通过 Console + 脚本进行配置 - **CI/CD**(GitHub Actions)、**Docker/ECS**、**Cognito**、**Auto Scaling Group** — 未来阶段 ## 🛠️ 技术与服务 **云(AWS),已实现:** VPC · EC2 · RDS PostgreSQL · S3 · ALB · IAM · Secrets Manager · VPC Endpoints · CloudWatch · SNS · CloudTrail · AWS Budgets · Shield Standard **应用:** Python 3.9 · Flask · SQLAlchemy · gunicorn · HTML5 · CSS3 **工具:** Bash · Amazon Linux 2023 · Nginx · Docker(用于密闭的 wheel 构建) · Git · GitHub ## 🏛️ 架构 ![架构图](https://raw.githubusercontent.com/Gondran85/cloudops-finance/main/diagrams/architecture.png) 已实现的**三层、多 AZ 模式**: - **展示层:** 位于公有子网中的 Application Load Balancer (HTTP) - **应用层:** 跨两个 AZ 的 2 台 EC2 `t3.micro`,位于私有子网中(无公有 IP,无 SSH) - **数据层:** RDS PostgreSQL(单 AZ、Multi-AZ 就绪)+ S3 - **私有连接:** 用于 S3、SSM 和 Secrets Manager 的 VPC Endpoints(不使用 NAT Gateway) - **可观测性:** CloudWatch 警报 + dashboard,SNS 通知 - **审计与治理:** 多区域 CloudTrail、AWS Budgets、Cost Anomaly Detection 📄 详细信息请参阅 [docs/architecture.md](docs/architecture.md)。 ## 🚀 如何运行 ### 前置条件 - 已启用 MFA 的 AWS 账户 - 已配置 AWS CLI v2 - Docker(用于构建 Python wheel) — CloudShell 即可运行 ### 配置(通过 AWS Console + 脚本手动进行) ``` # 1. Clone the repository git clone https://github.com/Gondran85/cloudops-finance.git cd cloudops-finance # 2. Build and upload Python wheels for offline install ./scripts/build-wheels.sh # 3. Sync application code to S3 (the bootstrap pulls code + wheels from there) # 4. Create the required VPC Endpoints (S3 Gateway; SSM, SSMMessages, # EC2Messages, Secrets Manager Interface with Private DNS enabled) # 5. Launch instances from the Launch Template — scripts/ec2-bootstrap.sh # runs as user_data and brings each instance up unattended # 6. Initialize the database schema once psql -h -U -d cloudops -f scripts/db-init.sql # 7. Create the CloudWatch dashboard ./iac/create-dashboard.sh ``` 详细步骤指南请参阅 [docs/architecture.md](docs/architecture.md)。 ### 销毁(重要 — 部分资源在运行期间会产生费用) ALB 和 Interface VPC Endpoints 按小时计费。在不使用时,请停止 EC2/RDS 并删除 ALB 和 Interface endpoints。请参阅 [docs/demo-teardown-checklist.md](docs/demo-teardown-checklist.md)。 ## 📸 证据(截图) 请参阅 [screenshots/](screenshots/) 查看实时 dashboard、通过 ALB 提供的应用、健康的负载均衡器目标、版本化的 Launch Template 以及零接触引导日志。 🎥 **演示视频:** 已录制;链接稍后添加。 ## 💰 成本 构建为尽可能在免费套餐内运行。EC2 `t3.micro` 和 RDS `db.t3.micro` 符合免费套餐条件。两项经常性费用是 **ALB**(约 $0.022/小时)和 **Interface VPC Endpoints**(每个约 $0.01/小时)—— 这两者仅在活跃会话期间创建并在之后移除。 📄 关于**预测成本与实际成本**的详细分类和实际案例说明请参阅 [docs/cost-estimate.md](docs/cost-estimate.md)。 ## 🛡️ 应用的安全措施(已实现) - **最小权限 IAM** 实例 role(SSM + S3 读取 + Secrets Manager) - 对人类用户**强制执行 MFA**;锁定 root 账户 - 用于 EC2 和 RDS 的**私有子网**(无公有 IP) - **无 SSH** — 仅通过 SSM Session Manager 访问;要求使用 IMDSv2 - 使用 SG 到 SG 引用的**分层 Security Groups**(ALB → Web → DB) - 用于 DB 凭证的 **Secrets Manager**(代码或环境变量文件中没有机密) - RDS 和 S3 上的**静态加密**(SSE-S3) - 开启日志文件验证的**多区域 CloudTrail** - **AWS Budgets + Cost Anomaly Detection** 计划中(尚未构建):通过 ACM 实现 HTTPS/TLS、WAF 托管规则。 📄 详细信息请参阅 [docs/security.md](docs/security.md)。 ## 🏗️ Well-Architected Framework 映射 针对六大支柱的全面审查 —— 包括已实现的功能和存在的差距 —— 请参阅 [docs/well-architected-review.md](docs/well-architected-review.md)。 ## 🎓 经验教训 在每个阶段的末尾进行了记录,包括离线依赖项的探索、密闭的 Docker wheel 构建、Nginx 配置修复、Secrets Manager VPC Endpoint、可观测性设置,以及关于预测成本与实际成本的 FinOps 说明。 📄 请参阅 [docs/lessons-learned.md](docs/lessons-learned.md)。 ## 🔮 未来改进 - [ ] 将技术栈迁移至 **Terraform** (IaC) - [ ] 通过 **ACM** + **Route 53** + **CloudFront** 实现 HTTPS - [ ] 具有托管规则和速率限制的 **WAF** - [ ] 用于处理 S3 票据的 **Lambda** - [ ] 用于生产级可用性的 **RDS Multi-AZ** - [ ] 使用 **GitHub Actions** 的 CI/CD - [ ] 使用 **Docker** + **ECS Fargate** 进行容器化 - [ ] 用于用户身份验证的 **Cognito** - [ ] 具有动态策略的 **Auto Scaling Group** - [ ] 锁定传递依赖项(`requirements-lock.txt`)以实现完全可复现的构建 ## 👤 作者 **Jefferson Santos Gondran** — 培训中的 Cloud Engineer | AWS 项目作品集 🔗 [LinkedIn](https://linkedin.com/in/jefferson-santos-2136b2264) ## 📄 许可证 MIT — 请参阅 [LICENSE](LICENSE)。
标签:AWS, DPI, Python, 个人理财, 云计算, 无后门, 测试用例, 规则引擎, 请求拦截, 逆向工具, 高可用架构