Mahun10/aws-resilient-infra

GitHub: Mahun10/aws-resilient-infra

一个使用 Terraform 和 GitHub Actions 在 AWS 上构建弹性云原生基础设施的完整实战项目,展示了容器化部署、自动伸缩、WAF 防护和 CI/CD 流水线的最佳实践。

Stars: 0 | Forks: 0

# 🚀 弹性云原生 AWS 基础设施 (Terraform, ECS Fargate, WAF, HTTPS, CI/CD) [![Terraform](https://img.shields.io/badge/Terraform-7B42BC?style=for-the-badge&logo=terraform&logoColor=white)](https://www.terraform.io/) ![AWS](https://img.shields.io/badge/AWS-%23FF9900.svg?style=for-the-badge&logo=amazon-aws&logoColor=white) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT) ## 📖 目录 * [项目概述](#-project-overview) * [架构](#architecture) * [核心组件](#key-components) * [架构演进](#-architecture-evolution) * [Auto Scaling 与压力测试](#auto-scaling) * [迁移至 ECS Fargate](#the-architecture-was-later-migrated-to-ecs-fargate) * [Web 应用防火墙 (AWS WAF)](#-web-application-firewall-aws-waf) * [已实现的规则](#implemented-rules) * [攻击模拟结果](#results) * [基础设施即代码 (Terraform)](#%EF%B8%8F-infrastructure-as-code-terraform) * [远程状态与锁定](#%EF%B8%8F-remote-state--locking) * [CI/CD 流水线 (GitHub Actions)](#-cicd-pipeline-github-actions) * [监控与可观测性](#-monitoring--observability) * [安全最佳实践](#%EF%B8%8F-security-best-practices) * [HTTPS](#-https) * [我的收获](#-what-i-learned) * [作者](#%E2%80%8D-author) ## 📌 项目概述 本项目演示了如何使用 **Terraform (基础设施即代码)** 和 **GitHub Actions (CI/CD)** 设计和部署一个**弹性、可扩展的云原生 AWS 基础设施**。 该架构遵循现代云最佳实践: - 跨多个可用区的高可用性 - 公有/私有子网隔离 - 容器化应用 - 使用 **ECS Fargate** 进行部署 - 使用 **Amazon ECR** 存储 Docker 镜像 - 使用 **AWS WAF** 提供 Layer 7 防护 - 托管数据库 (RDS) - 监控、告警和审计 该项目从基于 EC2 的架构演进为**完全容器化的部署**,提高了可扩展性并降低了运维开销。 ## 🏗️ 架构 ### 核心组件 - 跨 2 个可用区并包含公有与私有子网的 **VPC** - **应用负载均衡器 (ALB)** (面向互联网) - **ECS Fargate** (私有子网中的容器化应用) - **Amazon ECR** (Docker 镜像仓库) - **RDS PostgreSQL** (私有,单可用区) - 用于出站互联网访问的 **NAT Gateway** - **安全组** (最小权限访问) - 用于监控和告警的 **CloudWatch + SNS** - 用于审计的 **CloudTrail** - 用于 Layer 7 防护的 **AWS WAF** - **SSM Session Manager** (无需 SSH 访问) ## 🔄 架构演进 基础架构的初始版本基于由 Auto Scaling Group 管理的 EC2 实例。 - 部署在私有子网中的 EC2 实例 - 基于 CPU 利用率的 Auto Scaling Group - 将流量分配给 EC2 实例的 ALB ![AWS Architecture](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/192b671b58184212.png) ### 自动伸缩 最初,基础设施运行了两个实例。 ![Instances default number](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6fa7e09c1c184219.png) 为了模拟高流量和 CPU 消耗,我们使用了命令 `stress --cpu 2 --timeout 600`。 此命令启动两个 CPU 工作线程 (`--cpu 2`) 以产生持续 600 秒 (`--timeout 600`) 的处理器负载,即 10 分钟。 ![Command Stress](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e5ea5f57d6184224.png) 同时,可以通过 Amazon CloudWatch 实时监控 CPU 利用率。 一旦 CPU 利用率超过 50% 的配置阈值,就会触发 Auto Scaling 策略,并开始自动启动新实例。 ![Command Stress](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4edaf29a75184230.png) ![Build third instances](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/462d021c3f184234.png) ![third instances](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/defd224ad4184241.png) 服务表明伸缩操作成功,并将正在运行的实例数量从 2 个增加到 4 个,以处理额外的负载。 ![notif auto scaling starting](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1c227a2c98184246.png) ## 该架构后来被**迁移至 ECS Fargate**: - 容器化应用 - 通过 ECS Service 部署 - 无需服务器管理 ![Docker](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/99cfec4d43184252.png) ![Docker](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2433e73dad184258.png) ![Docker](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a94aed01ea184304.png) 👉 这一转变提高了可扩展性和灵活性,并降低了运维开销。 ## 🧱 Web 应用防火墙 (AWS WAF) 已部署 AWS WAF Web ACL 并将其附加到 Application Load Balancer,以保护应用免受 Layer 7 攻击。 ### 已实现的规则 - **AWSManagedRulesCommonRuleSet** → 防范常见的 Web 攻击 (SQL 注入、XSS、格式错误的请求) - **AWSManagedRulesKnownBadInputsRuleSet** → 检测并阻止已知的恶意 payload 模式 - **基于速率的规则** → 限制每个 IP 的请求数量 (每 5 分钟 100 个请求) 以缓解滥用流量 ### 结果 - 我模拟了应用攻击 (SQL 注入、XSS) - 以及高频请求突发 ### 高频请求突发命令: 它向 Application Load Balancer (ALB) 发起 500 个异步 Web 请求。 ``` for ($i = 0; $i -lt 500; $i++) { Start-Job { Invoke-WebRequest -Uri "[http://resilient-aws-infra-alb-xxxxxxxx.eu-west-3.elb.amazonaws.com](http://resilient-aws-infra-alb-xxxxxx.eu-west-3.elb.amazonaws.com)" -UseBasicParsing | Out-Null } } ``` - 异常流量模式已被检测到 ![result_known_badinputs](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e63015ad67184310.png) - 通过 AWS WAF 指标确认了防护有效性 ![result_rate_limit](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ab3314d58d184316.png) ### XSS 攻击 : ![command commun_rules](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6d26c8dbe3184341.png) 恶意请求已被成功阻止 : ![result_commun_rules](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/62b93f2e82184347.png) ## 🛠️ 基础设施即代码 (Terraform) 该基础设施完全使用 Terraform 进行定义: - 模块化且易读的 `.tf` 文件 - 用于配置的变量 - 关键资源的输出 - 通过以下方式实现远程状态: - **S3 存储桶 (已启用版本控制,已加密)** - **DynamoDB (状态锁定)** ### 示例文件: - `vpc.tf` - `alb.tf` - `autoscaling.tf` - `rds.tf` - `security.tf` - `monitoring.tf` - `cloudtrail.tf` ## ☁️ 远程状态与锁定 Terraform 状态被安全地存储: - **S3 存储桶** - 已启用版本控制 - 服务端加密 - 禁止公共访问 - **DynamoDB** - 防止并发的 Terraform 执行 - 确保一致性 ## 🚀 CI/CD 流水线 (GitHub Actions) 实现了一个完整的 CI/CD 流水线: ### 持续集成 每次推送时: - `terraform fmt` - `terraform validate` - `terraform plan` ### 受控部署 - 部署前需要手动批准 - 使用 GitHub **环境** - 批准后 → `terraform apply` ### 密钥管理 敏感值存储在 GitHub Secrets 中: - AWS 凭证 - 数据库密码 - 告警电子邮件 ## 📊 监控与可观测性 - **CloudWatch 指标与告警** - **SNS 通知** - **ALB 健康检查** - 基础设施可见性仪表板 ## 🛡️ 安全最佳实践 - 无 SSH 访问 → **SSM Session Manager** - 私有 EC2 实例 - RDS 未公开访问 - 严格的安全组 - 加密的状态存储 - 密钥绝不存储在代码中 ## 🔐 HTTPS 本项目已实现 HTTPS。 ### 实现 - 使用 AWS Certificate Manager (ACM) 配置 TLS 证书 - 通过 Cloudflare 配置 DNS 验证 - 在 Application Load Balancer 上配置 HTTPS 监听器 - HTTP 流量自动重定向到 HTTPS - 可通过 `www.matteocloudflow.com` 公开访问 ### 结果 应用现在可以通过 HTTPS 安全访问,TLS 终止由 Application Load Balancer 处理。 ![https](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e881f59873184353.png) ## 🎓 我的收获 - 设计弹性 AWS 架构 - 编写生产级 Terraform 代码 - 安全地管理 Terraform 状态 - 为基础设施实施 CI/CD 流水线 - 应用 DevOps 和云最佳实践 ## 👨‍💻 作者 Matteo PADONOU – 初级云与 DevOps 工程师
标签:ALB, Amazon ECR, AppImage, AWS, CISA项目, Docker, DPI, EC2, ECS, ECS Fargate, GitHub Actions, HTTPS, IaC, NIDS, RDS, Terraform, Terraform远程状态, WAF, Web应用防火墙, 云架构, 公有子网, 后端开发, 多可用区, 安全最佳实践, 安全防御评估, 容器化, 应用负载均衡, 开源框架, 弹性基础设施, 托管数据库, 持续交付, 持续集成, 服务器监控, 测试用例, 监控与可观测性, 私有子网, 网络隔离, 自动伸缩, 自动笔记, 请求拦截