chatrapathyee/vpc-infrastructure-as-code
GitHub: chatrapathyee/vpc-infrastructure-as-code
一个使用 Terraform 编写的 AWS VPC 基础设施即代码项目,提供生产级的多层网络架构模板。
Stars: 0 | Forks: 0
# 使用 Terraform 的 AWS VPC 基础设施即代码
## 项目概述
本项目演示了如何使用 Terraform 设计和部署安全、生产级的 AWS Virtual Private Cloud (VPC)。整个基础设施完全通过基础设施即代码 定义,支持可重复、版本控制和自动化的部署。
该环境遵循 AWS 网络最佳实践,采用了多层架构,并在多个可用区 中部署了专用的公有、私有和数据子网。通过集成安全路由、网络分段、集中化日志记录和私有 AWS 服务连接,提升了架构的安全性、可扩展性和可维护性。
本项目作为我的云安全作品集的一部分而构建,旨在展示我在 AWS 网络、Terraform 和安全基础设施设计方面的实践经验。
## 主要功能
- 完全使用 Terraform 配置的基础设施
- 生产级 AWS VPC 架构
- 多可用区 部署
- 公有、私有和数据子网分段
- Internet Gateway 和 NAT Gateway 配置
- 自定义 Route Table
- 实现最小权限原则的 Security Group
- 专用的 Network ACL
- Amazon S3 Gateway Endpoint
- 集成 CloudWatch Logs 的 VPC Flow Logs
- 通过变量和输出实现可重用的 Terraform 配置
# 架构
```
Internet
│
Internet Gateway
│
┌────────────────────┐
│ Production VPC │
│ 10.0.0.0/16 │
└────────────────────┘
│ │
Public Subnets Private Subnets
│ │
NAT Gateway Application Tier
│
Internet Access
Data Subnets
│
Database Tier
S3 Gateway Endpoint
│
Amazon S3
VPC Flow Logs
```
### 网络设计
- **VPC CIDR:** `10.0.0.0/16`
- **可用区:** 2
- **公有子网:** 2
- **私有子网:** 2
- **数据子网:** 2
- **Internet Gateway:** 1
- **NAT Gateway:** 1
- **Elastic IP:** 1
- **Route Table:** 3
- **Security Group:** 4
- **Network ACL:** 3
- **S3 Gateway Endpoint:** 1
- **VPC Flow Logs:** 已启用
## 使用的技术
| 类别 | 技术 |
|----------|------------|
| 云平台 | AWS |
| 基础设施即代码 | Terraform |
| 网络 | Amazon VPC |
| 路由 | Internet Gateway, NAT Gateway |
| 安全 | Security Group, Network ACL |
| 监控 | CloudWatch Logs |
| 日志记录 | VPC Flow Logs |
| 连接 | Amazon S3 Gateway Endpoint |
| 版本控制 | Git & GitHub |
# 仓库结构
```
vpc-infrastructure-as-code/
│
├── terraform/
│ ├── versions.tf
│ ├── main.tf
│ ├── variables.tf
│ ├── terraform.tfvars.example
│ ├── vpc.tf
│ ├── routing.tf
│ ├── nat.tf
│ ├── security_group.tf
│ ├── nacls.tf
│ ├── endpoints.tf
│ ├── flow_logs.tf
│ ├── outputs.tf
│ ├── .gitignore
│ └── README.md
│
├── diagrams/
│ └── architecture.png
│
├── screenshots/
│
└── README.md
```
# Terraform 文件说明
| 文件 | 用途 |
|------|---------|
| `versions.tf` | 定义所需的 Terraform 和 AWS Provider 版本。 |
| `main.tf` | 配置 AWS provider 和通用设置。 |
| `variables.tf` | 为基础设施声明可重用的输入变量。 |
| `terraform.tfvars.example` | 用于部署的示例变量值。 |
| `vpc.tf` | 跨两个可用区创建 VPC 和六个子网。 |
| `routing.tf` | 配置 Internet Gateway、Route Table 和子网关联。 |
| `nat.tf` | 为私有子网的出站互联网访问预置 Elastic IP 和 NAT Gateway。 |
| `security_group.tf` | 定义遵循最小权限原则的 Security Group。 |
| `nacls.tf` | 为公有、私有和数据子网创建专用的 Network ACL。 |
| `endpoints.tf` | 配置 Amazon S3 Gateway VPC Endpoint。 |
| `flow_logs.tf` | 启用 VPC Flow Logs 和 CloudWatch 日志记录。 |
| `outputs.tf` | 在部署后公开有用的资源 ID。 |
# 基础设施组件
## 虚拟私有云 (VPC)
使用以下 CIDR 块创建了专用的 VPC:
```
10.0.0.0/16
```
这提供了大约 65,000 个私有 IPv4 地址,并作为所有已部署资源的网络边界。
## 子网设计
该基础设施采用了跨两个可用区分布的三层架构。
| 层级 | CIDR 块 | 用途 |
|------|------------|---------|
| 公有子网 A | `10.0.1.0/24` | 面向互联网的资源 |
| 公有子网 B | `10.0.2.0/24` | 高可用性 |
| 私有子网 A | `10.0.10.0/24` | 应用层 |
| 私有子网 B | `10.0.20.0/24` | 高可用性 |
| 数据子网 A | `10.0.100.0/24` | 数据库层 |
| 数据子网 B | `10.0.200.0/24` | 高可用性 |
这种设计在面向公有 的资源、应用工作负载和数据层之间实现了网络分段。
## 互联网连接
公有子网通过 Internet Gateway 连接到互联网。
私有子网没有直接的互联网访问权限。相反,出站互联网流量通过部署在公有子网中的 NAT Gateway 进行路由。
这种架构允许私有工作负载下载更新或访问 AWS 服务,同时防止未经请求的入站互联网流量。
## Route Table
实现了三个专用的 Route Table:
| Route Table | 用途 |
|-------------|---------|
| 公有 | 通过 Internet Gateway 路由绑定互联网的流量 |
| 私有 | 通过 NAT Gateway 路由出站流量 |
| 数据 | 限制数据库层的直接互联网访问 |
每个子网都显式关联到相应的 Route Table,以保持网络层之间清晰的隔离。
# 安全架构
在整个项目中,安全性是首要的设计考虑因素。使用 AWS 网络和安全服务实现了多层防护,以遵循纵深防御原则。
## Security Group
Security Group 通过控制入站和出站流量,提供有状态的实例级防火墙保护。
### Bastion Security Group
**目的**
提供安全的 SSH 管理访问。
**入站规则**
| 协议 | 端口 | 来源 |
|----------|------|--------|
| SSH | 22 | 管理员公网 IP |
**出站规则**
- 允许所有出站流量
### Application Security Group
**目的**
在允许受控访问的同时保护应用层。
**入站规则**
| 协议 | 端口 | 来源 |
|----------|------|--------|
| HTTP | 80 | 互联网 (0.0.0.0/0) |
| SSH | 22 | Bastion Security Group |
**出站规则**
- 允许所有出站流量
### Database Security Group
**目的**
仅限制应用层访问数据库。
**入站规则**
| 协议 | 端口 | 来源 |
|----------|------|--------|
| MySQL | 3306 | Application Security Group |
**出站规则**
- 允许所有出站流量
### Management Security Group
**目的**
预留给未来的管理或监控资源。
**入站规则**
无
**出站规则**
- 允许所有出站流量
# Network Access Control Lists (NACL)
专用的 Network ACL 除了 Security Group 之外,还提供无状态的子网级过滤。
为以下各项创建了单独的 NACL:
- 公有子网
- 私有子网
- 数据子网
这种分层方法通过在子网和实例级别强制执行流量控制来提高安全性。
# 网络分段
VPC 被划分为三个逻辑网络层。
| 层级 | 用途 |
|------|---------|
| 公有 | 面向互联网的资源和 NAT Gateway |
| 私有 | 内部应用工作负载 |
| 数据 | 没有直接互联网路由的数据库资源 |
网络分段限制了横向移动,并有助于隔离具有不同安全要求的工作负载。
# 私有 AWS 服务连接
配置了 Amazon S3 Gateway Endpoint,允许通过 AWS 网络与 Amazon S3 进行私有通信。
### 优势
- 无需公共互联网遍历
- 减少 NAT Gateway 的使用
- 降低运营成本
- 提升安全态势
- 提升 S3 访问性能
# 日志记录和监控
启用 VPC Flow Logs 以捕获网络流量元数据,用于监控和故障排除。
Flow Logs 使用专用的 IAM 角色交付到 Amazon CloudWatch Logs。
这可以实现:
- 网络流量可见性
- 安全调查
- 运营故障排除
- 审计支持
# 实施的安全最佳实践
本项目整合了多项 AWS 安全最佳实践,包括:
- 使用基础设施即代码 预置基础设施
- 采用多可用区 架构以提高可用性
- 公有、私有和数据子网隔离
- 使用 Security Group 实现最小权限原则
- 通过 Security Group 和 Network ACL 实现纵深防御
- 通过 NAT Gateway 控制出站互联网访问
- 使用 Gateway Endpoint 实现与 Amazon S3 的私有连接
- 使用 VPC Flow Logs 和 CloudWatch Logs 进行集中化日志记录
- 可重用且版本控制的 Terraform 配置
# 部署工作流
可以使用以下 Terraform 工作流部署基础设施。
## 初始化 Terraform
```
terraform init
```
## 格式化配置
```
terraform fmt
```
## 验证配置
```
terraform validate
```
## 审查执行计划
```
terraform plan
```
## 部署基础设施
```
terraform apply
```
## 销毁基础设施
```
terraform destroy
```
标签:AWS, DPI, ECS, Terraform, VPC, 云计算, 安全配置, 漏洞利用检测, 网络架构, 规则引擎