RIT-MESH/aws-zero-trust-reference-architecture
GitHub: RIT-MESH/aws-zero-trust-reference-architecture
该项目是一个基于 Terraform 的生产级 AWS 零信任参考架构,通过私有工作负载、最小权限 IAM、全程加密和持续安全监控,帮助团队在 AWS 上快速实现符合 NIST SP 800-207 标准的安全基础设施。
Stars: 0 | Forks: 0
# aws-zero-trust-reference-architecture
[](https://github.com/RIT-MESH/aws-zero-trust-reference-architecture/actions/workflows/validate.yml)
[](https://github.com/RIT-MESH/aws-zero-trust-reference-architecture/actions/workflows/codeql.yml)
[](LICENSE)
一个面向生产环境的** AWS Zero Trust 参考架构**,使用
Terraform 构建:包含多可用区网络、最小权限 IAM、私有工作负载、客户
管理的加密密钥、持续安全监控,以及**无需 AWS 凭证**即可运行的 DevSecOps
验证。
## 项目概述
该架构在 AWS 上实现了 NIST SP 800-207 Zero Trust 原则:
1. 显式验证
2. 最小权限访问
3. 假设被入侵
4. 禁止直接管理访问工作负载
5. 网络分段
6. 传输和静态加密
7. 持续的日志记录、检测、合规性和漏洞管理
8. 基础设施即代码、自动化验证和安全 CI
入口流量:**Route 53 -> 可选的 CloudFront -> AWS WAF -> 面向互联网的
ALB -> 私有 ECS Fargate -> 隔离的 RDS PostgreSQL**,同时由 CloudTrail、VPC
Flow Logs、Config、GuardDuty、Security Hub 和 Inspector 提供持续的
遥测数据,并将其存储在经过 KMS 加密并记录访问日志的 S3 存储桶中。
## 为什么这比基础设计更好
“基础”的 AWS 设置通常通过公共 IP 暴露工作负载,使用宽泛的
CIDR 安全组,依赖单一的共享 KMS 密钥,没有 Flow Logs 或
CloudTrail,向工作负载角色授予 `AdministratorAccess` 权限,并使用长期的
IAM 用户/访问密钥。相反,本参考架构:
- 将每个工作负载放置在**没有公共 IP** 的私有/隔离子网中。
- 使用**安全组引用**(ALB->应用->数据库)而不是宽泛的 CIDR。
- 为每个关注点使用**独立的客户管理 KMS 密钥**并启用轮换。
- 接入 **CloudTrail、Flow Logs、Config、GuardDuty、Security Hub、Inspector**。
- 为工作负载提供**默认拒绝** 的任务角色以及**权限边界**。
- 提供**受 MFA 保护的破窗角色**,且没有永久凭证。
- 通过**自动化测试和 IaC 扫描**来强化这些不变量。
## Zero Trust 原则 -> AWS 控制措施
有关完整的映射,请参见 [`docs/zero-trust-principles.md`](docs/zero-trust-principles.md)。
摘要:显式验证(IAM 角色 + MFA 破窗 + TLS),最小权限(默认拒绝角色 + 权限边界 + SG 引用),假设被入侵(隔离的数据层 + GuardDuty + CloudTrail Insights),禁止直接管理(无 SSH/RDP + Session Manager + SSM endpoint),分段(分层子网 + 路由表 + 默认 SG 锁定),加密(处处使用 CMK + `rds.force_ssl` + S3 拒绝不安全访问),以及持续监控(Config/GuardDuty/
Security Hub/Inspector + CloudWatch 警报)。
## 架构图
有关完整的图表(ASCII +
Mermaid)以及分层/路由表细分,请参见 [`docs/architecture.md`](docs/architecture.md)。
## 主要安全控制
- 应用/数据工作负载没有公共 IP;任何地方都没有 SSH/RDP 入站流量。
- 分层 VPC:公共(ALB+NAT),私有应用(ECS),隔离数据(RDS,无默认路由)。
- ALB TLS 1.2/1.3,带有 HTTP->HTTPS 重定向;WAF(常见漏洞、已知错误输入、IP
信誉、匿名 IP、Linux/Log4j)+ 基于单 IP 速率的规则。
- 客户管理的 KMS 密钥(日志、rds、机密、s3、cloudtrail),并带有轮换。
- RDS:不公开、CMK 加密、`rds.force_ssl=1`、Secrets Manager 凭证、
Multi-AZ + 删除保护(生产环境)、增强监控、查询日志记录。
- CloudTrail(管理 + S3 数据事件 + Insights + SNS),VPC Flow Logs(CW + S3
parquet),ALB/WAF 日志,全部发送到启用版本控制、记录访问日志、SSE-KMS 加密的 S3 存储桶。
- GuardDuty(带有恶意软件防护)、Security Hub(CIS + AWS Foundational)、
Inspector v2、带有合规性包的 AWS Config,以及高严重性警报。
- IAM:最小权限工作负载角色、权限边界、MFA 破窗角色,
示例 SCP(作为 JSON 输出,供组织应用)。
## 仓库结构
```
.
├── modules/
│ ├── network/ # VPC, subnets, route tables, flow logs, endpoints, default SG
│ ├── kms/ # customer-managed KMS keys with rotation
│ ├── s3-logging/ # centralized, encrypted, access-logged S3 bucket
│ ├── cloudtrail/ # CloudTrail + SNS + CloudWatch Logs + Insights
│ ├── edge/ # ALB, WAF, target group, app SG, listeners
│ ├── ecs-app/ # ECS Fargate service, roles, autoscaling
│ ├── rds/ # RDS PostgreSQL, parameter group, monitoring
│ ├── security-services/ # Config, GuardDuty, Security Hub, Inspector, alarms
│ └── iam/ # break-glass role, permission boundary, example SCP
├── examples/
│ ├── production/ # Multi-AZ, NAT per AZ, full security, 365d audit logs
│ └── lab/ # cost-sensitive: single NAT, single-AZ RDS, 1 task
├── modules/{rds,network}/tests/ # native Terraform tests (mock provider)
├── tests/python/ # static security-invariant tests (pytest)
├── scripts/validate.sh # offline validation orchestration (CI)
├── .github/workflows/ # validate + codeql workflows
├── docs/ # architecture, threat model, controls, ops, IR, cost
└── SECURITY.md
```
## 前置条件
- Terraform >= 1.6(已在 1.15.x 上验证)。
- AWS provider ~> 5.0(解析为 5.100.0)。
- 对于本地验证:`terraform`、`python 3`、`pytest`、`checkov`,可选的
`PyYAML`。任何验证步骤均不需要 AWS 凭证。
- 对于实际部署:一个 AWS 账户、一个 ACM 证书、一个处理
`GET /health` -> 200 的容器镜像,以及替换为您自己的值的占位符。
## 安全的本地验证(无需 AWS 凭证)
```
# 格式检查
terraform fmt -check -recursive
# 验证两个示例(无 plan、无 apply、无 AWS creds)
cd examples/production && terraform init -backend=false && terraform validate && cd -
cd examples/lab && terraform init -backend=false && terraform validate && cd -
# 原生 Terraform 测试(mock provider)
( cd modules/rds && terraform init -backend=false && terraform test )
( cd modules/network && terraform init -backend=false && terraform test )
# 静态 security-invariant 测试
python -m pytest tests/python -q
# IaC 扫描(预期 0 个失败)
checkov -d examples/production --framework terraform --quiet
checkov -d examples/lab --framework terraform --quiet
# 或运行 orchestrator(在 Linux/macOS/CI 上):
bash scripts/validate.sh
```
结果记录在 [`docs/validation-report.md`](docs/validation-report.md) 中。
## 实验室和生产环境使用示例
这两个示例都是独立的 Terraform 根模块,并在
`terraform.tfvars.example` 中提供了占位符默认值。将其复制到 `terraform.tfvars`,替换掉占位符(账户 ID、域名、ACM 证书 ARN、允许的 CIDR、容器镜像),然后执行:
```
cd examples/production # or examples/lab
cp terraform.tfvars.example terraform.tfvars
# 编辑 terraform.tfvars 并配置一个 remote backend
terraform init
terraform plan # review
terraform apply # only after human review
```
请记住:此仓库永远不会为您执行任何 apply 操作。
## 变量与输出
每个模块都在 `variables.tf` 中记录了其输入,并在 `outputs.tf` 中记录了其输出。示例级别的变量(区域、VPC CIDR、可用区、证书 ARN、允许的 CIDR、容器镜像、数据库类、标签)位于 `examples/*/variables.tf` 中。主要输出包括 ALB DNS 名称、VPC ID、ECS 集群、RDS endpoint、数据库主密钥 ARN(从不暴露具体值)、CloudTrail 名称和破窗角色 ARN。
## 成本警告
运行此架构**并非免费**。生产环境大约为 ~$300-450+/月(主要由
Multi-AZ RDS 和 NAT 网关占用);实验室环境约为 ~$120-180/月。有关优化手段和清理方法,请参见
[`docs/cost.md`](docs/cost.md)。
## 安全局限性
- IAM Identity Center 仅在文档中说明,未进行配置(需要 AWS 组织)。
- CloudFront 和 Route 53 是可选/仅在文档中说明,以保持 `terraform validate`
不会依赖真实的托管区。
- 用于 RDS 的 Secrets Manager 轮换 Lambda 超出范围;请在生产环境中配置。
- SCP 作为示例 JSON 输出提供;请在您的组织/OU 层级应用它们。
- 这是一个单账户参考架构;多账户/组织设计超出范围。
## 已知权衡
- 为了节约成本和便于销毁,实验室示例故意禁用了 RDS Multi-AZ 和删除保护(在生产环境中两者均已启用;checkov 跳过检查并附带了
正当理由)。
- 审计日志的保留期为 365 天;容器日志使用相同的默认值,
但可以为了降低成本而调低。
- 网络 ACL 保持 AWS 默认设置(见文档);安全组是
主要的分段控制手段。
- 少量 checkov 检查被内联抑制,并附有书面理由(参见
`docs/security-controls.md`)。
## 清理
```
cd examples/production # or the example you applied
terraform destroy
# 然后手动移除 S3 logging bucket 和 KMS keys(KMS 有等待期)。
```
此项目**不会**自动执行 apply。
## CI
- `.github/workflows/validate.yml` - fmt、init+validate 两个示例、原生
测试、pytest、checkov(两个示例)、YAML/JSON 检查以及 `validate.sh`。
最小权限;无 AWS 凭证;无真实的 `terraform plan`。
- `.github/workflows/codeql.yml` - 针对 Python 测试代码进行 CodeQL 分析。
- `.github/dependabot.yml` - github-actions、terraform 和 pip 生态系统。
## 许可证
MIT - 参见 [LICENSE](LICENSE)。
标签:AWS, DevSecOps, DPI, ECS, Terraform, 上游代理, 安全规则引擎, 漏洞利用检测, 逆向工具, 零信任架构