Cloud discovery in three jobs: enumerate every resource, enrich it with owners and dependencies, and decide what to do with each one.
Discovery

Cloud Discovery Tools: Six Ways to Find What Is Running in Your Cloud

Cloud discovery tools build an inventory of what is running in your accounts. This guide compares the six approaches, from the provider's own inventory services to discovery that knows what your Terraform manages, and shows how to choose and how to check the result.

Reviewed for technical accuracy: November 12, 2026

  • Cloud discovery tools fall into six groups: provider inventory, open-source query tools, graph tools, security platforms, CMDB discovery, and IaC-aware discovery
  • Choose by the question you need answered, since no single approach covers search, relationships, risk, and code ownership equally well
  • Only IaC-aware discovery tells you which resources have no code behind them and helps bring them under code
  • Test any inventory for missing resource types, regions, and accounts, and reconcile it against the bill by service

Cloud discovery tools build an inventory of the resources running in your cloud accounts by reading the provider APIs, so you can see what exists without relying on documentation, tags, or Terraform state. They fall into six groups: the provider's own inventory services, open-source query tools, graph tools, cloud security platforms, CMDB discovery, and discovery built around infrastructure as code.

The groups answer different questions. A tool that is excellent at "what can reach this database?" may have nothing to say about "which of these resources has no code behind it?" This guide describes each approach, what it is good and bad at, and how to pick one by starting from the question you need answered.

One note on terminology. "Cloud discovery" is also the name of a feature in Microsoft Defender for Cloud Apps that finds SaaS applications in use by analyzing traffic logs. That is shadow IT discovery. This guide is about cloud resource discovery: finding the virtual machines, databases, buckets, networks, and identities inside your AWS, Azure, Google Cloud, or Oracle Cloud accounts.

What a cloud discovery tool does

Every tool in this space does some version of three jobs, and the differences between tools are differences in how far each job goes.

  • Enumerate. List every resource in every account, subscription, project, and region. This sounds simple and is where most gaps hide: an account nobody enrolled, a region nobody uses, a resource type the tool does not support.
  • Enrich. Attach context to each resource: its configuration, tags, owner, cost, what it depends on, and what depends on it. A list of 4,000 resource IDs is an inventory. It becomes useful when you can ask which of them are public, unowned, or unmanaged.
  • Keep current. Refresh on a schedule or from change events, and record when each resource was last seen. An inventory without a timestamp is a historical document.

The six approaches

1. Provider inventory services

Each cloud ships its own inventory. AWS has Resource Explorer for search across regions and accounts, and AWS Config for recording configuration and its history. Azure has Resource Graph, queried with Kusto Query Language across subscriptions. Google Cloud has Cloud Asset Inventory. All four are read from the command line:

BASH
# AWS: every EC2 instance the index knows about
aws resource-explorer-2 search --query-string "resourcetype:ec2:instance"

# Azure: resource count by type, across subscriptions
az graph query -q "Resources | summarize count() by type | order by count_ desc"

# Google Cloud: every Compute Engine instance in an organization
gcloud asset search-all-resources \
  --scope=organizations/123456789012 \
  --asset-types=compute.googleapis.com/Instance

Good at: being authoritative and close to free. There is nothing to install, and the data comes from the same control plane that runs the resources.

Weak at: anything beyond one cloud. Each service covers its own provider, supports a published list of resource types that is never the full catalog, and has no idea whether a resource is managed by code. Resource Explorer must be turned on with an aggregator index before cross-region search works, and AWS Config charges for each configuration item it records.

2. Open-source query tools

Steampipe and CloudQuery let you treat cloud APIs as tables. Steampipe, from Turbot, runs SQL against the live APIs and returns the answer directly. CloudQuery syncs cloud configuration into a database or warehouse you choose, where you query it later. Both cover many providers through plugins.

SQL
-- Steampipe: EC2 instances with no owner tag
select instance_id, instance_type, region
from aws_ec2_instance
where tags ->> 'owner' is null;

Good at: ad hoc questions across clouds, by engineers who are comfortable with SQL. The same query style works for AWS, Azure, Google Cloud, Kubernetes, and SaaS tools, and results drop into dashboards or scripts.

