sammyboy80/aws-terraform-infrastructure

GitHub: sammyboy80/aws-terraform-infrastructure

使用Terraform构建生产级多层AWS安全Web基础设施的完整参考实现,覆盖网络、计算、存储、数据库、监控与权限的端到端部署。

Stars: 0 | Forks: 0

# AWS 安全 Web 基础设施 — Terraform 一个生产级、多层 AWS 基础设施,完全使用 Terraform 作为基础设施即代码 构建。 ## 架构 ## 构建的基础设施 | 资源 | 详情 | |---|---| | VPC | 10.0.0.0/16 — 自定义私有网络 | | Public Subnet | 10.0.1.0/24 — eu-west-1a | | Private Subnet | 10.0.2.0/24 — eu-west-1b | | EC2 | 运行 nginx 的 Ubuntu Web 服务器 | | RDS | MySQL 8.0 — 私有子网,无公有 IP | | S3 | 静态资产存储桶 — 无公有访问权限 | | IAM Role | 最小权限 S3 访问 — 无硬编码凭证 | | CloudWatch | EC2 和 RDS 的 CPU 警报 | | SNS | 触发阈值时的电子邮件警报 | | Remote State | Terraform 状态存储在启用版本控制的 S3 中 | ## 安全设计决策 - RDS 位于私有子网且无公有 IP — 只能通过 EC2 在端口 3306 上进行访问 - EC2 通过带有临时凭证的 IAM 角色访问 S3 — 服务器上未存储任何访问密钥 - 安全组在每一层强制执行最小权限原则 - 阻止所有对 S3 的公有访问 - Terraform 状态远程存储在 S3 中 — 绝不提交至 Git ## 关键架构决策 **为什么选择 EC2 而不是 Lambda?** 具有可预测负载的持久性 Web 服务器更适合 EC2。 对于偶发性工作负载,Lambda 更具成本效益。 **为什么选择 RDS 而不是 DynamoDB?** 具有复杂查询的关系型数据更适合 MySQL。 DynamoDB 更适合大规模键值工作负载。 **为什么选择 IAM Role 而不是 Access Keys?** 角色提供临时的、自动轮换的凭证。 访问密钥是长期有效的机密,容易被泄露。 **在扩大规模时我会添加的内容:** - Auto Scaling Group 以替代固定的 EC2 实例 - Application Load Balancer 用于流量分发 - CloudFront CDN 用于静态资产交付 - ElastiCache 用于数据库查询缓存 - WAF 用于 Web 应用防火墙保护 ## 技术栈 - **云:** AWS (EC2, VPC, RDS, S3, IAM, CloudWatch, SNS) - **IaC:** Terraform - **操作系统:** Ubuntu Linux - **数据库:** MySQL 8.0 - **Web 服务器:** nginx - **脚本语言:** Bash (User Data) - **版本控制:** Git / GitHub ## 如何部署 git clone https://github.com/sammyboy80/aws-terraform-infrastructure.git cd aws-terraform-infrastructure terraform init terraform plan terraform apply terraform destroy ## 作者 Bidemi Olawumi — 云安全工程师 LinkedIn: https://linkedin.com/in/bidemi-ola EOF
标签:AWS, CloudWatch, DPI, EC2, EC2, ECS, IaC, IaC, IAM, Nginx, RDS, S3, SNS, Terraform, VPC, Web服务器, 云基础设施, 云监控, 亚马逊云科技, 公有子网, 关系型数据库, 多层架构, 安全组, 应用安全, 报警系统, 无硬编码凭证, 最小权限原则, 漏洞利用检测, 漏洞探索, 状态管理, 生产环境, 私有子网, 网络架构, 解决方案架构, 远程状态, 静态资源托管