Management and Governance Resource Graph verified

ResourceContainers table

The ResourceContainers table is the Azure Resource Graph place to look for the containers that hold or organize resources. In practice, that means management groups, subscriptions, and resource groups rather than the VMs, databases, apps, and storage accounts themselves. It helps you answer questions such as which subscription owns this resource group, what tags exist on resource groups, or how resources roll up under management groups. It is most powerful when joined with the Resources table, because it adds estate structure to raw resource inventory.

Aliases
ResourceContainers, resource containers, Resource Graph containers table, subscription and resource group table
Difficulty
fundamentals
CLI mappings
4
Last verified
2026-05-22

Microsoft Learn

Microsoft Learn lists ResourceContainers as an Azure Resource Graph table containing container-level Azure Resource Manager records such as management groups, subscriptions, and resource groups. It is commonly joined with Resources to add subscription or resource-group context to inventory, governance, and reporting queries.

Microsoft Learn: Azure Resource Graph table and resource type reference2026-05-22

Technical context

In Azure architecture, ResourceContainers lives in the Azure Resource Graph control-plane query model. It represents organizational containers from Azure Resource Manager, including management groups, subscriptions, and resource groups. Operators use KQL to filter by container type, project names and tags, and join container records to Resources by subscription ID or resource-group fields. This table is central to governance because policies, RBAC boundaries, cost attribution, and lifecycle decisions often depend on the container, not only the individual resource. It is read through portal, CLI, PowerShell, SDK, and automation.

Why it matters

ResourceContainers table matters because Azure resource inventory without container context is incomplete. A storage account name or VM type may show what exists, but the subscription, resource group, tags, and management-group placement explain ownership, environment, policy inheritance, and financial accountability. Many organizations discover that resource tags are incomplete while resource-group tags or subscription metadata carry the operational truth. ResourceContainers lets teams enrich inventory queries without scraping portals. That helps during mergers, subscription vending, cleanup campaigns, compliance reviews, and chargeback. It also exposes structural drift, such as production resources placed in sandbox subscriptions or resource groups missing required lifecycle tags. This context keeps reports defensible.

Where you see it

Signals, screens, and Azure surfaces where this term usually becomes operational.

Signal 01

In Resource Graph Explorer, ResourceContainers queries return management groups, subscriptions, and resource groups with names, IDs, types, tags, and hierarchy-related metadata across management groups and tenants.

Signal 02

In Azure CLI output, ResourceContainers often appears in joins that add subscription or resource-group context to Resources inventory rows during subscription onboarding and ownership reviews.

Signal 03

In governance workbooks, container records power charts for missing owner tags, subscription placement, resource-group lifecycle, and management-group coverage before cleanup tickets are assigned to owners.

When this becomes relevant

Specific situations where this term helps solve real Azure design, operations, migration, security, reliability, cost, or governance problems.

  • Join subscription and resource-group metadata to Resources inventory so owners, environments, and cost centers appear in one report.
  • Find resource groups missing required lifecycle, owner, data-classification, or cost-center tags before policy enforcement begins.
  • Validate subscription placement under management groups after landing-zone vending, merger onboarding, or tenant reorganization.
  • Build cleanup campaigns by locating empty, stale, or ownerless resource groups across many subscriptions.
  • Support chargeback by tying individual resources to resource-group and subscription tags when resource-level tags are incomplete.

Real-world case studies

Different enterprise-style examples that show the term being used to hit measurable objectives.

Case study 01

Managed services provider fixes subscription context reporting

Scenario, objectives, solution, measured impact, and takeaway.

Scenario

A managed services provider operated Azure environments for dozens of customers. Engineers could list resources, but monthly reports often missed subscription names, resource-group owners, and lifecycle tags.

Business/Technical Objectives
  • Add subscription and resource-group context to every inventory export.
  • Reduce manual report cleanup before customer service reviews.
  • Find resource groups missing owner or lifecycle metadata.
  • Avoid requesting broader access than each support engineer needed.
Solution Using ResourceContainers table

The provider built Resource Graph queries that joined Resources with ResourceContainers. Subscription records supplied customer-facing subscription names, while resource-group rows supplied owner, environment, and lifecycle tags. Azure CLI ran the queries under least-privilege reader identities assigned through the provider operating model. The team exported JSON results into its reporting pipeline and flagged containers with missing required tags. Instead of asking engineers to browse each customer portal, the service desk reviewed one inventory export with resource, subscription, and resource-group context side by side.

Results & Business Impact
  • Monthly report preparation time dropped from five days to one and a half days.
  • Ownerless resource groups fell by 71 percent after customers received targeted remediation lists.
  • Support engineers stopped using broad portal access for routine inventory checks.
  • Customer review meetings improved because reports explained where each resource lived and who owned it.
Key Takeaway for Glossary Readers

