AurelienKumarathas/terraform-security-project
GitHub: AurelienKumarathas/terraform-security-project
面向AWS Terraform基础设施代码的多层安全审计方案,集成Checkov、tfsec和OPA三款工具进行静态分析与策略合规检查,并提供可直接部署的加固模块和SOC 2合规映射文档。
Stars: 0 | Forks: 0
# Terraform IaC 安全流水线 — QuantumTrade





## 概述
本项目展示了针对 **QuantumTrade**(一个处理加密货币交易的金融科技平台)的企业级基础设施即代码 安全扫描。它采用了使用三个独立工具 —— Checkov、tfsec 和 OPA —— 的纵深防御扫描方法,以便在部署前识别并修复安全配置错误。
该项目有意包含了一个不安全的 `main.tf`,以展示现实世界中的配置错误是什么样子,随后提供了加固的 Terraform 模块作为修复后的解决方案。
## 业务背景
| 项目 | 详情 |
|------|--------|
| **客户** | QuantumTrade — 加密货币交易平台 |
| **问题** | S3 数据泄露风险,临近 SOC 2 合规截止日期 |
| **解决方案** | 集成到 CI/CD 中的自动化 IaC 安全扫描 |
| **区域** | AWS eu-west-2 (伦敦) |
| **技术栈** | Terraform + AWS (S3, EC2, RDS PostgreSQL, VPC, KMS) |
## 扫描结果摘要
### 原始 `main.tf` (故意设置的不安全配置)
| 工具 | 通过 | 失败 | 严重 |
|------|--------|--------|----------|
| Checkov v3.2.510 | 14 | 19 | 0 |
| tfsec v1.28.14 | 9 | 19 | 2 |
| OPA v0.71 | — | 23 个标签违规 | — |
### 安全模块 (修复后)
| 工具 | 通过 | 失败 | 改善幅度 |
|------|--------|--------|-------------|
| Checkov | 33 | 2 | 减少 89% |
| tfsec | 12 | 1 | 减少 95% |
| OPA | 0 违规 | — | 100% 解决 |
## 仓库结构
```
terraform-security-project/
├── terraform/
│ ├── main.tf # Intentionally insecure (demo)
│ ├── main_secure.tf # Secure version using modules
│ ├── variables.tf # Input variables
│ └── modules/
│ ├── s3/main.tf # Hardened S3 module
│ └── ec2/main.tf # Hardened EC2 module
├── policies/
│ └── opa/
│ ├── required_tags.rego # Enforce Owner, Environment, CostCenter
│ ├── ec2_instance_types.rego # Block t2 instances in production
│ └── s3_versioning.rego # Require versioning on production buckets
├── docs/
│ ├── SOC2_CONTROL_MAPPING.md # SOC 2 Trust Service Criteria mapping
│ └── SECURITY_REPORT.md # Full security assessment report
├── checkov-results.json # Checkov raw output (original main.tf)
├── tfsec-results.json # tfsec raw output (original main.tf)
├── tfsec-results.sarif # SARIF format for GitHub Security tab
├── checkov-modules-results.txt # Checkov output (secure modules)
├── tfsec-modules-results.txt # tfsec output (secure modules)
├── opa-results.json # OPA policy evaluation output
└── security-findings.md # Consolidated findings document
```
## 安全工具
### Checkov (Prisma Cloud) — v3.2.510
针对 2,500 多项 CIS Benchmark 和合规策略进行静态分析。无需 AWS 凭证或部署即可扫描 Terraform 文件。
```
checkov -d terraform/
checkov -d terraform/modules/
checkov -f terraform/main.tf -o json > checkov-results.json
```
### tfsec (Aqua Security) — v1.28.14
具有严重等级 (CRITICAL/HIGH/MEDIUM/LOW) 的 AWS 特定安全规则。能捕捉 Checkov 遗漏的问题,包括 VPC 流日志 和 S3 版本控制。
```
tfsec terraform/
tfsec terraform/ --format json > tfsec-results.json
tfsec terraform/ --format sarif > tfsec-results.sarif
tfsec terraform/ --minimum-severity HIGH
```
### OPA (Open Policy Agent) — v0.71
通过自定义 Rego 策略强制执行商业工具无法知晓的组织特定规则 —— 标签标准、批准的实例类型以及架构要求。
```
opa eval --format pretty \
--data policies/opa/ \
--input terraform/tfplan.json \
"data.terraform"
```
## 关键发现
### 严重问题 (原始 `main.tf`)
| # | 问题 | 工具 | 检查 ID | 风险 |
|---|-------|------|----------|------|
| 1 | SSH 端口 22 对 0.0.0.0/0 开放 | tfsec | aws-ec2-no-public-ingress-sgr | 暴力破解攻击向量对整个互联网开放 |
| 2 | 所有端口的无限制出站流量 | tfsec | aws-ec2-no-public-egress-sgr | 受损实例可以向任何地方渗透数据 |
### 高危问题 (原始 `main.tf`, 示例)
| # | 问题 | 工具 | 检查 ID |
|---|-------|------|----------|
| 1 | S3 存储桶未加密 | Checkov + tfsec | CKV_AWS_19 / aws-s3-enable-bucket-encryption |
| 2 | 所有 4 项 S3 公共访问阻止设置均被禁用 | Checkov | CKV_AWS_53, 54, 55, 56 |
| 3 | RDS 存储未加密 | Checkov + tfsec | CKV_AWS_16 / aws-rds-encrypt-instance-storage-data |
| 4 | EC2 EBS 根卷未加密 | Checkov + tfsec | CKV_AWS_8 / aws-ec2-enable-at-rest-encryption |
| 5 | EC2 上启用了 IMDSv1 (SSRF 风险) | Checkov + tfsec | CKV_AWS_79 / aws-ec2-enforce-http-token-imds |
| 6 | RDS 无删除保护 | Checkov | CKV_AWS_293 |
| 7 | RDS 无 Multi-AZ | Checkov | CKV_AWS_157 |
| 8 | RDS 无 IAM 身份验证 | Checkov | CKV_AWS_161 |
| 9 | EC2 详细监控已禁用 | Checkov | CKV_AWS_126 |
### 中危问题 (原始 `main.tf`)
| # | 问题 | 工具 | 检查 ID |
|---|-------|------|----------|
| 1 | S3 无访问日志 | tfsec | aws-s3-enable-bucket-logging |
| 2 | S3 无版本控制 | tfsec | aws-s3-enable-versioning |
| 3 | VPC 流日志已禁用 | tfsec | aws-ec2-require-vpc-flow-logs-for-all-vpcs |
| 4 | RDS 无 CloudWatch 日志 | Checkov | CKV_AWS_129 |
| 5 | RDS 无自动次要版本升级 | Checkov | CKV_AWS_226 |
| 6 | 缺少安全组规则描述 | Checkov | CKV_AWS_23 |
### OPA 自定义策略违规 (共 23 项)
原始 `main.tf` 中的所有资源均缺少必需的业务标签。如果没有一致的标签,成本归属将无法进行,且事件响应也会变慢。
| 资源 | 缺少: Environment | 缺少: Owner | 缺少: CostCenter |
|----------|---------------------|----------------|---------------------|
| `aws_db_instance.main` | ❌ | ❌ | ❌ |
| `aws_db_subnet_group.main` | ❌ | ❌ | ❌ |
| `aws_instance.app_server` | ❌ | ❌ | ❌ |
| `aws_s3_bucket.data_bucket` | ✅ | ❌ | ❌ |
| `aws_security_group.app_sg` | ❌ | ❌ | ❌ |
| `aws_subnet.private` | ❌ | ❌ | ❌ |
| `aws_subnet.private_2` | ❌ | ❌ | ❌ |
| `aws_vpc.main` | ❌ | ❌ | ❌ |
## 安全模块设计
### S3 模块 (`terraform/modules/s3/`)
使用此模块创建的每个存储桶都会自动强制执行:
- ✅ KMS 服务端加密 (`sse_algorithm = "aws:kms"`)
- ✅ 所有 4 项公共访问阻止设置均设为 `true`
- ✅ 启用版本控制 (`status = "Enabled"`)
- ✅ 访问日志记录到专用日志存储桶
- ✅ 生命周期规则 (90 天转 Standard-IA,180 天转 Glacier)
- ✅ `Owner`、`Environment` 和 `CostCenter` 标签作为必填输入项
### EC2 模块 (`terraform/modules/ec2/`)
使用此模块创建的每个实例都会自动强制执行:
- ✅ 强制要求 IMDSv2 (`http_tokens = "required"`, `http_put_response_hop_limit = 1`)
- ✅ EBS 根卷使用 KMS CMK 加密 (`encrypted = true`)
- ✅ 详细的 CloudWatch 监控 (`monitoring = true`)
- ✅ 无公有 IP 地址 (`associate_public_ip_address = false`)
- ✅ 通过 Terraform 输入验证阻止 t2 系列实例
- ✅ `Owner`、`Environment` 和 `CostCenter` 标签作为必填输入项
## OPA 策略
### `required_tags.rego`
拒绝任何缺少 `Environment`、`Owner` 或 `CostCenter` 标签的资源。如果 Environment 的值不是 `production`、`staging` 或 `development` 之一,则发出警告。
### `ec2_instance_types.rego`
拒绝在生产环境中使用 t2 系列实例。对在生产环境中使用 micro 尺寸的实例发出警告。
### `s3_versioning.rego`
拒绝未启用版本控制的生产环境 S3 存储桶。对任何缺少生命周期规则的 S3 存储桶发出警告。
## 开始使用
### 前置条件
```
# Checkov (Python)
pip install checkov
# tfsec 和 OPA (macOS)
brew install tfsec
brew install opa
brew install terraform
```
### 运行所有扫描
```
# Clone
git clone https://github.com/YOUR_USERNAME/terraform-security-project.git
cd terraform-security-project
# Checkov — 原始不安全配置
checkov -d terraform/
# Checkov — 安全模块
checkov -d terraform/modules/
# tfsec — 原始不安全配置
tfsec terraform/
# tfsec — 安全模块
tfsec terraform/modules/
# Terraform plan (需要通过 aws configure 提供 AWS credentials)
cd terraform
terraform init
terraform plan -out=tfplan
terraform show -json tfplan > tfplan.json
cd ..
# OPA — 评估所有策略
opa eval --format pretty \
--data policies/opa/ \
--input terraform/tfplan.json \
"data.terraform"
```
## 合规文档
| 文档 | 描述 |
|----------|-------------|
| [`docs/SOC2_CONTROL_MAPPING.md`](docs/SOC2_CONTROL_MAPPING.md) | 完整的 SOC 2 TSC 映射 — CC6, CC7, CC8, CC9 |
| [`docs/SECURITY_REPORT.md`](docs/SECURITY_REPORT.md) | 完整的安全评估,包含所有发现和修复状态 |
| [`security-findings.md`](security-findings.md) | Checkov 和 tfsec 的汇总发现及修复代码示例 |
## 展示的技能
- **IaC 安全:** 使用 Checkov 和 tfsec 对 Terraform 进行静态分析
- **策略即代码:** 在 OPA 中使用自定义 Rego 策略强制执行业务特定规则
- **威胁建模:** 识别真实攻击向量 (通过 IMDSv1 进行 SSRF、数据渗透、SSH 暴力破解)
- **修复:** 通过加固的可重用模块将安全故障从 19 个减少到 2 个
- **合规:** SOC 2 控制映射与证据收集
- **纵深防御:** 三个独立工具各自捕捉不同类别的问题
- **密钥管理:** 防止硬编码凭证;tfplan.json 已加入 gitignore
## 关于
*`main.tf` 中的所有漏洞均为教学演示目的而故意设置。`terraform/modules/` 中的安全模块代表了可用于生产环境的加固模式。*
标签:ATTACK-Python-Client, AWS, AWS eu-west-2, CISA项目, CIS Benchmark, DevSecOps, DPI, EC2, ECS, GitHub Advanced Security, IaC, IaC 安全, KMS, OPA, RDS, S3 安全, SOC 2 合规, Terraform, tfsec, VPC, 上游代理, 加密货币, 安全加固, 安全策略即代码, 漏洞修复, 漏洞利用检测, 结构化提示词, 网络安全培训, 逆向工具, 金融科技, 错误基检测, 防御纵深, 静态代码分析, 靶场