Jbrong/wildmark
GitHub: Jbrong/wildmark
一个以安全优先设计的全栈公园发现应用,作为 AWS 云安全架构最佳实践的生产级参考实现。
Stars: 0 | Forks: 0
# 🏕️ Wildmark

Wildmark 是一个全栈 Web 应用程序,用于发现美国州立和国家公园、探索附近的活动,并阅读其他露营者的社区评论和提示。由一位独立开发者构建并拥有,作为一个用于实际生产的 AWS 作品集项目。
**在线演示:** [wildmark.dev](https://wildmark.dev)
## 🗺️ 功能介绍
- **搜索与浏览** 按州或地区搜索和浏览州立及国家公园
- **公园详情页** — 设施、费用、开放时间、步道及附近活动
- **用户账户** — 注册、登录、收藏喜欢的公园
- **社区评论** — 为公园留下提示和评论
- **周边探索** — 在可配置的半径范围内探索活动、城镇和兴趣点
## 🏛️ 系统架构
Wildmark 构建于 AWS 之上,采用安全优先的三层架构。所有应用和数据库层都是私有的——只有负载均衡器对外公开。
```
User → Route 53 → CloudFront → WAF → ALB (public subnet)
↓
ECS Fargate (private subnet)
↓
RDS PostgreSQL (DB subnet — private)
```

### 基础设施亮点
| 层 | 服务 | 备注 |
|---|---|---|
| DNS | Route 53 | wildmark.dev 的托管区域 |
| CDN | CloudFront + S3 | 静态 React 前端,全球边缘分发 |
| 安全 | WAF + Shield | OWASP Top 10 规则,DDoS 防护 |
| 负载均衡 | ALB | 仅限 HTTPS,HTTP → HTTPS 重定向 |
| 计算 | ECS Fargate | Serverless 容器,无需管理 EC2 |
| 数据库 | RDS PostgreSQL | 多可用区,私有子网,从不公开访问 |
| 认证 | Cognito | 托管用户池,无需自行编写认证逻辑 |
| 密钥 | SSM Parameter Store | 绝无任何硬编码凭证 |
| 加密 | KMS | 静态和传输中的数据均已加密 |
| 监控 | CloudWatch + CloudTrail | 从第一天起即具备完整的审计日志 |
| IaC | Terraform | 100% 基础设施即代码,模块化设计 |
### VPC 设计
- **CIDR:** 跨 2 个可用区的 `10.0.0.0/16`
- **公有子网:** 仅限 ALB
- **私有子网:** ECS Fargate 任务
- **数据库子网:** RDS — 无互联网路由,隔离层
- **NAT Gateway:** 为私有子网提供仅限出站的互联网访问
- **VPC Flow Logs:** 已启用 — 所有流量均记录到 CloudWatch
## 🛠️ 技术栈
| 层 | 技术 |
|---|---|
| 前端 | React |
| 后端 | Python / FastAPI |
| 数据库 | PostgreSQL (RDS) |
| 基础设施 | Terraform |
| 容器 | Docker / ECS Fargate |
| CI/CD | GitHub Actions |
| 云平台 | AWS (us-east-1) |
## 🔒 安全设计
在 Wildmark 中,安全是首要考虑的因素,而非事后补救。本项目是云安全架构师路线的作品集项目,因此每一个设计决策都记录了背后的理由。
- **应用或数据库层零公共暴露** — ALB 是唯一的公共入口
- **IAM 最小权限** — 每个服务都拥有具有最低权限的独立角色,无通配符
- **无硬编码凭证** — 所有密钥存储在 SSM Parameter Store 中,并在运行时注入
- **全方位加密** — 通过 KMS 加密 RDS 和 S3 的静态数据,通过 ACM/TLS 加密所有传输中的数据
- **WAF 规则** — 覆盖所有入站流量的 OWASP Top 10 规则
- **从第一天起启用 CloudTrail** — 完整的管理和数据事件审计日志
- **使用 Cognito 进行认证** — 无自定义认证实现,支持 MFA
- **VPC Flow Logs** — 记录网络流量以进行异常检测
## 📁 项目结构
```
wildmark/
├── frontend/ # React app
├── backend/ # FastAPI (Python) app
├── infrastructure/ # Terraform — all AWS resources
│ └── modules/ # vpc, ecs, rds, alb, cloudfront, waf, iam, cognito, monitoring
├── docs/
│ ├── architecture/ # Diagrams
│ ├── adr/ # Architecture Decision Records
│ └── writeup.md # Portfolio case study
├── .github/workflows/ # CI/CD — deploy frontend, backend, terraform plan
├── docker-compose.yml # Local dev environment
└── README.md
```
## 🚀 本地运行
### 前置条件
- Docker + Docker Compose
- Node.js 18+
- Python 3.11+
- AWS CLI (已配置)
### 设置
```
git clone https://github.com/[your-handle]/wildmark.git
cd wildmark
cp .env.example .env # Fill in local dev values
docker-compose up --build # Starts frontend, backend, and local Postgres
```
- 前端:http://localhost:3000
- 后端 API:http://localhost:8000
- API 文档:http://localhost:8000/docs
## ⚙️ 部署
基础设施完全由 Terraform 管理。在推送到 `main` 分支时,CI/CD 通过 GitHub Actions 运行。
```
cd infrastructure/environments/prod
terraform init
terraform plan
terraform apply
```
GitHub Actions 工作流:
- `frontend-deploy.yml` — 构建 React → 上传至 S3 → 使 CloudFront 缓存失效
- `backend-deploy.yml` — 构建 Docker → 推送至 ECR → 更新 ECS 服务
- `terraform-plan.yml` — 在所有 Pull Request 上运行 `terraform plan`
## 📊 数据来源
- **国家公园管理局 API** — [nps.gov/developer](https://www.nps.gov/subjects/developer/api-documentation.htm) — 免费,无需认证,涵盖所有美国国家公园
- 社区数据(评论、收藏)存储在 RDS PostgreSQL 中
## 🗺️ 路线图
- [x] 域名注册 (wildmark.dev)
- [x] 架构设计
- [x] 仓库脚手架搭建
- [ ] 第一阶段 — VPC、RDS、ECS、ALB、CloudFront 基础设施
- [ ] 第二阶段 — 核心产品(公园搜索、认证、评论)
- [ ] 第三阶段 — 安全加固(WAF、KMS、CloudTrail 警报)
- [ ] 第四阶段 — Terraform IaC、架构文档说明、作品集完善
## 👤 关于
由 Jordan Brong 构建 — 拥有 7-10 年经验的 DevOps 工程师,目前正在进修云安全架构师方向。
- 认证:AWS Cloud Practitioner ✅ | SAA-C03 (进行中) | SCS-C02 (待考)
- [LinkedIn](https://linkedin.com/in/[your-handle])
## 📄 许可证
MIT — 详见 [LICENSE](LICENSE)
标签:Amazon Cognito, AWS, CDN, CISA项目, CloudFront, Docker容器, DPI, ECS Fargate, PostgreSQL, React, Syscalls, WAF, 三 tier 架构, 全栈Web应用, 后端开发, 国家公园, 安全架构, 州立公园, 户外旅游, 攻击面发现, 数据库设计, 旅游景点推荐, 旅行攻略, 无服务器计算, 测试用例, 用户认证, 社区评论, 请求拦截, 路线规划, 逆向工具