ResourceContainers turns raw resource inventory into usable estate context by adding the subscription and resource-group facts operators need.

Case study 02

Manufacturer validates hierarchy after acquisition

Scenario, objectives, solution, measured impact, and takeaway.

Scenario

A global manufacturer acquired a robotics supplier and needed to bring its Azure subscriptions into the corporate landing-zone hierarchy. The acquired estate had inconsistent resource-group tags and unclear subscription placement.

Business/Technical Objectives
  • Map subscriptions and resource groups before moving anything into production management groups.
  • Identify containers missing business unit, environment, and data-classification tags.
  • Avoid policy assignments that would break legacy workloads during onboarding.
  • Give executives a reliable migration readiness score.
Solution Using ResourceContainers table

The cloud architecture team queried ResourceContainers from Azure CLI across the acquired tenant and exported subscriptions, resource groups, tags, and container IDs. They grouped subscriptions by intended management group, then joined resource groups with Resources to understand workload density. Containers missing required tags were routed to application owners before policy migration. The team used the query results to stage management-group moves, starting with low-risk dev subscriptions and delaying production subscriptions with legacy networking. ResourceContainers became the control inventory for onboarding rather than a spreadsheet maintained by hand.

Results & Business Impact
  • The team mapped 148 subscriptions and 2,900 resource groups in under two days.
  • Policy rollout exceptions were reduced by 38 percent because risky containers were identified before movement.
  • Migration readiness reporting improved from subjective status calls to measurable tag and placement evidence.
  • No production workload was broken by accidental landing-zone policy inheritance during the first migration wave.
Key Takeaway for Glossary Readers

Before reorganizing an Azure estate, ResourceContainers shows whether the hierarchy and metadata are ready for governance changes.

Case study 03

Game publisher targets stale resource groups after launch

Scenario, objectives, solution, measured impact, and takeaway.

Scenario

A game publisher spun up temporary Azure environments for beta tests, analytics, fraud detection, and launch-day support. Months later, nobody could tell which resource groups were safe to delete.

Business/Technical Objectives
  • Find stale resource groups without depending on tribal knowledge.
  • Tie cleanup recommendations to subscription, owner, and lifecycle tags.
  • Protect shared services and live-game environments from accidental deletion.
  • Reduce cloud waste left behind by launch projects.
Solution Using ResourceContainers table

Operations used Azure CLI to query ResourceContainers for resource groups with lifecycle tags such as beta, event, retired, and shared. They joined those rows with Resources to count child resources and identify live dependencies. The cleanup report separated empty groups, retired groups with billable resources, and shared groups that required manual review. Owners received export files with resource-group IDs, subscription names, tags, and estimated resource counts. The team added a weekly ResourceContainers check so new temporary environments had an expiration tag before launch teams could request additional capacity.

Results & Business Impact
  • The first cleanup wave removed 412 stale resource groups and about 1,100 idle resources.
  • Monthly Azure spend fell by roughly $42,000 without deleting active live-game services.
  • Accidental cleanup risk dropped because shared and production containers were excluded by tag and subscription context.
  • Temporary launch environments now require lifecycle metadata before approval.
Key Takeaway for Glossary Readers

ResourceContainers is a practical cleanup tool because resource-group metadata often reveals intent that individual resources do not show clearly.

Why use Azure CLI for this?

With ten years of Azure estate work behind me, I use Azure CLI for ResourceContainers because structure questions usually span many subscriptions. The portal is fine for one resource group, but CLI with Resource Graph can list every subscription, resource group, management group relationship, and tag pattern in one repeatable query. That is exactly what platform teams need before policy rollouts, migrations, chargeback reviews, or cleanup campaigns. CLI output can be exported, diffed, and handed to owners. It also avoids manual portal drift, where one engineer checks a few subscriptions and assumes the pattern holds everywhere. The shell makes hierarchy evidence repeatable.

CLI use cases

  • Run az graph query against ResourceContainers to list subscriptions, resource groups, and management groups visible to your identity.
  • Join ResourceContainers with Resources to add subscription names and resource-group tags to service inventory exports.
  • Filter resource groups by missing tags or stale lifecycle values before opening cleanup tickets for app teams.
  • Compare subscription container placement with the expected management-group hierarchy after platform vending or migrations.
  • Export container metadata as CSV or JSON evidence for governance, CMDB, FinOps, and audit workflows.

Before you run CLI

  • Confirm management-group, tenant, and subscription access because missing Reader scope can make the container hierarchy look cleaner than it is.
  • Know whether you are querying subscriptions, resource groups, or management groups; each container type has different fields and governance meaning.
  • Plan output format and row limits before joining with Resources, because large estates can produce noisy reports without careful projection.

