Prakashgode/IaC-Scanner

GitHub: Prakashgode/IaC-Scanner

一款轻量级的 Terraform IaC 安全扫描器,支持源码和 Plan JSON 双模式检测,在部署前发现 AWS 资源的常见配置风险。

Stars: 0 | Forks: 0

# Terraform IaC 扫描器 `terraform-iac-scanner` 是一个针对 Terraform 源代码和 Terraform plan JSON 的本地优先安全扫描器。 它旨在与 CSPM 项目配合使用: - CSPM 在部署后检查实时的 AWS 基础设施 - 此扫描器在部署前检查 Terraform ## 功能 - 扫描 `.tf` 文件以查找有风险的 Terraform 资源配置 - 扫描 `terraform show -json` 输出以查找有风险的计划状态 - 支持内置的以 AWS 为重点的检查和简单的自定义规则 - 输出人类可读的内容或供 CI 流水线使用的 JSON ## 内置检查 - 向 `0.0.0.0/0` 或 `::/0` 开放 SSH 或 RDP 入站流量 - 公开的 RDS 实例 - 未强制执行 RDS 存储加密 - 公开的 S3 bucket ACL - 薄弱的 S3 公开访问屏蔽设置 - 分配了公开 IP 的 EC2 实例 - 未强制执行 IMDSv2 的 EC2 实例 ## 自定义规则支持 自定义规则从 JSON 加载并支持: - `source_regex_rules`: 当正则表达式匹配 Terraform 源代码时发出发现 - `plan_rules`: 定义必需的计划值;当资源不满足该值时发出发现 ## 快速开始 ``` git clone https://github.com/Prakashgode/iac-scanner.git cd iac-scanner pip install -e .[dev] ``` ## 示例用法 扫描 Terraform 源代码: ``` tf-iac-scan scan --source ./samples/terraform/insecure ``` 同时扫描源代码和计划: ``` tf-iac-scan scan \ --source ./samples/terraform/insecure \ --plan ./samples/plans/insecure-plan.json \ --custom-rules ./custom_rules/example_rules.json ``` 输出 JSON 格式的发现: ``` tf-iac-scan scan \ --source ./samples/terraform/insecure \ --plan ./samples/plans/insecure-plan.json \ --format json \ --output ./output/findings.json ``` ## 示例输出 ``` Scanned Terraform files: 1 Scanned plan files: 1 Findings: 16 [HIGH] TF-AWS-EC2-IMDSV2 EC2 instance does not enforce IMDSv2 Location: source samples/terraform/insecure/main.tf:36 Resource: aws_instance.web [HIGH] TF-AWS-RDS-PUBLIC RDS instance is publicly accessible Location: plan samples/plans/insecure-plan.json Resource: aws_db_instance.app ``` ## 自定义规则 参见 [example_rules.json](custom_rules/example_rules.json)。 对于 `plan_rules`,规则表述的是合规的期望状态。示例: ``` { "id": "CUSTOM-PLAN-1", "title": "RDS Storage Encryption Must Be Enabled", "description": "RDS instances should enable storage encryption in the planned state.", "severity": "MEDIUM", "resource_types": ["aws_db_instance"], "field": "storage_encrypted", "operator": "equals", "value": true, "remediation": "Enable RDS storage encryption before deployment." } ``` 当 RDS 实例不满足 `storage_encrypted == true` 时,这将发出一个发现。 ## Terraform Plan 输入 ``` terraform plan -out tfplan terraform show -json tfplan > tfplan.json tf-iac-scan scan --plan ./tfplan.json ``` ## 本地验证 ``` ruff check . pytest -v python -m compileall src tests ``` ## 限制 - 源代码解析器有意保持轻量级,仅针对常见的 Terraform 资源模式 - 不执行模块展开;这是一个直接的源代码和计划扫描器,而不是完整的 Terraform 解释器 - 发现结果是基于启发式判断的,应用于把关审查,而不能替代工程判断
标签:AWS, CISA项目, DevSecOps, DPI, EC2, EC2, ECS, GraphQL安全矩阵, Homebrew安装, IaC, IaC, IMDSv2, Plan JSON, Pre-commit, Python, RDS, S3, Terraform, 上游代理, 安全扫描器, 数据加密, 文档结构分析, 无后门, 网络访问控制, 自定义规则, 误配置检测, 逆向工具, 错误基检测, 静态代码分析