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, 上游代理, 安全扫描器, 数据加密, 文档结构分析, 无后门, 网络访问控制, 自定义规则, 误配置检测, 逆向工具, 错误基检测, 静态代码分析