Weak at: being a product. You run it, schedule it, manage its credentials, and write the queries. The output is tables, so relationships between resources are joins you write yourself. Check the licensing before building on either: Steampipe is published under AGPL 3.0, and CloudQuery keeps its command-line tool and SDK open source while many of its provider plugins follow an open-core or paid model.

3. Graph tools

Cartography, a Cloud Native Computing Foundation sandbox project that began at Lyft, pulls assets from cloud accounts, Kubernetes, and SaaS services into a Neo4j graph. Resources become nodes and their relationships become edges, so a question such as "which roles can reach this bucket, and who can assume them?" is a graph query, not a chain of joins.

Good at: relationship questions, especially for security teams tracing access paths.

Weak at: the operational side. You run the sync jobs and the graph database, and the model is built for security analysis more than for day-to-day infrastructure ownership.

4. Cloud security platforms

Cloud security posture management and cloud-native application protection platforms, such as Wiz, Orca Security, and Prisma Cloud, connect to accounts without agents and build a detailed inventory as the basis for their findings. For many organizations this is the most complete inventory they own, even though inventory is not what they bought it for.

Good at: risk context. Each resource comes with its exposure, vulnerabilities, and the identities that can reach it. Cloud security posture management explained covers how these platforms work.

Weak at: serving anyone outside security. Access is often limited to the security team, the inventory is organized around findings, and the link from a resource back to the code that should manage it varies a lot by product.

5. CMDB discovery

IT service management platforms, with ServiceNow Discovery as the best-known example, populate a configuration management database with cloud resources as configuration items. The point is to connect infrastructure to the change, incident, and asset processes the rest of the organization already runs.

Good at: fitting cloud resources into existing IT governance, where a change request must reference a configuration item.

Weak at: keeping up. A CMDB models long-lived items with owners and lifecycles, and cloud resources that are created and destroyed by autoscaling or pipelines many times a day fit that model poorly. Expect modelling work and a sync delay.

6. IaC-aware discovery

The newest group compares the live inventory with infrastructure-as-code state. Each resource is classified as managed by code, unmanaged, or drifted from its code, and the tool can generate Terraform or OpenTofu for the resources that have none. ops0 and Firefly work this way.

Good at: the question the other five cannot answer: what exists that our code does not know about, and how do we bring it under code? It turns discovery from a report into a backlog.

Weak at: being a general-purpose query engine or a full security scanner. The value depends on your team using infrastructure as code, or wanting to.

In ops0, discovery scans AWS, Google Cloud, Azure, Oracle Cloud, and Kubernetes read-only across more than 230 resource types, maps dependencies between resources, grades each account, and generates Terraform or OpenTofu for the resources you select, which then go through plan, policy, and approval like any other change.

The approaches side by side

ApproachExamplesClouds coveredResource relationshipsKnows what code managesYou run it yourself
Provider inventoryAWS Resource Explorer, AWS Config, Azure Resource Graph, Google Cloud Asset InventoryOne eachSome. AWS Config records themNoNo
Open-source query toolsSteampipe, CloudQueryManyOnly through joins you writeNoYes
Graph toolsCartographyManyYesNoYes
Cloud security platformsWiz, Orca Security, Prisma CloudManyYes, for risk pathsVaries by productNo
CMDB discoveryServiceNow DiscoveryManyYes, as configuration item relationshipsNoPartly
IaC-aware discoveryops0, FireflyManyYesYesNo

How to choose: start from the question

Most teams end up with two of these, because no single approach answers every question. Picking the first one is easier when you write down the question that is blocking you.

The question you need answeredStart with
What do we have in this one cloud, today, at no cost?The provider's inventory service
Can we answer one-off questions across clouds without buying anything?An open-source query tool
What can reach what, and through which identities?A graph tool or a security platform
Which resources are exposed or vulnerable right now?A cloud security platform
How do cloud resources appear in our change and incident process?CMDB discovery
What is not in Terraform, and how do we get it there?IaC-aware discovery

How to check any inventory before you trust it

