🚀 Terraform 第22天:在 AWS 上构建安全的两层架构 (EC2 + RDS)

发布: (2025年12月28日 GMT+8 19:39)
3 min read
原文: Dev.to

Source: Dev.to

Cover image for 🚀 Terraform Day 22: Secure Two-Tier Architecture on AWS (EC2 + RDS)

🧱 架构概览

部署的架构包括:

🌐 Web 层

  • 位于公共子网的 EC2 实例
  • 通过公共 DNS 访问
  • 运行 Flask 应用
  • 使用安全组限制入站访问

🗄️ 数据库层

  • MySQL RDS 实例
  • 部署在私有子网中
  • 没有直接的互联网访问
  • 仅接受来自 Web 层安全组的流量

🔐 密钥管理

  • 数据库用户名和密码动态生成
  • 安全存储在 AWS Secrets Manager 中
  • EC2 在启动时通过用户数据检索

🧩 Terraform 模块设计

本项目使用自定义 Terraform 模块构建,这是实际生产中的关键实践。

使用的模块:

  • VPC 模块 – VPC、公共与私有子网、Internet Gateway、NAT Gateway、路由表
  • 安全组模块 – Web SG(HTTP 访问)、DB SG(仅允许来自 Web SG 的 MySQL 访问)
  • Secrets 模块 – 随机密码生成、Secrets Manager 存储
  • RDS 模块 – MySQL 实例、私有子网部署、凭证从 Secrets Manager 注入

根模块通过在模块之间传递输出,协调所有资源。

🔐 安全凭证处理(关键)

Day 22 中最重要的经验之一:

  • ❌ Terraform 代码中不出现凭证

  • variables.tf 中不出现凭证

  • ❌ 用户数据脚本中不出现凭证

  • ✅ 使用 random_password 生成密码

  • ✅ 存储在 AWS Secrets Manager 中

  • ✅ 运行时安全检索

这在真实生产环境中是强制要求。

⚙️ 使用用户数据进行应用部署

EC2 实例通过用户数据来:

  • 安装系统依赖
  • 安装 Python 和 Flask
  • 从 Secrets Manager 获取数据库凭证
  • 配置环境变量
  • 自动启动 Flask 应用

结果: 基础设施与应用一起部署——全自动化。

🔄 使用的 Terraform 工作流

标准、适用于生产的工作流:

terraform init
terraform plan
terraform apply

注意事项:

  • RDS 创建需要时间——属于预期行为
  • 输出安全地暴露应用端点
  • 测试完成后必须销毁基础设施,以避免产生费用
Back to Blog

相关文章

阅读更多 »