Debasish-87/ECIA
GitHub: Debasish-87/ECIA
ECIA 是一个用 Terraform 编写的生产级 AWS 基础设施即代码平台,提供跨多环境的模块化云资源自动化部署方案。
Stars: 0 | Forks: 0
# ECIA - 企业级云基础设施架构师
完全使用 Terraform 配置的生产级 AWS 基础设施。
本仓库提供了一个模块化、可扩展且安全的基础设施即代码 实现,用于在 AWS 上部署企业级工作负载。该平台包括网络、计算、存储、数据库、身份管理、监控和运维工具,所有这些都通过一个 Terraform 代码库进行管理。
## 业务影响与工程成果
* 使用 Terraform 架构并自动化了一个 **生产级 AWS 登录区**,跨网络、计算、存储、安全、监控和数据库层配置了 **100 多个云资源**。
* 设计了跨越 **3 个可用区** 的 **多层、高可用基础设施**,消除了关键应用工作负载的单点故障。
* 开发了 **11 个以上的可重用 Terraform 模块**,减少了基础设施重复,并支持在 **开发、预发布和生产** 环境中进行标准化部署。
* 实现了 **100% 的基础设施即代码采用率**,消除了基于控制台的手动配置,确保了部署的可重复性和可审计性。
* 实现了支持 **1-8 个 EC2 实例** 的 Auto Scaling 架构,能够动态处理工作负载,同时优化基础设施利用率。
* 通过 **全自动化的配置、扩展、监控和恢复工作流** 降低了运营风险,最大限度地减少了环境间的配置漂移。
* 通过 **纵深防御架构** 增强了平台安全性,包括 WAF 防护、私有子网、IMDSv2 强制执行、IAM 最小权限策略、Secrets Manager 集成和 VPC Flow Logs。
* 使用静态加密和 AWS KMS 集中密钥管理,保护了 **4 个关键服务层(EBS、S3、RDS、Secrets Manager)** 的数据安全。
* 使用 CloudWatch 仪表板、警报、日志聚合和 SNS 通知构建了集中式可观测性,提供了 **跨基础设施组件的实时可见性**。
* 使用 Application Load Balancer、健康检查、HTTPS 强制执行和 Route53 集成实现了企业级流量管理,以提高服务可靠性。
* 自动化了存储和日志系统的生命周期管理,支持长期保留、版本控制、归档策略和运营合规准备。
* 建立了环境隔离和部署标准,支持将工作负载从开发安全地提升到生产环境。
# 架构概述
```
Internet
│
▼
┌─────────────────────────────────────────────────────────┐
│ VPC │
│ │
│ Public Subnets │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Application Load Balancer │ │
│ │ NAT Gateways │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ Private Application Subnets │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Auto Scaling Group │ │
│ │ Amazon EC2 Instances │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ Private Database Subnets │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Amazon RDS (MySQL / PostgreSQL) │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
S3 IAM CloudWatch
```
# 架构深入解析
## 交互式架构
👉 [打开交互式架构](https://debasish-87.github.io/ECIA/)
# 仓库结构
```
ECIA/
│
├── main.tf
├── variables.tf
├── outputs.tf
├── locals.tf
├── providers.tf
├── versions.tf
│
├── modules/
│ ├── vpc/
│ ├── security-groups/
│ ├── ec2/
│ ├── load-balancer/
│ ├── rds/
│ ├── s3/
│ ├── iam/
│ ├── cloudwatch/
│ ├── waf/
│ ├── kms/
│ ├── route53/
│ └── bastion/
│
├── environments/
│ ├── dev/
│ │ └── terraform.tfvars
│ ├── staging/
│ │ └── terraform.tfvars
│ └── prod/
│ └── terraform.tfvars
│
└── Makefile
```
# 安全架构
该平台遵循纵深防御方法,并在网络、计算、存储和身份层整合了 AWS 原生安全控制。
### 已实施的安全控制
| 控制措施 | 目的 |
| --------------------------- | ------------------------------------ |
| IMDSv2 强制执行 | 防止元数据凭证被盗 |
| 私有应用子网 | 减少直接的互联网暴露 |
| 安全组隔离 | 实施层间隔离 |
| VPC Flow Logs | 网络可见性与调查 |
| AWS WAF | 防范常见的 Web 攻击 |
| KMS 加密 | 加密静态数据 |
| Secrets Manager | 安全的凭证存储 |
| SSM Session Manager | 安全的管理访问 |
| CloudWatch 监控 | 运营可见性 |
| SNS 警报 | 事件通知 |
### 解决的威胁
* 未经授权的基础设施访问
* 过度的网络暴露
* 凭证窃取尝试
* 未加密的数据存储
* 7 层 Web 攻击
* 暴力破解流量模式
* 配置错误的安全边界
* 运营可见性盲区
# 当前限制
该平台有意聚焦于核心基础设施能力,目前不包括:
* 跨区域灾难恢复
* 蓝绿部署工作流
* GitHub Actions CI/CD pipeline
* 使用 Terratest 进行基础设施测试
* 策略即代码 验证
* 自动化合规性评估
* 基础设施漂移检测
# 核心组件
## 网络
网络层提供:
* 专用 VPC
* 公有、私有和数据库子网层
* Internet Gateway
* NAT Gateway 架构
* 路由表和子网关联
* VPC Flow Logs
* 可选的 VPN Gateway 支持
### 子网设计
| 层级 | 用途 |
| -------- | ------------------------- |
| 公有 | ALB, NAT Gateway, Bastion |
| 私有 | 应用工作负载 |
| 数据库 | RDS 实例 |
## 安全
安全控制包括:
* 最小权限安全组
* IMDSv2 强制执行
* VPC Flow Logs
* SSM Session Manager 支持
* Secrets Manager 集成
* 加密的 EBS 卷
* 加密的 RDS 存储
* S3 公有访问限制
* AWS WAF 集成
### 安全组流量
```
Internet
│
▼
ALB Security Group
│
▼
Application Security Group
│
▼
Database Security Group
```
## 计算平台
计算层构建在 Amazon EC2 Auto Scaling Groups 之上。
### 功能特性
* Amazon Linux 2023
* Launch Templates
* Auto Scaling Groups
* Instance Refresh
* CloudWatch Agent
* 基于 CPU 的 Target Tracking Scaling
* 计划扩展策略
* 加密的 GP3 EBS 卷
### 扩展配置
| 参数 | 描述 |
| ---------------- | ------------------------- |
| 最小容量 | 最小实例数 |
| 期望容量 | 正常运行容量 |
| 最大容量 | 扩展上限 |
| 目标 CPU | 60% |
## 负载均衡
应用流量通过 Application Load Balancer 进行路由。
### 能力
* HTTP 监听器
* HTTPS 监听器
* 自动 HTTP 到 HTTPS 重定向
* TLS 1.3 安全策略
* 健康检查
* 访问日志记录
* Target Group 集成
## 数据库平台
Amazon RDS 支持 MySQL 和 PostgreSQL 部署。
### 功能特性
* 加密存储
* 自动备份
* Parameter Groups
* Enhanced Monitoring
* Performance Insights
* CloudWatch 日志导出
* 多可用区部署支持
### 生产环境配置
| 设置 | 值 |
| ---------------- | -------- |
| 存储类型 | GP3 |
| 备份保留 | 7 天 |
| Multi-AZ | 启用 |
| 加密 | 启用 |
| 监控 | Enhanced |
## 存储服务
### 应用存储桶
用于:
* 应用资产
* 上传
* 生成的内容
特性:
* 版本控制
* KMS 加密
* 生命周期管理
* 阻止公有访问
### 日志存储桶
用于:
* ALB 日志
* VPC Flow Logs
* 操作日志
### Terraform 状态存储桶
用于:
* 远程 Terraform 状态
* 状态版本控制
* 灾难恢复
## 身份与访问管理
### EC2 实例角色
提供:
* SSM Session Manager 访问
* CloudWatch Agent 权限
* S3 访问
* Secrets Manager 访问
* ECR 只读访问
### 部署角色
支持:
* 基础设施部署
* CI/CD 集成
* Terraform 自动化工作流
## 监控与可观测性
### CloudWatch 仪表板
仪表板提供以下可见性:
* Auto Scaling Groups
* EC2 性能
* Application Load Balancer 指标
* 数据库性能
* 警报状态
### CloudWatch 警报
平台包括针对以下项的警报:
#### 应用层
* 高 CPU 利用率
* 低 CPU 利用率
#### 负载均衡器
* HTTP 5xx 错误
* Target 5xx 错误
* 不健康的 Target
* 高延迟
#### 数据库
* 高 CPU 利用率
* 低存储可用性
* 高连接数
* 读取延迟问题
#### 应用日志
* 错误率监控
### 警报
Amazon SNS 用于:
* 电子邮件通知
* 运营警报
* 事件响应工作流
# 环境策略
## 开发
为成本效益进行了优化。
* 单个 NAT Gateway
* 单可用区 RDS
* 最少实例数
* 仅限 HTTP 选项
## 预发布
用于测试的类生产环境。
* 单个 NAT Gateway
* 多个可用区
* 具有代表性的工作负载规模
## 生产
为高可用性和弹性而设计。
* 每个可用区一个 NAT Gateway
* Multi-AZ RDS 部署
* 增加的 Auto Scaling 容量
* 启用 HTTPS
* 完整的监控和警报
# 部署
## 初始化 Terraform
```
terraform init
```
## 验证配置
```
terraform validate
```
## 格式化代码
```
terraform fmt -recursive
```
## 计划部署
```
terraform plan \
-var-file="environments/dev/terraform.tfvars"
```
## 应用部署
```
terraform apply \
-var-file="environments/dev/terraform.tfvars"
```
# 远程状态配置
初始部署后:
1. 创建 Terraform 状态存储桶。
2. 创建 DynamoDB 锁定表。
3. 配置后端块。
4. 迁移本地状态。
```
terraform init -migrate-state
```
# 运维命令
查看输出:
```
terraform output
```
刷新状态:
```
terraform refresh
```
列出资源:
```
terraform state list
```
启动 SSM 会话:
```
aws ssm start-session --target
```
触发 Auto Scaling 实例刷新:
```
aws autoscaling start-instance-refresh \
--auto-scaling-group-name
```
# 生产就绪检查清单
* 将数据库凭证存储在 AWS Secrets Manager 中
* 启用 RDS 删除保护
* 将 SSH 访问限制在已批准的管理网络内
* 配置 ACM 证书
* 启用 Multi-AZ RDS 部署
* 在所有可用区部署 NAT Gateway
* 启用远程 Terraform 状态
* 审查 IAM 权限
* 确认 SNS 订阅
* 验证备份和恢复程序
* 启用 WAF 防护
* 审查 CloudWatch 警报和阈值
# 要求
| 组件 | 版本 |
| ------------ | ------- |
| Terraform | >= 1.6 |
| AWS Provider | >= 5.0 |
| AWS CLI | >= 2.x |
# 设计原则
* 基础设施即代码
* 模块化架构
* 高可用性
* 默认安全
* 最小权限访问
* 成本感知部署模式
* 运营可见性
* 生产就绪的默认设置
* 环境隔离
* 可重复的部署
## 交互式架构
👉 [打开交互式架构](https://debasish-87.github.io/ECIA/)
# 仓库结构
```
ECIA/
│
├── main.tf
├── variables.tf
├── outputs.tf
├── locals.tf
├── providers.tf
├── versions.tf
│
├── modules/
│ ├── vpc/
│ ├── security-groups/
│ ├── ec2/
│ ├── load-balancer/
│ ├── rds/
│ ├── s3/
│ ├── iam/
│ ├── cloudwatch/
│ ├── waf/
│ ├── kms/
│ ├── route53/
│ └── bastion/
│
├── environments/
│ ├── dev/
│ │ └── terraform.tfvars
│ ├── staging/
│ │ └── terraform.tfvars
│ └── prod/
│ └── terraform.tfvars
│
└── Makefile
```
# 安全架构
该平台遵循纵深防御方法,并在网络、计算、存储和身份层整合了 AWS 原生安全控制。
### 已实施的安全控制
| 控制措施 | 目的 |
| --------------------------- | ------------------------------------ |
| IMDSv2 强制执行 | 防止元数据凭证被盗 |
| 私有应用子网 | 减少直接的互联网暴露 |
| 安全组隔离 | 实施层间隔离 |
| VPC Flow Logs | 网络可见性与调查 |
| AWS WAF | 防范常见的 Web 攻击 |
| KMS 加密 | 加密静态数据 |
| Secrets Manager | 安全的凭证存储 |
| SSM Session Manager | 安全的管理访问 |
| CloudWatch 监控 | 运营可见性 |
| SNS 警报 | 事件通知 |
### 解决的威胁
* 未经授权的基础设施访问
* 过度的网络暴露
* 凭证窃取尝试
* 未加密的数据存储
* 7 层 Web 攻击
* 暴力破解流量模式
* 配置错误的安全边界
* 运营可见性盲区
# 当前限制
该平台有意聚焦于核心基础设施能力,目前不包括:
* 跨区域灾难恢复
* 蓝绿部署工作流
* GitHub Actions CI/CD pipeline
* 使用 Terratest 进行基础设施测试
* 策略即代码 验证
* 自动化合规性评估
* 基础设施漂移检测
# 核心组件
## 网络
网络层提供:
* 专用 VPC
* 公有、私有和数据库子网层
* Internet Gateway
* NAT Gateway 架构
* 路由表和子网关联
* VPC Flow Logs
* 可选的 VPN Gateway 支持
### 子网设计
| 层级 | 用途 |
| -------- | ------------------------- |
| 公有 | ALB, NAT Gateway, Bastion |
| 私有 | 应用工作负载 |
| 数据库 | RDS 实例 |
## 安全
安全控制包括:
* 最小权限安全组
* IMDSv2 强制执行
* VPC Flow Logs
* SSM Session Manager 支持
* Secrets Manager 集成
* 加密的 EBS 卷
* 加密的 RDS 存储
* S3 公有访问限制
* AWS WAF 集成
### 安全组流量
```
Internet
│
▼
ALB Security Group
│
▼
Application Security Group
│
▼
Database Security Group
```
## 计算平台
计算层构建在 Amazon EC2 Auto Scaling Groups 之上。
### 功能特性
* Amazon Linux 2023
* Launch Templates
* Auto Scaling Groups
* Instance Refresh
* CloudWatch Agent
* 基于 CPU 的 Target Tracking Scaling
* 计划扩展策略
* 加密的 GP3 EBS 卷
### 扩展配置
| 参数 | 描述 |
| ---------------- | ------------------------- |
| 最小容量 | 最小实例数 |
| 期望容量 | 正常运行容量 |
| 最大容量 | 扩展上限 |
| 目标 CPU | 60% |
## 负载均衡
应用流量通过 Application Load Balancer 进行路由。
### 能力
* HTTP 监听器
* HTTPS 监听器
* 自动 HTTP 到 HTTPS 重定向
* TLS 1.3 安全策略
* 健康检查
* 访问日志记录
* Target Group 集成
## 数据库平台
Amazon RDS 支持 MySQL 和 PostgreSQL 部署。
### 功能特性
* 加密存储
* 自动备份
* Parameter Groups
* Enhanced Monitoring
* Performance Insights
* CloudWatch 日志导出
* 多可用区部署支持
### 生产环境配置
| 设置 | 值 |
| ---------------- | -------- |
| 存储类型 | GP3 |
| 备份保留 | 7 天 |
| Multi-AZ | 启用 |
| 加密 | 启用 |
| 监控 | Enhanced |
## 存储服务
### 应用存储桶
用于:
* 应用资产
* 上传
* 生成的内容
特性:
* 版本控制
* KMS 加密
* 生命周期管理
* 阻止公有访问
### 日志存储桶
用于:
* ALB 日志
* VPC Flow Logs
* 操作日志
### Terraform 状态存储桶
用于:
* 远程 Terraform 状态
* 状态版本控制
* 灾难恢复
## 身份与访问管理
### EC2 实例角色
提供:
* SSM Session Manager 访问
* CloudWatch Agent 权限
* S3 访问
* Secrets Manager 访问
* ECR 只读访问
### 部署角色
支持:
* 基础设施部署
* CI/CD 集成
* Terraform 自动化工作流
## 监控与可观测性
### CloudWatch 仪表板
仪表板提供以下可见性:
* Auto Scaling Groups
* EC2 性能
* Application Load Balancer 指标
* 数据库性能
* 警报状态
### CloudWatch 警报
平台包括针对以下项的警报:
#### 应用层
* 高 CPU 利用率
* 低 CPU 利用率
#### 负载均衡器
* HTTP 5xx 错误
* Target 5xx 错误
* 不健康的 Target
* 高延迟
#### 数据库
* 高 CPU 利用率
* 低存储可用性
* 高连接数
* 读取延迟问题
#### 应用日志
* 错误率监控
### 警报
Amazon SNS 用于:
* 电子邮件通知
* 运营警报
* 事件响应工作流
# 环境策略
## 开发
为成本效益进行了优化。
* 单个 NAT Gateway
* 单可用区 RDS
* 最少实例数
* 仅限 HTTP 选项
## 预发布
用于测试的类生产环境。
* 单个 NAT Gateway
* 多个可用区
* 具有代表性的工作负载规模
## 生产
为高可用性和弹性而设计。
* 每个可用区一个 NAT Gateway
* Multi-AZ RDS 部署
* 增加的 Auto Scaling 容量
* 启用 HTTPS
* 完整的监控和警报
# 部署
## 初始化 Terraform
```
terraform init
```
## 验证配置
```
terraform validate
```
## 格式化代码
```
terraform fmt -recursive
```
## 计划部署
```
terraform plan \
-var-file="environments/dev/terraform.tfvars"
```
## 应用部署
```
terraform apply \
-var-file="environments/dev/terraform.tfvars"
```
# 远程状态配置
初始部署后:
1. 创建 Terraform 状态存储桶。
2. 创建 DynamoDB 锁定表。
3. 配置后端块。
4. 迁移本地状态。
```
terraform init -migrate-state
```
# 运维命令
查看输出:
```
terraform output
```
刷新状态:
```
terraform refresh
```
列出资源:
```
terraform state list
```
启动 SSM 会话:
```
aws ssm start-session --target 标签:AWS, DPI, ECS, Terraform, 漏洞利用检测, 自动化运维, 高可用架构