An inventory that is 90 percent complete is dangerous, because the missing tenth is where the forgotten resources are. Whatever tool you choose, test it against these six failure modes.

  • Resource type coverage. Ask for the list of supported types and compare it with the services you use. Newer and niche services are the usual gaps.
  • Region coverage. Confirm that every enabled region is scanned, including the ones your team believes are empty.
  • Account coverage. Check that a newly created account or project is enrolled automatically. If enrollment is manual, the newest accounts are the unscanned ones.
  • Permission errors. A scan that lacks permission to list a service often reports zero resources, not an error. Look for the access-denied count in the scan output.
  • Freshness. Every record should carry the time it was last seen. Decide how old is too old for the question you are asking.
  • Stable identifiers. Each resource needs its provider ID, such as an ARN, so two tools can be reconciled and a resource can be found again.

The fastest completeness test uses a source that cannot miss anything: the bill. List spend by service for the last full month, then check that every service with spend has resources in the inventory.

BASH
aws ce get-cost-and-usage \
  --time-period Start=2026-10-01,End=2026-11-01 \
  --granularity MONTHLY --metrics UnblendedCost \
  --group-by Type=DIMENSION,Key=SERVICE \
  --query 'ResultsByTime[0].Groups[].[Keys[0],Metrics.UnblendedCost.Amount]' \
  --output table

A service that costs money but shows nothing in the inventory is a coverage gap, and it is a much shorter list to investigate than the whole account.

From inventory to action

Discovery is finished when every resource on the list has a decision against it, not when the list exists. For resources with no code behind them, usually the result of ClickOps, there are three choices: import it into code, delete it, or record why it stays as it is.

Importing is the common one. Generating Terraform from existing AWS resources walks through import blocks and what to review in the generated code. For resources that are already in code, Terraform drift detection covers keeping them matched to it. And if the inventory is feeding an audit, the cloud infrastructure audit checklist starts with exactly this step, because every later check samples from the inventory.

Quick answers

What is a cloud discovery tool?

A cloud discovery tool builds an inventory of the resources in your cloud accounts by reading the provider APIs. It lists every resource across accounts and regions, attaches context such as configuration, tags, cost, and dependencies, and keeps the inventory current so teams can see what is running without relying on documentation or Terraform state.

What is the best free cloud discovery tool?

For a single cloud, start with the provider's own service: AWS Resource Explorer, Azure Resource Graph, or Google Cloud Asset Inventory. For questions across several clouds, Steampipe is an open-source option that queries cloud APIs with SQL. Free tools need more setup and do not tell you which resources are managed by code.

Is cloud discovery the same as CSPM?

No. Cloud security posture management uses an inventory to find misconfigurations and risk, so discovery is one of its inputs. A discovery tool may have no security findings at all, and a security platform's inventory is organized around findings, not around ownership or infrastructure as code.

Do cloud discovery tools need write access to my accounts?

No. Discovery reads configuration through the provider APIs, so a read-only role is enough. Be cautious of any discovery tool that asks for write permissions before you have decided to make a change with it.

How is cloud resource discovery different from a CMDB?

Discovery reads the live state of cloud accounts. A CMDB is a database of configuration items that supports change, incident, and asset processes, and discovery is one way to fill it. Cloud resources that are created and destroyed many times a day are hard to model as long-lived configuration items, so a CMDB usually lags the live inventory.

What is IaC-aware discovery?

IaC-aware discovery compares the live cloud inventory with Terraform, OpenTofu, or CloudFormation state. It classifies each resource as managed by code, unmanaged, or drifted, and can generate code for resources that have none, which turns the inventory into a list of resources to import, delete, or accept.

Sources
  • What is AWS Resource Explorer?: AWS documentation. Cross-region and multi-account resource search, and the aggregator index.
  • What is Azure Resource Graph?: Microsoft Learn. Querying resources across subscriptions with Kusto Query Language.
  • Cloud Asset Inventory overview: Google Cloud documentation. Searching and exporting asset metadata across an organization.
  • Steampipe: Turbot on GitHub. SQL queries against live cloud APIs, and the project's license.
  • CloudQuery: CloudQuery on GitHub. Syncing cloud configuration into a database, and the open-source command-line tool.
  • Cartography: Cloud Native Computing Foundation. Project status and description of the asset graph.
From article to workflow

Start with the cloud resources you actually run.

Use read-only discovery to inspect resource context before reviewing code, dependencies, or a proposed change.

Related articles

All articles