Skip to content

云资源枚举

404tk edited this page May 6, 2026 · 5 revisions

场景定位

cloudlist 对当前凭据可见的云资产做一次聚合枚举,用于验证 CSPM / CNAPP 的资产清单覆盖度:已知的云账号下是否全部资产都能被采集、字段是否完整、能否识别公网暴露面。

支持 9 家云厂商:阿里云、AWS、腾讯云、华为云、Azure、火山引擎、京东云、GCP、UCloud。

各厂商覆盖类别

config.yamlcloudlist 段配置了想枚举哪些资源类别(默认全开);单个 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 中国区

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 清单存在盲区,需要排查采集通路
  • 两边都有但字段粒度不同 → 评估调查链路上字段是否足够

Clone this wiki locally