giselleevita/terraform-aws-secure-vpc

GitHub: giselleevita/terraform-aws-secure-vpc

基于 Terraform 的 AWS 安全 VPC 基线模块,提供双 AZ 公私子网隔离、NAT 出口、ALB 与可选 WAF 关联以及 VPC 流日志的可审计网络基线。

Stars: 1 | Forks: 0

# terraform-aws-secure-vpc ![Terraform](https://img.shields.io/badge/terraform-%3E%3D1.5-purple) ![AWS](https://img.shields.io/badge/AWS-VPC%20%7C%20Flow%20Logs-orange) ![License](https://img.shields.io/badge/license-MIT-green) 有关设计原理和限制,请参阅 [docs/CASE_STUDY.md](docs/CASE_STUDY.md)。 本仓库展示了一个可审查的 VPC 基线,而不是一个完整的登陆区。我们有意明确指出了目前已实现的功能,以及为满足更高可用性或更严格的生产环境要求而需要添加的功能。 ## 审阅者快速入门 要进行快速的技术审查: 1. 检查 `main.tf` 中的 subnet、route table、NAT、ALB 和 flow-log 资源。 2. 检查 `variables.tf` 中固定的双 AZ 输入契约和默认 ALB 入站规则。 3. 通过现有的 CI 工作流运行 `terraform fmt -check`、`terraform validate`、`tflint` 和 `tfsec`。 4. 阅读 [SECURITY.md](SECURITY.md) 了解前提假设和已知限制。 ## 架构 ``` flowchart TD Internet[Internet] --> IGW[Internet Gateway] IGW --> Public[Two public subnets] Public --> ALB[Application Load Balancer] Public --> NAT[Single NAT gateway] NAT --> Private[Two private subnets] VPC[VPC Flow Logs] --> CW[CloudWatch Logs] ``` ## 创建的资源 | 区域 | 实现 | |---|---| | 网络基础 | 启用了 DNS 支持和主机名的一个 VPC | | 公共层 | 与公共路由表和 Internet 关联的两个公共子网 | | 私有层 | 与一个私有路由表关联的两个私有子网 | | 出口 | 第一个公共子网中的一个 NAT 网关,用于私有子网的出站互联网访问 | | 边缘安全 | 允许来自 `alb_ingress_cidrs` 的 80/443 端口流量的 ALB 安全组 | | 负载均衡器 | 公有 Application Load Balancer,可选关联 WAFv2 Web ACL | | 可观测性 | 将所有流量的 VPC Flow Logs 发送到 CloudWatch Logs 组 | | 验证 | CI 中的 Terraform fmt/validate、TFLint 和 tfsec | ## 未创建的资源 此模块当前不包括: - 隔离的数据库子网 - 每个 AZ 的 NAT 网关 - 用于 S3、DynamoDB、ECR、SSM、KMS 或 CloudWatch Logs 的 VPC endpoints - 用于 Flow Logs 的 S3 目标端 - ALB 访问日志 - ALB 安全组之外的工作负载安全组 - VPN、Transit Gateway 或 VPC Peering - AWS Config 规则或 GuardDuty 对于具有严格可用性要求的生产环境,请增加每个 AZ 的 NAT 或使用私有服务端点以减少对 NAT 的依赖。 ## 用法 ``` module "secure_vpc" { source = "./" name_prefix = "demo" vpc_cidr = "10.20.0.0/16" availability_zones = ["eu-west-1a", "eu-west-1b"] public_subnet_cidrs = ["10.20.1.0/24", "10.20.2.0/24"] private_subnet_cidrs = ["10.20.11.0/24", "10.20.12.0/24"] alb_ingress_cidrs = ["203.0.113.0/24"] flow_logs_retention_days = 90 tags = { Environment = "dev" Owner = "platform" } } ``` ## 子网层 | 层 | 互联网访问 | 用例 | |---|---|---| | 公共 | 通过 IGW 入站以承载 ALB/NAT 资源 | ALB 和 NAT 网关 | | 私有 | 通过 NAT 网关出站 | 不应具有公有 IP 的应用程序工作负载 | ## 安全说明 - ALB 入站 CIDR 默认为 `0.0.0.0/0`,用于面向互联网的演示;对于内部或特定客户端的部署,请对其进行限制。 - ALB 安全组的出站设置为 `0.0.0.0/0`;应单独创建具有更严格出站规则的工作负载安全组。 - 单个 NAT 网关更简单且成本更低,但在发生 AZ 故障时不具备高可用性。 - 在当前的实现中,Flow Logs 仅发送到 CloudWatch Logs。 ## 要求 - Terraform >= 1.5 - AWS provider >= 5.0 - 用于 VPC、EC2 网络、Elastic Load Balancing、CloudWatch Logs、为 Flow Logs 创建 IAM role/policy 以及可选 WAF 关联的 IAM 权限 ## 相关项目 - [terraform-aws-iam-baseline](https://github.com/giselleevita/terraform-aws-iam-baseline) - 专用的 IAM S3 读取角色模块 - [secure-docs-aws](https://github.com/giselleevita/secure-docs-aws) - 使用 Cognito、Lambda、S3、KMS 和审计日志的加密文档存储模式 ## 下一步改进 - 添加可选的隔离子网。 - 添加 NAT-per-AZ 模式。 - 为 S3、DynamoDB、ECR、SSM、KMS 和 CloudWatch Logs 添加 VPC endpoints。 - 添加 ALB 访问日志。 - 为路由表、子网和安全组预期添加 Terraform 测试。 ## 许可证 MIT
标签:ALB, AppImage, AWS, CISA项目, CloudWatch, DPI, EC2, ECS, IaC, NAT网关, Terraform, VPC, VPC流日志, WAF, Web应用防火墙, 互联网网关, 公有子网, 双可用区, 子网路由, 安全合规, 安全基线, 应用负载均衡器, 插件系统, 教学环境, 模块, 流量监控, 特权提升, 私有子网, 网络代理, 网络安全, 自动化部署, 隐私保护