Management and Governance Resource Graph verified

ResourceChanges table

The ResourceChanges table is an Azure Resource Graph table for asking, “What changed on my Azure resources?” It helps you investigate control-plane changes such as updates to resource properties, configuration, location metadata, tags, and other tracked resource details. Instead of opening one resource at a time, you can query change records across subscriptions you can access. It is especially useful after an outage, failed deployment, unexpected cost increase, security finding, or drift review where the first question is not what exists now, but what changed recently.

Aliases
resourcechanges, Resource Graph changes, Azure resource changes table, resource change history
Difficulty
fundamentals
CLI mappings
4
Last verified
2026-05-22

Microsoft Learn

Microsoft Learn describes Resource Graph change queries that use the resourcechanges table to inspect Azure Resource Manager change records. Practitioners can filter, sort, and project change properties to understand what changed, when it changed, and which resource was affected across accessible subscriptions.

Microsoft Learn: Get resource changes2026-05-22

Technical context

In Azure architecture, the ResourceChanges table sits in the Azure Resource Graph control-plane inventory layer. It is not an application log table and it is not the same as live resource state in the Resources table. Queries use Resource Graph KQL to filter change records by resource ID, subscription, change time, operation type, property path, or target resource type. Operators commonly join or compare change data with Resources, ResourceContainers, Activity Log, policy states, and deployment history to rebuild the timeline behind an incident or governance drift finding.

Why it matters

ResourceChanges table matters because cloud incidents often start with a configuration change that nobody immediately remembers. A firewall rule was removed, a tag changed, a SKU shifted, public network access was enabled, or a deployment altered dependencies. Live resource inventory only shows the current state; change records help explain how the estate got there. That difference is critical for security investigations, outage reviews, compliance evidence, and rollback planning. ResourceChanges also helps reduce blame-driven troubleshooting by giving teams a queryable timeline. Good operators still verify details with Activity Log and deployment records, but this table gives them a fast starting point across many subscriptions.

Where you see it

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

Signal 01

In Resource Graph Explorer, queries against resourcechanges show change records with resource IDs, timestamps, property names, change types, and subscription context for investigation during triage.

Signal 02

In Azure CLI output from az graph query, JSON rows reveal which resource changed during a deployment, incident window, or compliance review for audit handoff.

Signal 03

In monitoring workbooks or post-incident reports, ResourceChanges queries appear beside Activity Log and deployment history to reconstruct configuration timelines during platform reviews and weekly operations meetings.

When this becomes relevant

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

  • Investigate an outage by querying changes made to networking, app settings, SKUs, or dependencies during the alert window.
  • Find accidental security drift after public access, firewall, diagnostic, or identity-related properties changed on sensitive resources.
  • Explain a cost spike by locating recent capacity, SKU, retention, redundancy, or region changes across affected subscriptions.
  • Support compliance evidence by exporting change timelines for regulated resources after quarterly control reviews.
  • Validate post-deployment safety by checking whether a release changed only the expected resources and properties.

Real-world case studies

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

Case study 01

Airport operations rebuilds a network change timeline

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

Scenario

An airport operations platform lost access to several gate-display services after a late-night maintenance release. Teams suspected a network rule change but could not identify the exact resource fast enough.

Business/Technical Objectives
  • Identify the configuration change that matched the outage window.
  • Avoid rolling back unrelated application releases during passenger operations.
  • Produce clear evidence for the network, security, and airport systems teams.
  • Reduce future triage time for similar control-plane incidents.
Solution Using ResourceChanges table

The platform group queried the ResourceChanges table through Azure CLI with a narrow window around the first alert. They filtered for network security groups, application gateway settings, and private endpoint resources in the affected subscription. The query showed that one NSG rule priority had changed on the subnet used by gate-display middleware. Operators then compared the change record with Activity Log to identify the deployment identity and reviewed the release template that produced the rule. The team updated the IaC module, restored the previous rule priority, and added a saved Resource Graph query to the airport incident runbook.

Results & Business Impact
  • Root cause was confirmed in 22 minutes instead of the previous two-hour network review cycle.
  • The application release stayed live, avoiding a rollback that would have interrupted boarding-display updates.
  • The corrected NSG rule restored middleware connectivity for 94 affected displays before the morning rush.
  • A saved change-query runbook reduced the next network incident investigation to under 15 minutes.
Key Takeaway for Glossary Readers

ResourceChanges gives operations teams a fast control-plane timeline when the current resource state alone cannot explain why production behavior changed.

Case study 02

