SumitSonkusale/terraform-cloud-deploy

GitHub: SumitSonkusale/terraform-cloud-deploy

该项目提供了一套 Terraform 模板,用于自动化部署经安全加固的 AWS 生产级基础设施并附带持续集成校验。

Stars: 0 | Forks: 0

# terraform-cloud-deploy ![CI](https://github.com/SumitSonkusare/terraform-cloud-deploy/actions/workflows/ci.yml/badge.svg) 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, 安全基线, 教学环境, 漏洞利用检测, 漏洞探索