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 [![validate](https://github.com/RIT-MESH/aws-zero-trust-reference-architecture/actions/workflows/validate.yml/badge.svg)](https://github.com/RIT-MESH/aws-zero-trust-reference-architecture/actions/workflows/validate.yml) [![codeql](https://github.com/RIT-MESH/aws-zero-trust-reference-architecture/actions/workflows/codeql.yml/badge.svg)](https://github.com/RIT-MESH/aws-zero-trust-reference-architecture/actions/workflows/codeql.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](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, 上游代理, 安全规则引擎, 漏洞利用检测, 逆向工具, 零信任架构