Streaming service explains an unexpected cost jump

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

Scenario

A live sports streaming platform saw Azure spend climb sharply after a weekend tournament. The usage report showed higher cache and database charges, but owners disputed which team caused the increase.

Business/Technical Objectives
  • Find recent cost-impacting configuration changes across event subscriptions.
  • Separate intentional tournament scaling from accidental capacity drift.
  • Give finance and engineering a shared evidence trail.
  • Prevent the same settings from persisting after future events.
Solution Using ResourceChanges table

The FinOps engineer used Azure CLI to run Resource Graph queries against ResourceChanges for the tournament subscriptions. The query focused on SKU, capacity, redundancy, diagnostic retention, and region-related property changes made during the event window. Results showed that a cache tier was scaled up for replay traffic and a database read replica was created in a secondary region, but only the cache was scheduled for teardown. The team compared those changes with deployment records, then added post-event automation that checked ResourceChanges for capacity changes without matching rollback tickets.

Results & Business Impact
  • The disputed cost increase was traced to two specific changes within one hour of investigation.
  • Unneeded cache capacity was removed, cutting the next monthly run-rate by about $18,600.
  • Post-event cleanup checks caught three missed scale-down actions during the next tournament.
  • Finance stopped sending broad escalation emails because evidence now included resource IDs and timestamps.
Key Takeaway for Glossary Readers

ResourceChanges helps FinOps conversations move from opinion to evidence when configuration changes drive a visible bill increase.

Case study 03

Tax agency strengthens audit evidence for platform drift

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

Scenario

A government tax agency needed proof that regulated Azure resources were not quietly changed outside approved deployment windows. Auditors wanted more than a static inventory screenshot.

Business/Technical Objectives
  • Show recent changes to regulated storage, database, network, and identity resources.
  • Tie change evidence to approved windows without exposing unnecessary operational data.
  • Detect property drift that policy compliance snapshots might miss temporarily.
  • Give internal audit a repeatable quarterly review process.
Solution Using ResourceChanges table

The platform compliance team created Resource Graph queries for the ResourceChanges table and ran them with Azure CLI from a controlled workstation. The queries filtered by regulated subscription, resource group, resource type, and approved maintenance windows. Results were exported as JSON, then summarized in a workbook that grouped changes by resource type, property path, and timestamp. Activity Log supplied actor details where needed, while ResourceChanges showed which properties moved. The team also compared changes with current Resources table output so auditors could see whether an unauthorized change had already been reverted.

Results & Business Impact
  • Quarterly evidence collection dropped from eight business days to two.
  • Two unapproved diagnostic-retention changes were found and corrected before the external audit.
  • Audit findings decreased because reviewers could trace property changes instead of relying on static screenshots.
  • The same query pack was reused across four tax-season readiness reviews.
Key Takeaway for Glossary Readers

For regulated estates, ResourceChanges adds the missing timeline between approved architecture and the live configuration auditors see today.

Why use Azure CLI for this?

After ten years in Azure operations, I reach for Azure CLI with ResourceChanges because incidents need fast, repeatable questions. The portal can show change history in useful places, but CLI lets me run the same Resource Graph query across subscriptions, save the output, narrow the time window, and compare suspected resources quickly. During a review, I can export JSON evidence, hand it to an app team, and rerun the query after remediation. CLI is also safer than ad hoc portal clicking because the query is read-only and reviewable. It turns “someone changed something” into a timeline the team can test.

CLI use cases

  • Run az graph query against resourcechanges for a specific resource ID and time window after an incident begins.
  • Export recent changes by subscription to JSON or table format for service owners, auditors, or change-review meetings.
  • Filter change records by property path, resource type, or operation category to separate relevant drift from noisy updates.
  • Compare ResourceChanges results with Resources table output to confirm whether the current state still matches the change record.
  • Automate daily read-only drift reports that flag unexpected changes to public access, SKU, tags, and diagnostic settings.

Before you run CLI

  • Confirm you are in the correct tenant and subscription scope because Resource Graph only returns change records your identity can read.
  • Define the time window before querying; overly broad change searches can be noisy and may hide the critical event in unrelated updates.
  • Use read-only output formats first, and avoid turning a suspected change into a rollback until service-specific logs confirm impact.

What output tells you

  • The resource ID, subscription ID, and timestamp identify which resource changed and where it sits in the Azure estate.
  • Property paths, change categories, and before-after details indicate whether the change touched security, network, capacity, tags, or configuration.
  • Result counts by resource type or subscription show whether the event was a focused edit, a broad deployment, or widespread automation drift.

