garvittkohli/gcp-misconfig-scanner
GitHub: garvittkohli/gcp-misconfig-scanner
一款基于 CIS 基准的 GCP 安全配置扫描工具,能在只读模式下检测六大核心服务的配置错误并自动生成 Terraform 修复代码。
Stars: 1 | Forks: 0
# GCP 配置错误扫描器
[](https://github.com/garvittkohli/gcp-misconfig-scanner/actions/workflows/ci.yml)
[](https://www.python.org/)
[](https://opensource.org/licenses/MIT)
## 背景
在我们 GCP 基础设施遭遇的一次加密货币挖矿攻击的事件响应之后,我开发了这款工具。事件发生后,我没有系统的方法来检查我们的配置是否偏离了预期——是否有人添加了宽松的防火墙规则、留下了公开的存储桶,或者忘记了启用审计日志。Google 的 Security Command Center 可以解决此问题,但其成本并不适合所有团队。Prowler 和 ScoutSuite 涵盖了跨多个云的数百项检查,但不生成修复代码。我想要一款能够契合我们实际工作流程的工具:将发现的问题生成 Terraform 代码块,并直接输入到我们用于所有基础设施变更的同一套 PR 审查流程中。
## 功能简介
扫描 GCP 项目中的六个服务——IAM、Compute Engine、VPC Firewall、Cloud Storage、Cloud SQL 和 Cloud Logging——针对 23 项特定的配置错误,每项均映射至 CIS GCP Foundation Benchmark v2.0 控制项。每项发现都包含用于修复的确切 Terraform HCL。结果可以以 ECS 格式发送至 Elasticsearch,以便集成至 SIEM。
该工具是只读的。它绝不会向 GCP 进行写入。
## 架构
```
cli.py
└── ScanEngine
├── IAMScanner → primitive roles, public members, SA key age
├── ComputeScanner → public IPs, OS Login, serial port, default SA
├── FirewallScanner → open SSH/RDP/DB ports, allow-all rules
├── StorageScanner → public buckets, uniform access, versioning, logging
├── SQLScanner → public IP, SSL, authorized networks, backups
└── LoggingScanner → audit log config, log sink existence
│
├── HTMLReporter → output/report.html
├── JSONReporter → output/findings.json
└── ELKShipper → POST to Elasticsearch (optional)
```
## 安装说明
```
git clone https://github.com/YOUR_USERNAME/gcp-misconfig-scanner
cd gcp-misconfig-scanner
pip install -r requirements.txt
pip install -e .
```
## 身份验证
```
# 本地开发
gcloud auth application-default login
# CI/CD 或 production
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
# 或直接传递:
gcp-scan scan --project my-project --sa-key /path/to/key.json
```
用于扫描服务账号的最低 IAM 角色:
| 角色 | 用途 |
|------|---------|
| `roles/viewer` | 列出 compute、SQL 和项目资源 |
| `roles/iam.securityReviewer` | 读取 IAM 策略和 SA 密钥元数据 |
| `roles/storage.objectViewer` | 读取 bucket IAM 策略 |
| `roles/cloudsql.viewer` | 读取 Cloud SQL 实例配置 |
| `roles/logging.viewer` | 列出 log sink 和审计配置 |
## 用法
```
# Full scan — ./output/ 中的 HTML + JSON 报告
gcp-scan scan --project YOUR_PROJECT_ID
# 仅终端输出,不写入文件
gcp-scan quick-check --project YOUR_PROJECT_ID
# 扫描单个服务
gcp-scan quick-check --project YOUR_PROJECT_ID --scanner firewall
# 生成示例报告,无需 GCP credentials
gcp-scan demo
# 跳过某个 scanner
gcp-scan scan --project YOUR_PROJECT_ID --skip sql
# 将 findings 发送至 Elasticsearch
gcp-scan scan --project YOUR_PROJECT_ID --ship-elk
# CI/CD build gate — 遇到任何 CRITICAL finding 时以退出码 1 退出
gcp-scan scan --project YOUR_PROJECT_ID --fail-on-critical --no-html
```
## 检查项
| 规则 ID | 严重性 | 描述 | CIS 控制项 |
|---------|----------|-------------|-------------|
| GCP-IAM-001 | HIGH | 向用户分配了 Primitive Owner/Editor 角色 | 1.4/1.5 |
| GCP-IAM-002 | HIGH | Service account 拥有 primitive 角色 | 1.5 |
| GCP-IAM-003 | MEDIUM | Service account 密钥超过 90 天 | 1.7 |
| GCP-IAM-004 | CRITICAL | 项目 IAM 中包含 allUsers/allAuthenticatedUsers | 1.6 |
| GCP-FW-001 | CRITICAL | SSH 端口 22 对 0.0.0.0/0 开放 | 3.6 |
| GCP-FW-002 | CRITICAL | RDP 端口 3389 对 0.0.0.0/0 开放 | 3.6 |
| GCP-FW-003 | CRITICAL | 允许来自 0.0.0.0/0 的所有流量 | 3.6 |
| GCP-FW-004 | CRITICAL | 数据库端口暴露在互联网上 | 3.6 |
| GCP-GCS-001 | CRITICAL | GCS bucket 可公开访问 | 5.1 |
| GCP-GCS-002 | MEDIUM | 未强制启用 Uniform bucket-level access | 5.2 |
| GCP-GCS-003 | LOW | 未启用 Bucket versioning | 5.3 |
| GCP-GCS-004 | LOW | 未启用 Bucket access logging | 5.4 |
| GCP-SQL-001 | HIGH | Cloud SQL 实例具有公网 IP | 6.2 |
| GCP-SQL-002 | MEDIUM | 未强制要求 SSL 连接 | 6.4 |
| GCP-SQL-003 | CRITICAL | authorized networks 中包含 0.0.0.0/0 | 6.3 |
| GCP-SQL-004 | MEDIUM | 自动备份被禁用 | 6.7 |
| GCP-COMP-001 | MEDIUM | Compute 实例具有公共外部 IP | 4.9 |
| GCP-COMP-002 | MEDIUM | 未启用 OS Login | 4.4 |
| GCP-COMP-003 | MEDIUM | 串行端口访问已启用 | 4.5 |
| GCP-COMP-004 | HIGH | 默认 SA 拥有完整的 cloud-platform scope | 4.1 |
| GCP-COMP-005 | LOW | 未阻止全项目范围的 SSH 密钥 | 4.3 |
| GCP-LOG-001 | HIGH | 未启用 DATA_READ/DATA_WRITE 审计日志 | 2.1 |
| GCP-LOG-002 | MEDIUM | 未配置 log sink | 2.2 |
## 运行测试
```
pip install pytest pytest-cov
pytest tests/ -v --cov=scanner
```
## CI/CD 集成
```
- name: GCP Security Scan
run: |
pip install -r requirements.txt
gcp-scan scan \
--project ${{ secrets.GCP_PROJECT_ID }} \
--sa-key /tmp/sa-key.json \
--fail-on-critical \
--no-html
```
## 许可证
MIT
标签:Anthropic, CIS基准, ECS, GCP, Python, Terraform, 无后门, 无线安全, 逆向工具