AurelienKumarathas/terraform-security-project

GitHub: AurelienKumarathas/terraform-security-project

面向AWS Terraform基础设施代码的多层安全审计方案,集成Checkov、tfsec和OPA三款工具进行静态分析与策略合规检查,并提供可直接部署的加固模块和SOC 2合规映射文档。

Stars: 0 | Forks: 0

# Terraform IaC 安全流水线 — QuantumTrade ![Checkov](https://img.shields.io/badge/Checkov-v3.2.510-brightgreen) ![tfsec](https://img.shields.io/badge/tfsec-v1.28.14-brightgreen) ![OPA](https://img.shields.io/badge/OPA-v0.71-brightgreen) ![Terraform](https://img.shields.io/badge/Terraform-v1.14.4-blue) ![AWS](https://img.shields.io/badge/AWS-eu--west--2-orange) ## 概述 本项目展示了针对 **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, 上游代理, 加密货币, 安全加固, 安全策略即代码, 漏洞修复, 漏洞利用检测, 结构化提示词, 网络安全培训, 逆向工具, 金融科技, 错误基检测, 防御纵深, 静态代码分析, 靶场