Azure Resource Graph のクエリ言語では、さまざまな演算子と関数がサポートされています。 それぞれは、Kusto Query Language (KQL) に基づいて動作します。 Resource Graph で使用されるクエリ言語の詳細については、KQL のチュートリアルを参照してください。
この記事では、Resource Graph でサポートされる言語コンポーネントについて説明します。
Resource Graph テーブル
Resource Graph には、Azure Resource Manager のリソースの種類とそのプロパティに関するデータ用のテーブルがいくつか用意されています。
join 演算子で Resource Graph テーブルを使用すると、関連するリソースの種類からプロパティを取得できます。
Resource Graph テーブルでは、次の join フレーバーがサポートされています。
| Resource Graph テーブル | 他のテーブルに join 可能か |
Description |
|---|---|---|
| AdvisorResources | Yes |
Microsoft.Advisorリソースが含まれています。 |
| AlertsManagementResources | Yes |
Microsoft.AlertsManagementリソースが含まれています。 |
| AppServiceResources | Yes |
Microsoft.Webリソースが含まれています。 |
| AuthorizationResources | Yes |
Microsoft.Authorizationリソースが含まれています。 |
| AWSResources | Yes |
Microsoft.AwsConnectorリソースが含まれています。 |
| AzureBusinessContinuityResources | Yes |
Microsoft.AzureBusinessContinuityリソースが含まれています。 |
| ChaosResources | Yes |
Microsoft.Chaosリソースが含まれています。 |
| CommunityGalleryResources | Yes |
Microsoft.Computeリソースが含まれています。 |
| ComputeResources | Yes |
Microsoft.Compute Virtual Machine Scale Sets に関連するリソースが含まれています。 |
| DesktopVirtualizationResources | Yes |
Microsoft.DesktopVirtualizationリソースが含まれています。 |
| DnsResources | Yes |
Microsoft.Networkリソースが含まれています。 |
| EdgeOrderResources | Yes |
Microsoft.EdgeOrderリソースが含まれています。 |
| ElasticsanResources | Yes |
Microsoft.ElasticSanリソースが含まれています。 |
| ExtendedLocationResources | Yes |
Microsoft.ExtendedLocationリソースが含まれています。 |
| FeatureResources | Yes |
Microsoft.Featuresリソースが含まれています。 |
| GuestConfigurationResources | Yes |
Microsoft.GuestConfigurationリソースが含まれています。 |
| HealthResourceChanges | Yes |
Microsoft.Resourcesリソースが含まれています。 |
| HealthResources | Yes |
Microsoft.ResourceHealthリソースが含まれています。 |
| InsightsResources | Yes |
Microsoft.Insightsリソースが含まれています。 |
| IoTSecurityResources | Yes |
およびMicrosoft.IoTSecurityMicrosoft.IoTFirmwareDefenseリソースを含みます。 |
| KubernetesConfigurationResources | Yes |
Microsoft.KubernetesConfigurationリソースが含まれています。 |
| KustoResources | Yes |
Microsoft.Kustoリソースが含まれています。 |
| MaintenanceResources | Yes |
Microsoft.Maintenanceリソースが含まれています。 |
| ManagedServicesResources | Yes |
Microsoft.ManagedServicesリソースが含まれています。 |
| MigrateResources | Yes |
Microsoft.OffAzureリソースが含まれています。 |
| NetworkResources | Yes |
Microsoft.Networkリソースが含まれています。 |
| PatchAssessmentResources | Yes | Azure 仮想マシンのパッチ評価Microsoft.HybridComputeリソースが含まれています。 |
| PatchInstallationResources | Yes | Azure 仮想マシンのパッチインストールおよび Microsoft.ComputeMicrosoft.HybridComputeリソースが含まれています。 |
| PolicyResources | Yes |
Microsoft.PolicyInsightsリソースが含まれています。 |
| RecoveryServicesResources | Yes |
およびMicrosoft.DataProtectionMicrosoft.RecoveryServicesリソースを含みます。 |
| ResourceChanges | Yes |
Microsoft.Resourcesリソースが含まれています。 |
| ResourceContainerChanges | Yes |
Microsoft.Resourcesリソースが含まれています。 |
| ResourceContainers | Yes | 管理グループ (Microsoft.Management/managementGroups)、サブスクリプション (Microsoft.Resources/subscriptions)、およびリソース グループ (Microsoft.Resources/subscriptions/resourcegroups) のリソースの種類とデータが含まれています。 |
| Resources | Yes | クエリでテーブルが定義されていない場合の既定のテーブル。 Resource Manager のリソースの種類とプロパティのほとんどはここにあります。 |
| SecurityResources | Yes |
Microsoft.Securityリソースが含まれています。 |
| ServiceFabricResources | Yes |
Microsoft.ServiceFabricリソースが含まれています。 |
| ServiceHealthResources | Yes |
Microsoft.ResourceHealth/eventsリソースが含まれています。 |
| SpotResources | Yes |
Microsoft.Computeリソースが含まれています。 |
| SupportResources | Yes |
Microsoft.Supportリソースが含まれています。 |
| TagsResources | Yes |
Microsoft.Resources/tagnamespacesリソースが含まれています。 |
リソースの種類を含むテーブルの一覧については、「Azure Resource Graph のテーブルとリソースの種類のリファレンス」を参照してください。
Note
Resources は既定のテーブルです。
Resources テーブルに対してクエリを実行する場合、join または union を使用しない限り、テーブル名を指定する必要はありません。 ただし、最初のテーブルを常にクエリに含めることをお勧めします。
各テーブルで使用できるリソースの種類を検出するには、ポータルで Resource Graph Explorer を使用します。 別の方法として、<tableName> | distinct type などのクエリを使用して、指定した Resource Graph テーブルでサポートされている、環境内に存在するリソースの種類の一覧を取得することもできます。
次のクエリは、単純な join を示しています。 クエリ結果は列をブレンドし、結合テーブル(この例では ResourceContainers )からの重複する列名には 1が付加されます。
ResourceContainersテーブルにはサブスクリプションとリソースグループの両方の型があるため、どちらかのタイプを使ってResourcesテーブルからリソースに結合することができます。
Resources
| join ResourceContainers on subscriptionId
| limit 1
次のクエリは、join のより複雑な使用方法を示しています。 まず、このクエリは project を使用して、Azure Key Vault コンテナーのリソースの種類の Resources からフィールドを取得します。 次のステップでは、joinを使って結果をResourceContainersとマージします。ここで、型は最初のテーブルのと結合テーブルのprojectの両方にあるプロパティprojectサブスクリプションです。 フィールドリネームは、プロパティがすでにjoinから射影されているため、name1として追加するResourcesを避けています。 クエリの結果として、キー コンテナーが 1 つ返され、その種類と名前、場所、キー コンテナーのリソース グループ、およびそれが存在するサブスクリプションの名前が表示されます。
Resources
| where type == 'microsoft.keyvault/vaults'
| project name, type, location, subscriptionId, resourceGroup
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project type, name, location, resourceGroup, SubName
| limit 1
Note
join結果をprojectで制限する場合、joinが2つのテーブルを関連付けるために用いるプロパティ(上記の例のsubscriptionId)をprojectに含めなければなりません。
拡張プロパティ
プレビュー機能として、Resource Graphの一部のリソースタイプには、Azure Resource Managerが提供するプロパティ以外にも、より多様なタイプ関連プロパティがクエリ可能です。 この値の集合は 拡張プロパティとして知られ、 properties.extendedのサポートリソース型に存在します。
拡張プロパティを持つリソースタイプを表示するには、以下のクエリを使用します。
Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc
例:instanceView.powerState.code によって、仮想マシンの数を取得します。
Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
Resource Graph のカスタム言語要素
共有クエリ構文 (プレビュー)
プレビュー機能として、 共有クエリ はリソースグラフクエリで直接アクセスできます。 このシナリオにより、標準クエリを共有クエリとして作成し、再利用することができます。 Resource Graph クエリ内で共有クエリを呼び出すには、{{shared-query-uri}} 構文を使用します。 共有クエリのURIは、そのクエリの設定ページにある共有クエリのリソースIDです。 この例では、共有クエリ URI は /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS です。
この URI は、サブスクリプション、リソース グループ、および別のクエリで参照する共有クエリの完全な名前を指します。 このクエリは、チュートリアル:クエリの作成と共有で作成したものと同じです。
Note
共有クエリを参照するクエリを共有クエリとして保存することはできません。
例 1: 共有クエリのみを使用する:
この Resource Graph クエリの結果は、共有クエリに格納されているクエリと同じです。
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
例 2: より大きいクエリの一部として共有クエリを含める:
このクエリでは、最初に共有クエリを使用し、次に limit を使用して結果をさらに制限します。
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'
サポートされる KQL 言語要素
リソースグラフはKQL のデータ型の一部、 スカラー関数、ス カラー演算子、 集計関数をサポートしています。 Resource Graphは特定の 表形式演算子 をサポートしており、その中には異なる挙動を持つものもあります。
サポートされているテーブル演算子/上位レベルの演算子
次に示すのは、Resource Graph でサポートされる KQL のテーブル演算子の一覧と具体的なサンプルです。
| KQL | Resource Graph のサンプル クエリ | Notes |
|---|---|---|
| count | カウント キー コンテナー | |
| distinct | ストレージを含むリソースの表示 | |
| extend | 仮想マシンの数 (OS の種類別) | |
| join | サブスクリプション名を含むキー コンテナー | サポートされているフレーバーには、 innerunique、 inner、 leftouter、 fullouterが揃っています。 1 つのクエリで 3 つの join 操作または union 操作 (または 2 つの操作の組み合わせ) を一緒にカウントする制限。そのうちの 1 つはテーブル間結合である可能性があります。 すべてのクロステーブルjoin利用がResourceコンテナとResourceContainer間であれば、3つのクロステーブルのjoinが許可されます。 ブロードキャスト結合などのカスタム結合方法は使用できません。
join を使用できるテーブルについては、「Resource Graph テーブル」を参照してください。 |
| limit | パブリック IP アドレスの一覧表示 |
take のシノニム。 ス キップには効きません。 |
| mvexpand | レガシ演算子では、代わりに mv-expand を使用します。
RowLimit の上限は2,000。 既定値は 128 です。 |
|
| mv-expand | 特定の書き込み場所を含む Azure Cosmos DB を一覧表示する |
RowLimit の上限は2,000。 既定値は 128 です。 1 つのクエリでは mv-expand が 3 つに制限されます。 |
| order | 名前で並べ替えられたリソースの一覧表示 |
sort のシノニム |
| parse | ネットワーク インターフェイスの仮想ネットワークとサブネットを取得する | プロパティがある場合は、parse を使用する代わりに、プロパティに直接アクセスするのが最適です。 |
| project | 名前で並べ替えられたリソースの一覧表示 | |
| project-away | 結果から列を除外する | |
| sort | 名前で並べ替えられたリソースの一覧表示 |
order のシノニム |
| summarize | Azure リソースの数 | 簡略化された最初のページのみ |
| take | パブリック IP アドレスの一覧表示 |
limit のシノニム。 ス キップには効きません。 |
| top | 名前とその OS の種類による最初の 5 つの仮想マシンの表示 | |
| union | 2 つのクエリの結果を結合して 1 つの結果にする | 使用できる単一テーブル: | union [kind= inner|outer] [withsource=ColumnName] Table。 1 つのクエリに含めることができる union レッグの数は 3 つに制限されます。
union 分岐テーブルのあいまい解決は許可されていません。 単一のテーブル内や Resources テーブルと ResourceContainers テーブル間で使用されることもあります。 |
| where | ストレージを含むリソースの表示 |
1 つの Resource Graph SDK クエリには、3 つの join と 3 つの mv-expand 演算子という既定の制限があります。 テナントに対するこれらの制限の引き上げを要求するには、ヘルプとサポートを使用します。
Open Queryポータルの体験をサポートするために、Azure Resource Graph ExplorerはResource Graph SDKよりも高いグローバル制限を持っています。
Note
テーブルを右テーブルとして複数回参照することはできません。これは上限の 1 を超えています。 これを行うと、コード DisallowedMaxNumberOfRemoteTables でエラーが発生します。
検索範囲
クエリによってリソースが返されるサブスクリプションや 管理グループ の範囲は、認可ユーザーのコンテキストに基づくサブスクリプションのリストにデフォルト設定されます。 管理グループやサブスクリプションリストが定義されていない場合、クエリスコープはすべてリソースで、 Azure Lighthouse の委任リソースも含みます。
クエリ対象のサブスクリプションまたは管理グループの一覧は、結果のスコープを変更するために、手動で定義できます。 たとえば、REST API の managementGroups プロパティは、管理グループ ID を受け取ります。これは、管理グループの名前とは異なります。
managementGroups を指定すると、指定した管理グループ階層内、またはその下にある最初の 10,000 件のサブスクリプションのリソースが含まれます。
managementGroups を subscriptions と同時に使用することはできません。
例: ID が My Management Group の myMG という管理グループの階層内のすべてのリソースのクエリを実行します。
REST API URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01要求本文
{ "query": "Resources | summarize count()", "managementGroups": ["myMG"] }
AuthorizationScopeFilter パラメーターを使用すると、上位スコープから継承された AuthorizationResources テーブル内の Azure Policy の割り当てと Azure ロールベースのアクセス制御 (Azure RBAC) のロールの割り当てを一覧表示できます。
AuthorizationScopeFilter パラメーターには、PolicyResources テーブルと AuthorizationResources テーブルに対して次の値を使用できます。
- AtScopeAndBelow (指定しない場合のデフォルト): 与えられたスコープおよびすべての子スコープの割り当てを返します。
- AtScopeAndAbove:与えられたスコープとすべての親スコープの割り当てを返しますが、子スコープは返しません。
- AtScopeAboveAndBelow: 与えられたスコープ、すべての親スコープ、すべての子スコープの割り当てを返します。
- AtScopeExact:与えられた範囲の割り当てのみを返します。親子のスコープは含まれていません。
Note
AuthorizationScopeFilterパラメータを使用するには、リクエスト時に2021-06-01-preview以降のAPIバージョンを必ず使用してください。
例: myMG 管理グループとテナントルート(親)スコープですべてのポリシー割り当てを取得します。
REST API URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview要求本文の例
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "managementGroups": ["myMG"] }
例: mySubscriptionId サブスクリプション、管理グループ、テナントルートスコープですべてのポリシー割り当てを取得します。
REST API URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview要求本文の例
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "subscriptions": ["mySubscriptionId"] }
エスケープ文字
. や $ を含むものなど、一部のプロパティ名はクエリ内でラップまたはエスケープする必要があります。そうしないと、プロパティ名が正しく解釈されず、期待する結果が得られません。
ドット (
.): 角かっこを使用してプロパティ名['propertyname.withaperiod']をラップします。odata.typeプロパティをラップする例のクエリ:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']ドル記号 (
$): プロパティ名の文字をエスケープします。 使うエスケープ文字は、Resource Graph を実行するシェルによって異なります。バッシュ:脱出キャラクターとしてバックスラッシュ(
\)を使う。Bashのプロパティ $type を脱出する例のクエリ:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$typecmd: ドル記号(
$)のキャラクターから逃げないでください。PowerShell:エスケープキャラクターとしてバックティック(
`)を使います。PowerShellのプロパティ $type から脱出する例のクエリ:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
Azure Resource Graphの RBAC アクセス許可評価関数
Azure Resource Graph (ARG) には、現在のクエリ ID に個々のリソースに対する特定のアクセス許可があるかどうかを評価できる 2 つの関数が用意されています。
hasPermission()hasDataPermission()
これらの関数は、リソースごとにブール値 (1 または 0) を返し、アクセスに基づくリソースのフィルター処理や集計などのシナリオを可能にします。
Note
これらの関数は、 リソース インスタンスと有効な RBAC 割り当てのコンテキストで評価されます。 ロール定義に対して直接は動作 しません 。
hasPermission()
hasPermission()関数は、クエリ ID にリソースに対する特定のコントロール プレーンアクセス許可があるかどうかを評価します。
hasPermission()には、次の形式を使用します。
hasPermission('<permission-string>')
hasPermission()関数は、クエリ ID に対して有効な RBAC 割り当てを使用し、リソース行ごとに評価します。 この関数は 、ID がリソースに対して指定されたアクセス許可を持ち、ID が指定されていない場合は 0 を返します。
例 Azure コンテナー レジストリへの書き込みアクセスの確認
resources
| where type =~ 'Microsoft.ContainerRegistry/registries'
| extend canPush = hasPermission('Microsoft.ContainerRegistry/registries/push/write')
この例では、各コンテナー レジストリ リソースが個別に評価され、 canPush は、クエリ ID がそのリソースに対して指定された書き込みアクションを実行できるかどうかを示します。 結果は、返された値に基づくフィルター処理、集計、集計に使用できます。
hasDataPermission()
hasDataPermission()は、クエリ ID にリソースに対する特定のデータ プレーンアクセス許可があるかどうかを評価します。
hasDataPermission()には、次の形式を使用します。
hasDataPermission('<permission-string>')
hasDataPermission()関数は、クエリ ID に対して有効なデータ プレーン アクセス評価を使用し、リソース行ごとに評価されます。 この関数は、ID がリソースに対して指定されたデータ プレーンアクセス許可を持っている場合は 1 を返し、そうでない場合は 0 を返します。
例: Azure Blob Storageへのデータ プレーン読み取りアクセスを確認する
resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| extend canReadBlobs = hasDataPermission('Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read')
この例では、各ストレージ リソースが個別に評価されます。
hasDataPermissions()関数は、クエリ ID に指定された data-plne アクセス許可があるかどうかを確認します。 返される値は、フィルター処理、集計、またはレポートに使用できます。
例: フィルター処理を使用してAzure Blob Storageへのデータ プレーン読み取りアクセスを確認する
resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| where hasDataPermission('Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read') == 1
この例では、クエリ ID に BLOB 読み取りアクセス権があるストレージ アカウントのみを返します。
重要な制限事項
これらの関数は、多くの場合、ロールまたはアクセス許可の検出シナリオと混同されます。 理解するには、次の制限事項が重要です。
-
hasPermission()およびhasDataPermission()関数は、ロール定義が付与するアクセス許可を決定しません。 - microsoft.authorization/roledefinitions リソースのクエリやフィルター処理には使用できません。
- これらは、次のような質問に回答するためのものではありません。
- "このアクセス許可を付与するロールはどれですか?
- "このロール定義に含まれるアクションは何ですか?
次のステップ
- Azure Resource Graphクエリ言語 Starter クエリと Advanced queries。
- Azure リソースを探索する方法の詳細。