通过一个 CLI 对 AWS、Azure 和 GCP 进行映射、绘制图表和审计。构建拓扑图,运行 Prowler/Checkov/Trivy,将发现结果标记到 28 个合规框架,并导出 HTML 报告、RDF 本体、RAG 分块和 Terraform 重建文件。
cloudg(cloud graphing)将 AWS、Azure 和 GCP 基础设施映射为图,
在同一份清单上运行安全扫描器,并将结果转化为真正可用的报告。
一条命令即可并行地从每个已配置的提供商收集资产,将其送入 NetworkX 图进行可达性和攻击路径分析,分发给 Prowler、ScoutSuite、Checkov 和 Trivy,然后针对 28 个合规框架合并并去重所有发现项。最终产出交互式 HTML 报告、GraphML、RDF 本体、用于 LLM 流水线的 RAG 分块,以及可重建实时基础设施的 Terraform 文件。
只需要地图而不需要安全工具?cloudg map 是一个独立于扫描器的清单映射器:它深度收集账户中所有已部署(或默认)的资源,直至网络结构,扫描其余所有服务,并将它们链接成一张资产地图,之后你可以叠加扫描器发现项。参见清单映射。
想让 AI 代理处理这一切?cloudg mcp serve 将 cloudg 变成 MCP 服务器,供 Claude Desktop、Claude Code、Cursor 或任何支持 Model Context Protocol 的工具使用。参见 MCP 服务器。
完整文档: 渲染后的手册位于 morpheuslord.github.io/cloudg,其内容与 功能参考 中的 markdown 相同,发布说明见变更日志。清单映射器有专门的深入文档:清单参考(逐一字段说明每个返回结构和输出文件)、清单目录(全部 156 种资产类型及其元数据和关系)以及清单内部机制(工作原理及如何扩展)。MCP 服务器由 MCP 指南、工具参考 和隐私参考 介绍,限流相关内容见速率限制与限流。
示例报告: 想在运行任何内容之前了解 cloudg 的产出,请打开示例报告。它是一个合成的 AWS、Azure 和 GCP 环境的 report.html,因此其中的每个 ID 都是虚构的,scripts/build_sample_report.py 可从测试夹具重新构建它。
git clone https://github.com/morpheuslord/cloudg.git
cd cloudg
uv venv && source .venv/bin/activate
uv pip install -e ".[all,dev]"
# one provider, one region
cloudg run -p aws --regions us-east-1
# everything, everywhere
cloudg run -p all --regions all
# with Terraform recreation files
cloudg run -p aws --regions us-east-1 --terraform
报告会生成在 ./reports 目录中。请先打开 report.html。
已经自行运行过扫描器?可以直接把它们的原生输出文件提供给 cloudg。无需云凭证,也无需扫描器二进制文件:
cloudg ingest --prowler ./prowler-output/ --checkov ./results_json.json --trivy ./trivy.json
Prowler、ScoutSuite、Checkov 和 Trivy 输出的任意组合均可使用;cloudg 会进行规范化,通过检查等价规则集在各扫描器之间去重,映射合规框架,并渲染报告。
在 CI 中,cloudg gate 会在发现达到或超过某一严重级别时使任务失败,并写入 SARIF 以供代码扫描使用。在 GitHub 上,该仓库同时充当一个 action,用于安装 cloudg 和各个扫描器、运行流水线并对其进行门禁控制:
permissions:
contents: read
id-token: write # OIDC login to the cloud
security-events: write # SARIF upload
steps:
- uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::123456789012:role/cloudg-github
aws-region: us-east-1
- uses: morpheuslord/[email protected]
with:
provider: aws
fail-on: critical
min-assets: "1"
CI 与自动化指南 涵盖了所有输入项、Azure 和 GCP 登录、GitLab CI 以及纯 shell 版本。
直接使用 pip 也可以:pip install -e ".[all]"。云 SDK 作为附加项,因此 pip install cloudg[aws] 只会拉取 boto3/aioboto3,[azure] 和 [gcp] 对其各自的 SDK 同理,而 [all] 会安装全部。不含附加项的核心包仍然提供图引擎、本体、规范化器和报告渲染器。
外部扫描器(Prowler、Checkov、Trivy、ScoutSuite)是独立的可执行文件,而非 Python 依赖项。install.sh(Linux/macOS)和 install.bat(Windows)会设置好一切,包括扫描器和云 CLI。
Docker 是省事的路径:镜像捆绑了 Prowler、Checkov 和 Trivy(不包含 ScoutSuite,因此需单独运行它并将其报告提供给 cloudg ingest):
docker build -t cloudg:latest .
docker compose run --rm cloudg run -p aws --regions us-east-1
cloudg map 回答的问题与 cloudg run 不同:它关注的是存在什么,以及它们如何相互连接。找出问题所在仍然是扫描器的工作,这里不会运行任何扫描器,甚至不需要安装它们。让映射完整的关键在于:
--org 从管理账户发现 AWS Organization(OU 树、账户、SCP,以及 Control Tower 着陆区及其受管区域和已启用的控制项),并映射每个成员账户。INVOKES Lambda,任务定义 USES_IMAGE ECR 仓库,函数 ASSUMES_ROLE 角色,WAF PROTECTS ALB,Inspector MONITORS 实例,堆栈 MANAGES 资源,SCP GOVERNS OU,以及对未映射账户的跨账户信任。随后 cloudg deps 回答“这需要什么”和“如果它挂了会破坏什么”。# map one provider
cloudg map -p aws --regions all
# every account in the AWS Organization / Control Tower landing zone
cloudg map -p aws --org --regions all
# map everything, everywhere
cloudg map -p all --regions all
# what depends on this role, and what does it depend on?
cloudg deps arn:aws:iam::123456789012:role/app-role
# overlay scanner findings you generated earlier -> asset map + compliance map
cloudg map -p aws --regions all --findings ./reports/raw-findings.json
输出:inventory-map.json(资产、互连关系、采集覆盖情况、摘要)、inventory-map.graphml、供查看器使用的 inventory-graph.json、inventory-dependencies.json(共享依赖、爆炸半径、跨账户边、安全覆盖缺口),以及在使用 --org 时生成的 inventory-organization.json。使用 --findings 时,还会额外生成 asset-map.json(每个资产及其发现项和严重性分布)和 compliance-map.json(框架 → 受影响资产)。该映射从不依赖扫描器;你可以今天先做映射,下周再合并扫描得到的发现项。每个文件都在 inventory reference 中逐字段说明,并附有带注释的示例。
所有这些也作为库 API 提供,参见将其作为库使用:
from cloudg import CloudGConfig, CloudGEngine
engine = CloudGEngine(CloudGConfig(providers=["aws", "azure", "gcp"]))
inventory = engine.map_inventory_sync(output_dir="./reports")
print(inventory.summary["assets_by_service"])
cloudg 可以通过模型上下文协议(Model Context Protocol)将其资产清单、图谱、发现项、合规映射和本体交给 AI 代理:74 个工具、13 个资源、11 个资源模板和 11 个提示词,从 find_assets 和 attack_paths 到 blast_radius、compliance_gaps 以及 security_posture_review 提示词。
pip install "cloudg[mcp]" # the native server needs no extra; this adds the official SDK (mcp>=1.30,<3)
# stdio for a desktop client, with a map you already made
cloudg mcp serve --dataset prod=./reports/inventory-map.json
cloudg mcp config --client claude-desktop --dataset prod=./reports/inventory-map.json
# streamable HTTP on 127.0.0.1:8765/mcp with a bearer token
cloudg mcp serve --transport http --auth-token env:CLOUDG_MCP_TOKEN:analyst
已经在运行 MCP 服务器?用 CloudGMCPLayer(...).register_into(server) 把 cloudg 挂载进去(官方 mcp SDK 1.x 或 2.x,或 fastmcp),或者跳过网络层,直接从 Python 中 await layer.call_tool(...)。无论请求以何种方式到达,每个请求都会经过同一套策略。默认的 standard 配置文件会脱敏机密信息,并对攻击者可控的文本进行围栏隔离;strict 还会对账户 ID、ARN、IP 和名称进行假名化(作为参数传回的假名会被解析还原),并隐藏接触云端的工具。实时工具(map_inventory、collect_assets、run_scanners、run_pipeline)会在首次 API 调用前检查凭据,并拒绝重新采集几分钟前刚采集过的范围。