Operations & Troubleshooting参照資料確認: 2026-09-11

Azure Resource Graph: Network Inventory

Azure Resource Graphを使ってMicrosoft.Network配下のresource、NIC/VNet/Subnet関連、孤立NSG、Public IP等をsubscription横断でinventoryする実務KQL。

Scope: Microsoft Learnの一次資料を2026-09-11時点で確認したPlatform Referenceです。quota、role、API version、retirement、service healthは更新されるため、production change直前にOfficial sourcesを再確認してください。

Azure Resource Graph: Network Inventoryを理解するための前提

Azure Resource GraphはAzure Resource Manager resource type/propertyを横断queryするためのinventory planeで、network topology/incident scope確認に有効。 Microsoft LearnにはNICのipConfigurationsからVNet/Subnetを抽出するnetworking sample queryが公開されている。

subscription横断でtype/countを可視化すると、manual spreadsheetよりdrift・orphan・resource sprawlを検出しやすい。 Resource Graphのinventory結果はpacket forwardingそのものを証明しない。effective routes/NSG、Network Watcher、logsと組み合わせる。

query結果をevidenceとして保存する場合はquery text・subscription scope・実行時刻もセットで記録する。

通信や判断の流れを追う
症状を再現設定を確認能動試験ログ / packetアプリ確認

Control plane と Data plane

Control planeARM、Azure RBAC、Resource Graph、Activity Log、provider metadata、Service Health等からresourceの存在・権限・変更・platform状態を確認する。
Data plane実際のpacket/request成功は、effective route/security、DNS、health probe、flow/resource logs、synthetic test等で別途証明する。control-plane Succeededだけで通信成功としない。

仕組みと設計上の意味

Resource Graphは「Azureに何があるか」を高速に尋ねるcontrol-plane inventoryです。個々のresource bladeを巡回する代わりに、resource type・location・tags・propertiesをKQLで横断できます。ネットワークでは、NICからsubnet/VNetへの関連、孤立NSG、Public IPの割り当て、VNet/peering数などを定型query化しておくと、incident初動と定期監査の両方に使えます。

ただし、Resource Graphの線やpropertiesだけでdata plane successを断定してはいけません。UDRがassociationされていることと、そのflowで選ばれたeffective routeは別です。NSG resourceが存在することと、その5-tupleがallowされることも別です。

証拠契約Query text / tenant / subscriptions / timestamp / result row countを一緒に保存します。後でqueryを改版しても、当時の判断を再現できます。

Operational / decision path

対象scopeと時刻を固定し、read-only evidence → 判断 → change → same testで再検証の順を崩さない。

  1. incidentまたはreview対象のsubscription setを固定する。
  2. まずMicrosoft.Network resource typeのcountを取り、estate sizeと想定外typeを把握する。
  3. 対象flowに関係するNIC/VNet/Subnet/NSG/route table/private endpoint等をqueryで絞る。
  4. resource IDをキーとしてPortal/CLIのeffective stateへdrill downする。
  5. queryと結果をsnapshot保存し、change後に同じqueryでdiffを取る。

設計判断

判断点推奨理由
Query library目的別にsmall queryをversion control巨大な万能queryより検証・再利用しやすい
Scopesubscription listを明示見えていないsubscriptionを「resourceなし」と誤認しない
Join keynameではなくresource IDを優先同名resource/別RG/別subscriptionを混同しない
Runtime proofARGの後にeffective state/testへ進むinventoryとpacket behaviorを分離

確認手順

Azure Portal

  • Azure portal → Resource Graph Explorerでqueryを実行し、scopeを確認。
  • 結果のresource IDから対象resource bladeへdrill down。
  • Chartsはoverview用途、incident evidenceはtable/CSVとquery textを保存。

Evidence contract

Identitytenant / subscription / resource ID / region / principalを可能な限り固定。
TimeUTC time rangeと実行時刻を記録し、変更・障害timelineと結ぶ。
Scopesubscription/region/resource typeなど、その値が意味を持つscopeを必ず残す。
Runtimecontrol-plane evidenceと実通信/data-plane evidenceを分けて保存。

Read-only first: 以下のCLI/PowerShellは原則として参照系から開始します。コメントでMUTATINGと示した操作は、必要性・scope・rollbackを確認した後にのみ実行します。

Azure CLI
# network resource count by type
az graph query -q "Resources | where type startswith 'microsoft.network/' | summarize count() by type | order by count_ desc" -o table

# NIC -> VNet/Subnet (Microsoft Learn sample pattern)
az graph query -q "Resources | where type =~ 'microsoft.network/networkinterfaces' | project id, ipConfigurations = properties.ipConfigurations | mvexpand ipConfigurations | project id, subnetId = tostring(ipConfigurations.properties.subnet.id) | parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet | project id, virtualNetwork, subnet" -o table

# orphan NSG candidates
az graph query -q "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup, subscriptionId, id | sort by name asc" -o table
PowerShell
Search-AzGraph -Query "Resources | where type startswith 'microsoft.network/' | summarize count() by type | order by count_ desc"

Search-AzGraph -Query "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup, subscriptionId, id | sort by name asc"

障害切り分け

症状疑う点証拠次の確認
query結果が0件scope/permission/type文字列subscription context + queryReader以上のread scopeとtype caseを確認
PortalにはあるがARGに見えないindex反映/tenant-subscription scoperesource ID direct GETARGだけで削除済みと断定しない
associationは見えるが通信不可inventoryをruntime proofと誤認effective route/NSG/connection testdata plane evidenceへ降りる
queryが壊れたproperty shape/API evolutionsample query + raw propertiestostring/isnull等でdefensive queryにする

変更・rollback

  • Resource Graph query自体はread-onlyだが、結果を基にbulk delete/updateへ直結させない。candidate→review→changeの段階を分ける。
  • before/after queryは同じscope・query textで実行し、drift比較を可能にする。
  • orphan判定はassociation propertyだけでなく、IaC・Policy・future deployment dependencyを確認してから削除する。
  • rollbackに必要なresource definitionをIaC/exportで確保してからcleanupを実施する。

変更前後で保存する証拠

Before対象resource IDs、関連設定、current state、query/command出力。
Changeactor、ticket/deployment ID、correlation ID、開始/終了時刻。
Aftersame command/queryとsame test vectorで差分確認。
Rollback戻す条件、戻す対象、rollback後に再実行する観測。

Official sources