Mapped Azure CLI commands

Resource Graph CLI commands

direct
az graph query -q "resourcechanges | where changeAttributes.timestamp > ago(24h) | project targetResourceId, changeType, changeAttributes"
az graphdiscoverManagement and Governance
az graph query -q "resourcechanges | where targetResourceId =~ '<resource-id>' | order by tostring(changeAttributes.timestamp) desc"
az graphdiscoverManagement and Governance
az graph query -q "resourcechanges | where tostring(changeAttributes.timestamp) between ('2026-05-01' .. '2026-05-02') | summarize count() by tostring(changeType)"
az graphdiscoverManagement and Governance
az graph query -q "resourcechanges | where tostring(targetResourceType) contains 'network' | project targetResourceId, changeType, changes"
az graphdiscoverManagement and Governance

Architecture context

Architecturally, ResourceChanges is part of the governance and observability fabric around Azure Resource Manager. It helps platform teams correlate configuration drift with deployments, policy findings, alerts, and cost anomalies. I do not treat it as a replacement for Activity Log, diagnostic logs, or source-controlled IaC; I treat it as the estate-wide change lens. The best pattern is to keep IaC deployment history, policy compliance, Resource Graph inventory, and change queries together in operational workbooks or runbooks. Scope matters: users only see changes in subscriptions they can access, so investigation roles and management-group boundaries must be designed before a crisis. This context prevents blind blame.

Security

Security impact is direct for investigations but indirect for enforcement. The ResourceChanges table does not block an attacker or grant access, yet it helps detect and explain risky configuration changes. Security teams can query for changes to public network access, firewall rules, diagnostic settings, encryption-related properties, tags, identities, and critical resource settings. Access still depends on Azure RBAC and subscription scope, so overbroad Reader access can reveal sensitive operational metadata. Store exported results carefully because timelines may expose resource names, deployment patterns, and security posture. Use it alongside Activity Log, Defender for Cloud, policy, and incident tickets. Review privileged edits before closure.

Cost

ResourceChanges has no separate billing meter for the table itself, but it can reveal cost-impacting changes quickly. A SKU upgrade, capacity increase, region move, diagnostic retention change, backup setting, or forgotten test deployment may show up as a resource change before the bill becomes obvious. FinOps teams can query recent changes around a cost spike and hand evidence to owners instead of relying on guesswork. The indirect savings come from shorter investigations, fewer false escalations, and quicker rollback of accidental changes. Exported evidence may also reduce audit labor when cost controls require proof of who changed capacity and when. Finance teams can verify each driver.

Reliability

Reliability value comes from faster root-cause analysis and safer recovery. ResourceChanges does not make resources fail over or retry by itself, but it shows whether a configuration change happened before symptoms began. That can prevent teams from rebuilding healthy services while missing the real trigger. Query changes to load balancers, VNets, app settings, availability settings, SKUs, database parameters, and tags used by automation. Use timestamps to line up changes with alerts, deployment runs, and dependency failures. Because Resource Graph data is a control-plane view, validate suspected changes against service-specific logs before applying rollback in production. That prevents late, risky rollback guesses.

Performance

Runtime performance is not directly changed by querying the ResourceChanges table, but operational performance improves. Engineers can narrow a troubleshooting window in minutes instead of manually comparing resource JSON, portal screenshots, and deployment logs. Query design still matters: filter by subscription, time window, resource type, and resource ID before projecting large result sets. Broad queries across many subscriptions can be slower and harder to interpret. For application performance incidents, use ResourceChanges to identify control-plane triggers such as SKU changes, routing updates, networking changes, or autoscale edits, then confirm runtime symptoms in metrics and logs. Focused windows reduce wasted query time.

Operations

Operators use the ResourceChanges table during incidents, drift reviews, post-deployment checks, and audit requests. They inspect the changed resource ID, subscription, timestamp, property paths, change type, and before-after values where available. Common jobs include filtering changes during an outage window, searching for changes to one resource type, exporting recent changes for a service owner, and comparing change volume by subscription. Good runbooks include saved Resource Graph queries with parameters for time window and resource ID. Operators should also document when a change was intentional, because raw change records do not always explain business approval. Tie findings back to owners quickly.

Common mistakes

  • Assuming ResourceChanges alone proves who made the change, when Activity Log or deployment history is still needed for actor context.
  • Querying across too wide a time window and treating noisy routine updates as the root cause of an outage.
  • Forgetting RBAC scope, then concluding no change happened because the investigator could not see all affected subscriptions.