SumitSonkusale/terraform-cloud-deploy
GitHub: SumitSonkusale/terraform-cloud-deploy
该项目提供了一套 Terraform 模板,用于自动化部署经安全加固的 AWS 生产级基础设施并附带持续集成校验。
Stars: 0 | Forks: 0
# terraform-cloud-deploy

Terraform 基础设施即代码项目,用于配置安全、符合生产模式的 AWS 环境。涵盖 VPC、公有子网、强制使用 IMDSv2 的 EC2、IAM 最小权限角色,以及带有加密和版本控制的 S3 存储桶——所有这些都通过 GitHub Actions CI 流水线在每次推送时进行验证。
## 基础设施概览
```
tf-cloud-deploy/
├── main.tf # Provider, VPC, subnets, IGW, route tables
├── ec2.tf # Security group + hardened EC2 instance
├── iam.tf # IAM role, instance profile, SSM + CloudWatch policies
├── s3.tf # S3 bucket (encryption, versioning, public-access block)
├── variables.tf # All input variables with sensible defaults
├── outputs.tf # Useful post-apply output values
└── versions.tf # Terraform and provider version pins
```
## 已配置的资源
| 资源 | 详情 |
|---|---|
| `aws_vpc` | 启用 DNS 支持的自定义 VPC |
| `aws_subnet` (public) | 设置了 `map_public_ip_on_launch = true` 的公有子网 |
| `aws_internet_gateway` | 连接到 VPC 的 IGW |
| `aws_route_table` | 将 0.0.0.0/0 指向 IGW 的路由表 |
| `aws_security_group` | 允许 SSH (22)、HTTP (80)、HTTPS (443) 入站;允许所有出站 |
| `aws_instance` | Amazon Linux 2023,gp3 加密根卷,要求使用 IMDSv2 |
| `aws_iam_role` | 包含 `AmazonSSMManagedInstanceCore` + `CloudWatchAgentServerPolicy` 的 EC2 担任角色 |
| `aws_s3_bucket` | AES-256 SSE,启用版本控制,阻止公共访问,90 天生命周期 |
## 安全亮点
- **强制执行 IMDSv2** 在 EC2 实例上 (`http_tokens = "required"`) — 防止基于 SSRF 的元数据滥用
- **无硬编码凭证** — 实例使用 IAM 实例配置文件;SSM Session Manager 免除了生产环境中对 22 端口的需求
- **完全阻止 S3 公共访问** — 启用了所有四项阻止公共访问的设置
- **加密的根卷** (gp3, AES-256)
- **最小权限 IAM** — 仅包含 SSM 和 CloudWatch 权限,无其他权限
- 通过提供程序 `default_tags` 为每个资源应用**默认标签**
## 前置条件
- [Terraform >= 1.5](https://developer.hashicorp.com/terraform/install)
- 已配置 AWS 凭证(`aws configure` 或环境变量)
## 快速开始
```
git clone https://github.com/SumitSonkusale/terraform-cloud-deploy.git
cd terraform-cloud-deploy
terraform init
terraform plan
terraform apply
```
### 覆盖默认值
```
terraform apply \
-var="aws_region=eu-west-2" \
-var="project=myproject" \
-var="environment=prod" \
-var="key_name=my-keypair"
```
## 变量
| 名称 | 默认值 | 描述 |
|---|---|---|
| `aws_region` | `eu-west-2` | AWS 区域 |
| `project` | `tcdev` | 简短的项目标识符 |
| `environment` | `dev` | 部署环境 |
| `vpc_cidr` | `10.0.0.0/16` | VPC CIDR 块 |
| `public_subnet_cidr` | `10.0.1.0/24` | 公有子网 CIDR |
| `ami_id` | Amazon Linux 2023 (eu-west-2) | EC2 AMI |
| `instance_type` | `t3.micro` | EC2 实例类型 |
| `key_name` | `""` | EC2 密钥对名称(可选) |
| `allowed_ssh_cidrs` | `["0.0.0.0/0"]` | 允许 SSH 的 CIDR |
| `s3_bucket_name` | 自动生成 | S3 存储桶名称 |
## CI/CD
GitHub Actions 在每次推送到 `main` 时运行:
1. `terraform fmt -check -recursive` — 强制执行规范格式
2. `terraform init -backend=false` — 在没有远程状态的情况下解析提供程序
3. `terraform validate` — 检查 HCL 语法和资源引用
4. `terraform plan` (使用模拟凭证进行模拟运行) — 执行完整的提供程序逻辑
## 输出
执行 `terraform apply` 后,将输出以下值:
- `vpc_id`, `public_subnet_id`
- `instance_id`, `instance_public_ip`, `instance_public_dns`
- `security_group_id`
- `s3_bucket_name`, `s3_bucket_arn`
- `iam_role_arn`
## 许可证
MIT — 查看 [LICENSE](LICENSE)。
标签:AWS, DPI, ECS, Terraform, 安全基线, 教学环境, 漏洞利用检测, 漏洞探索