RiccardoMarostica/Zero-Trust-Infrastructure

GitHub: RiccardoMarostica/Zero-Trust-Infrastructure

基于 Terraform 的 AWS 零信任三层 Web 应用参考架构,通过深度网络分段、端到端监控和最小权限原则消除组件间的隐式信任。

Stars: 0 | Forks: 0

# AWS 上的零信任基础设施 [![Terraform](https://img.shields.io/badge/Terraform-%3E%3D1.6-623CE4?logo=terraform&logoColor=white)](https://www.terraform.io/) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) ## 是什么 / 为什么 一个将零信任原则应用于 AWS 上标准 3 层 Web 应用程序的参考架构:没有组件隐式信任另一个组件,每条网络路径都经过显式授权,并且所有活动都被端到端地记录和监控。一切都使用 Terraform 定义——模块化、版本化且可重现——通过 AWS 控制台进行的配置为零。 ## 亮点 - **3 层网络分段**(public / app / data),每层均带有级联的 Security Groups 和严格的 NACLs。 - **边界安全**,在 ALB 前端部署 AWS WAF(防范 SQL 注入、XSS、已知恶意输入、IP 信誉、速率限制)。 - **计算或数据层无公网 IP:** EC2 实例位于私有子网中;管理仅通过 SSM Session Manager 进行,从不使用 SSH。 - **端到端检测与监控:** VPC Flow Logs、CloudTrail、GuardDuty、AWS Config 和 CloudWatch Alarms 连接到 SNS。 - **基础设施即代码:** 8 个可重用的 Terraform 模块,组合成两个相互隔离的环境(`dev`、`prod`)。 ## 技术亮点 - 跨越 2 个可用区(AZ)的 VPC,包含 3 个层级(public、app、data);为 SSM、SSM Messages、EC2 Messages、Secrets Manager、CloudWatch Logs 和 CloudWatch Monitoring 配置了 VPC Interface Endpoints,以及 S3 的 Gateway Endpoint,确保私有子网流量绝不跨越公共互联网。 - ALB 仅支持 HTTPS,`ssl_policy = ELBSecurityPolicy-TLS13-1-2-2021-06`(TLS 1.3),由 AWS WAF 托管规则组(`AWSManagedRulesCommonRuleSet`、`AWSManagedRulesKnownBadInputsRuleSet`、`AWSManagedRulesSQLiRuleSet`、`AWSManagedRulesAmazonIpReputationList`)以及自定义的基于速率的规则提供前端防护。 - EC2 实例在 Auto Scaling Group 中运行,强制执行 IMDSv2(`http_tokens = "required"`),并将 IAM 实例配置文件限制为最小权限(SSM、CloudWatch 和单个 Secrets Manager ARN)。 - RDS 运行 **MySQL 8.0**,存储已加密,通过自定义 DB parameter group 强制执行 `require_secure_transport=ON`;凭证使用 `random_password` 生成并存储在 Secrets Manager 中——绝不硬编码。 - CloudTrail 是带有日志文件验证的多区域追踪;GuardDuty 启用了 S3 保护;AWS Config 记录账户范围的配置更改。 - 账户级别的 IAM Access Analyzer 会标记意外的基于资源的访问;S3 存储桶策略拒绝任何没有 `aws:SecureTransport` 的请求。 ## 前置条件 - Terraform `>= 1.6` —— 推荐通过 [`tfenv`](https://github.com/tfutils/tfenv) 安装,它会从 `.terraform-version`(`1.9.8`)中读取锁定的版本。 - AWS CLI v2,并已配置目标账户的凭证。 - 已安装 `session-manager-plugin` —— 请参阅 [AWS 安装指南](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html)。 - `tflint`(可选,仅在运行 `make lint` 时需要)。 ## 快速开始 ``` # Bootstrap:为 remote state 创建 S3 bucket + DynamoDB table(一次性) make bootstrap-apply # 配置 dev 环境 cp environments/dev/terraform.tfvars.example environments/dev/terraform.tfvars $EDITOR environments/dev/terraform.tfvars # set owner, alert_email, etc. # Deploy make init ENV=dev make apply ENV=dev # 通过 SSM 连接到实例(无需 SSH,无需 public IP) make ssm ENV=dev # 完成后将其销毁,以避免持续收费 make destroy ENV=dev ``` ## 架构 - [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) —— 完整的网络拓扑、模块组合、命名和标签约定,以及零信任到 AWS 资源的映射。 - [`docs/THREAT-MODEL.md`](docs/THREAT-MODEL.md) —— 基于各层级的 STRIDE 威胁模型、已实施的缓解措施以及残留风险/假设。 - [`docs/DECISIONS/`](docs/DECISIONS/) —— 架构决策记录,解释了非显而易见的选择(模块布局、Security Group 级联、Secrets Manager、使用 SSM 代替堡垒机、VPC endpoints CIDR 例外)。 ## 成本 完整明细请参阅 [`docs/COST-ESTIMATE.md`](docs/COST-ESTIMATE.md)。 简而言之:`dev` 环境 24/7 运行大约需要 **$117-127/月**,或者如果您只在工作时段启动它并在之后销毁,大约需要 **$16-26/月**。 ## 销毁 按此顺序销毁以避免产生孤立资源: ``` make destroy ENV=dev make destroy ENV=prod # only if you ever applied prod make bootstrap-destroy ``` 如果 `db_deletion_protection` 为 `true`(`environments/prod` 中的默认值),`terraform destroy` 将在 RDS 实例上失败,直到您先禁用该保护——有关确切的 `aws rds modify-db-instance` 命令,请参阅 [`docs/RUNBOOK.md`](docs/RUNBOOK.md)。 ## 路线图 - [ ] 在 GitHub Actions 上使用 OIDC 进行 CI/CD(无长期有效的 AWS 凭证) - [ ] 为 dev 环境提供 ACM DNS 验证证书(通过 Route 53)而不是自签名证书 - [ ] 通过 Lambda 函数实现 RDS 密钥自动轮换 - [ ] AWS Organizations + 多账户设置(dev/prod 位于单独的账户中) - [ ] 用于灾难恢复的多区域部署 - [ ] IPv6 支持 - [ ] app 和 data 层之间的内部服务网格 / mTLS - [ ] Internet Gateway 前端的 AWS Network Firewall ## 贡献 欢迎贡献。在提交 PR 之前,请遵循 [`docs/DECISIONS/`](docs/DECISIONS/) 以及每个模块内联 `README.md`(命名、标签、安全默认值)中记录的约定,并在提交前运行 `make fmt && make validate && make lint`。 ## 许可证 Apache License 2.0 —— 请参阅 [LICENSE](LICENSE)。
标签:AWS, DPI, ECS, Terraform, 参考架构, 漏洞利用检测, 零信任架构