Skip to content

v0.5.0 - Inventory system with security fixes

Choose a tag to compare

@morpheuslord morpheuslord released this 30 Sep 14:46
· 118 commits to main since this release
3e740e1

Inventory mapping. A dedicated, scanner-independent function that maps everything deployed (or default) in a cloud estate and how it interlinks. It answers what exists and how it is wired together; the scanners keep answering what is wrong.

Added:

  • cloudg map CLI command: deep-collects the complete infrastructure across AWS, Azure and GCP without running any scanner, links it into an interconnected map, and writes inventory-map.json, inventory-map.graphml and inventory-graph.json. --findings merges previously generated scanner findings into asset-map.json (asset → risk) and compliance-map.json (framework → affected assets).
  • cloudg.inventory package, all public API:
    • AWSDeepInventoryCollector adds route tables, internet/NAT gateways, network interfaces, EBS volumes, Elastic IPs, NACLs, VPC peering, transit gateways and customer-managed IAM policies on top of the standard collector, plus a catch-all sweep of the Resource Groups Tagging API so every taggable resource appears on the map.
    • AzureDeepInventoryCollector adds NICs, public IPs, managed disks, load balancers and route tables, plus a full-subscription ARM resources.list() sweep covering every service.
    • GCPDeepInventoryCollector brings a richer Cloud Asset Inventory type taxonomy and IAM policy bindings as attachment edges.
    • RelationshipLinker derives interconnection edges purely from asset metadata (attachment, containment, routing, peering, and a generic cross-service reference pass) and works on any list[CloudAsset].
    • InventoryMapper / InventoryResult: orchestration, summaries, exports, and the build_asset_map() / build_compliance_map() / export_merged() merge helpers.
  • CloudGEngine.map_inventory() / map_inventory_sync() for embedders.
  • inventory: config section (tagging_sweep, link_references).
  • New schema values: AssetType.NETWORK_INTERFACE, EdgeType.ATTACHED_TO, EdgeType.REFERENCES.
  • MultiAccountCollector accepts per-provider collector class overrides.
  • Documentation: inventory mapping is covered in the README, the handbook (cloudg map, the inventory mapping API) and the docs site; a new "deeper toolkit" chapter documents the standalone programmatic APIs (GraphBuilder, CloudOntology, RAGExporter, TerraformExporter, FindingsNormaliser, parsers).

Fixed (pre-release hardening, folded in before publish):

  • The engine's Checkov path passed framework= to a constructor that takes frameworks= (a list) and raised TypeError; it now forwards the configured framework list.
  • The GCP identifier checks in the inventory linker and mapper are anchored regexes, so .googleapis.com inside an unrelated ARN no longer classifies an asset as GCP (CodeQL py/incomplete-url-substring-sanitization).
  • The Pages deploy artifact carries the run attempt in its name; re-running the workflow no longer fails on "Multiple artifacts named github-pages".
  • install.sh no longer uses A && B || C as if-then-else anywhere; every step is an explicit if/else, with a pip_tool helper for the repeated pip installs.
  • Dockerfile pins parliament to 1.6.4.
  • Codacy complexity findings: the long CLI commands (run, scan, ingest), the engine phases (scan, analyze, run_pipeline), the SVG/HTML renderers, the ontology relation inference, the RAG exporters, credentials, registry discovery and the Prowler/IAM-linter scanners were split into focused helpers; behavior is unchanged and the CLI run command no longer takes 27 named parameters.
  • Codacy file-length findings: the four oversized modules were split along their natural seams, with every import path preserved — the CLI helpers moved to cli_helpers.py / cli_run_helpers.py and the run command to cli_commands.py; the AWS per-service collectors moved to aws_services.py / aws_services_extended.py mixins; the ontology relation-inference layer moved to ontology_rules.py (re-exported from ontology); the SVG hierarchical layout moved to svg_layout.py. The SVG output is byte-identical and the whole suite passes unchanged.

What's Changed

Full Changelog: v0.4.1...v0.5.0