-
Notifications
You must be signed in to change notification settings - Fork 12
云资源枚举
cloudlist 对当前凭据可见的云资产做一次聚合枚举,用于验证 CSPM / CNAPP 的资产清单覆盖度:已知的云账号下是否全部资产都能被采集、字段是否完整、能否识别公网暴露面。
支持 9 家云厂商:阿里云、AWS、腾讯云、华为云、Azure、火山引擎、京东云、GCP、UCloud。
config.yaml 里 cloudlist 段配置了想枚举哪些资源类别(默认全开);单个 provider 是否实现该类别决定了实际能否拿到数据。当前实现矩阵:
| 厂商 | balance | host | domain | account | database | bucket | sms | log |
|---|---|---|---|---|---|---|---|---|
| alibaba | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| aws | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ |
| azure | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ |
| gcp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ✓ |
| huawei | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| jdcloud | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| tencent | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ucloud | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| volcengine | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
— 表示该云无原生等价服务(AWS / Azure / GCP 没有"sms 模板审计"概念,调研后跳过)。未实现的类别会被 provider 静默跳过,不影响其它类别的枚举。
默认 region=all(枚举所有已知区域)。如只关心某个 region:
ctk > aws > set region eu-west-3
AWS 中国区与全球区接口域名不同,通过 version 切换:
ctk > aws > set version China
首次启动会在当前目录或 ~/.config/cloudtoolkit/config.yaml 落地配置,关键字段:
common: log_enable: false # 是否把枚举结果落盘到 logs/ list_policies: false # 是否展开 IAM 策略 JSON 详情 log_dir: logs # 日志目录 timeout_minutes: 10 # 单次 run 的全局超时 log_format: text # text | json — json 输出每行一条 JSON Line,便于 SIEM 摄取 cloudlist: - balance # 账户余额 / billing 可见性 - host # 云主机(ECS / CVM / EC2 / VM ...) - domain # 域名解析记录 - account # IAM / RAM / CAM 用户 - database # 云数据库实例 - bucket # 对象存储 - sms # 云通信(短信签名/模板等) - log # 日志服务(SLS / CloudWatch Logs / Cloud Logging ...) iam-user-check: action: add # 默认动作;REPL 中 `set payload iam-user-check` 时会预填 metadata username: <set-before-first-run> password: <set-before-first-run> rds-account-check: username: <set-before-first-run> password: <set-before-first-run>
用 # 注释掉不希望枚举的类别即可。iam-user-check / rds-account-check 段是对应 payload 的 metadata 模板,真实验证前请填入自己生成的强口令。
cloudlist 对单个子服务(某个 region / 某个资产类别)的失败会用 partial enumeration errors 汇总提示,但已成功获取的资产仍会输出。如果整个 provider 的枚举都失败(例如凭据不合法),会直接报错返回。在 无人值守模式下,部分失败会以退出码 2 呈现,便于编排时区分"全失败 / 部分失败 / 全成功"。
防御方可以对照同一账号的 CSPM / CNAPP 资产清单,与 ctk 的输出做差异分析:
- CSPM 里有但 ctk 没枚举到 → ctk 覆盖缺口(欢迎提 issue)
- ctk 枚举到但 CSPM 里缺失 → CSPM 清单存在盲区,需要排查采集通路
- 两边都有但字段粒度不同 → 评估调查链路上字段是否足够