What output tells you

  • The type field tells you whether the row represents a management group, subscription, service group, or resource group container.
  • Name, ID, subscription ID, and tags show where the container sits and which ownership or lifecycle metadata is available.
  • Joined outputs reveal whether resources inherit useful context from their subscription or resource group, even when resource-level tags are missing.

Mapped Azure CLI commands

Resource Graph CLI commands

direct
az graph query -q "ResourceContainers | where type =~ 'microsoft.resources/subscriptions' | project subscriptionId,name,tags"
az graphdiscoverManagement and Governance
az graph query -q "ResourceContainers | where type =~ 'microsoft.resources/subscriptions/resourcegroups' | project subscriptionId,name,resourceGroup,tags"
az graphdiscoverManagement and Governance
az graph query -q "Resources | join kind=leftouter (ResourceContainers | where type =~ 'microsoft.resources/subscriptions' | project subscriptionId, subscriptionName=name) on subscriptionId | project name,type,subscriptionName"
az graphdiscoverManagement and Governance
az graph query -q "ResourceContainers | where type contains 'resourcegroups' | where isempty(tags.Owner) | project id,name,subscriptionId"
az graphdiscoverManagement and Governance

Architecture context

Architecturally, ResourceContainers is the bridge between Azure’s organizational hierarchy and the resource inventory teams operate daily. Management groups define policy and governance scope, subscriptions define billing and access boundaries, and resource groups often carry application lifecycle and deployment ownership. When I design landing zones, I expect ResourceContainers queries to prove that the hierarchy matches the intended model. Join it with Resources to show every resource with subscription name, resource-group tags, environment, and business unit. Use it with policy and cost data to find containers that are missing owners, sitting in the wrong hierarchy, or carrying stale lifecycle labels. That prevents misleading estate summaries.

Security

Security impact is about visibility into boundaries. ResourceContainers does not enforce RBAC or policy directly, but it shows where those boundaries apply. Security teams can query subscriptions and resource groups to find missing ownership tags, risky environment labels, unexpected management-group placement, or containers outside approved landing zones. Access to results is still governed by Azure RBAC, so investigators need the right Reader permissions across the intended scope. Exported container metadata can reveal organizational structure, application names, and business units, so treat reports as internal evidence. Pair findings with policy assignments, role reviews, Defender for Cloud, and access governance. Review inherited access paths explicitly.

Cost

ResourceContainers affects cost indirectly through ownership and allocation. Subscriptions and resource groups are common units for budgets, cost exports, showback, and lifecycle cleanup. If containers are poorly tagged or misnamed, FinOps teams struggle to assign spend even when individual resources are visible. Joining ResourceContainers with Resources helps reveal workloads deployed into the wrong subscription, resource groups with no cost center, and containers that continue to hold idle resources after projects end. There is no separate bill for the table, but the query evidence can accelerate cleanup and prevent budget disputes. Container hygiene is a FinOps control surface. FinOps owners need this grouping.

Reliability

Reliability value is indirect but practical. ResourceContainers helps teams understand blast radius, ownership, and recovery grouping. If a production resource group lacks an owner or sits in the wrong subscription, incident response gets slower and rollback paths become unclear. Querying containers also helps validate that disaster-recovery resource groups, paired-region subscriptions, and shared-services containers are tagged and placed consistently. The table will not fail over resources, but it makes runbooks, dashboards, backup reviews, and dependency maps more reliable because container context is available at scale. Use it to verify structure before a crisis, not during the first outage call. That helps prioritize platform recovery.

Performance

ResourceContainers does not improve application latency or throughput directly. Its performance value is query and operational speed. Joining container context into inventory saves engineers from manually opening subscription and resource-group blades while building reports. Efficient queries filter by container type and project only the fields needed before joining to Resources. Broad joins across the entire tenant can become noisy, so scope them by management group, subscription, or tag when possible. During migrations or incidents, fast container queries help teams locate affected owners, environments, and resource groups quickly, which shortens diagnostic cycles even though runtime systems are unchanged. Filtered joins keep reviews responsive.

Operations

Operators use ResourceContainers for estate inventory, subscription reviews, resource-group hygiene, tag inheritance checks, and governance reporting. Common queries list all subscriptions under a management group, find resource groups without owners, join resource groups to Resources, and compare resource-group tags with resource tags. The output helps update CMDB records, pipeline parameters, cost allocation, and policy assignments. Operators should keep saved queries for subscription vending, migration readiness, and cleanup reviews. They should also understand that the table shows container metadata; deeper service configuration still comes from Resources, service APIs, diagnostic logs, and deployment history. Automate these checks during monthly governance and onboarding cycles.

Common mistakes

  • Treating ResourceContainers as a live service-configuration table, then wondering why VM, database, or network properties are missing.
  • Joining to Resources without filtering container type, which can duplicate rows or mix subscription and resource-group context confusingly.
  • Assuming missing results mean containers do not exist, when the real issue is insufficient RBAC scope across subscriptions.