RiccardoMarostica/Zero-Trust-Infrastructure
GitHub: RiccardoMarostica/Zero-Trust-Infrastructure
基于 Terraform 的 AWS 零信任三层 Web 应用参考架构,通过深度网络分段、端到端监控和最小权限原则消除组件间的隐式信任。
Stars: 0 | Forks: 0
# AWS 上的零信任基础设施
[](https://www.terraform.io/) [](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, 参考架构, 漏洞利用检测, 零信任架构