Grundlegendes zur Azure Resource Graph-Abfragesprache
Die Abfragesprache für Azure Resource Graph unterstützt viele Operatoren und Funktionen. Diese arbeiten und funktionieren auf Grundlage der Abfragesprache Kusto (Kusto Query Language, KQL). Wenn Sie mehr über die von Resource Graph verwendete Abfragesprache erfahren möchten, beginnen Sie mit dem Tutorial für KQL.
In diesem Artikel werden die von Resource Graph unterstützten Sprachkomponenten behandelt:
- Grundlegendes zur Azure Resource Graph-Abfragesprache
Resource Graph-Tabellen
Resource Graph umfasst mehrere Tabellen für die Daten, die in Bezug auf Azure Resource Manager-Ressourcentypen und deren Eigenschaften gespeichert werden. Resource Graph-Tabellen können mit dem join
-Operator verwendet werden, um Eigenschaften aus verwandten Ressourcentypen abzurufen.
Resource Graph-Tabellen unterstützen die join
-Varianten:
Resource Graph-Tabelle | Ist ein join für andere Tabellen möglich? |
Beschreibung |
---|---|---|
AdvisorResources | Ja | Umfasst Ressourcen, die mit Microsoft.Advisor in Zusammenhang stehen. |
AlertsManagementResources | Ja | Umfasst Ressourcen, die mit Microsoft.AlertsManagement in Zusammenhang stehen. |
AppServiceResources | Ja | Umfasst Ressourcen, die mit Microsoft.Web in Zusammenhang stehen. |
AuthorizationResources | Ja | Umfasst Ressourcen, die mit Microsoft.Authorization in Zusammenhang stehen. |
AWSResources | Ja | Umfasst Ressourcen, die mit Microsoft.AwsConnector in Zusammenhang stehen. |
AzureBusinessContinuityResources | Ja | Umfasst Ressourcen, die mit Microsoft.AzureBusinessContinuity in Zusammenhang stehen. |
ChaosResources | Ja | Umfasst Ressourcen, die mit Microsoft.Chaos in Zusammenhang stehen. |
CommunityGalleryResources | Ja | Umfasst Ressourcen, die mit Microsoft.Compute in Zusammenhang stehen. |
ComputeResources | Ja | Enthält Ressourcen im Zusammenhang mit Microsoft.Compute -VM-Skalierungsgruppen. |
DesktopVirtualizationResources | Ja | Umfasst Ressourcen, die mit Microsoft.DesktopVirtualization in Zusammenhang stehen. |
DnsResources | Ja | Umfasst Ressourcen, die mit Microsoft.Network in Zusammenhang stehen. |
EdgeOrderResources | Ja | Umfasst Ressourcen, die mit Microsoft.EdgeOrder in Zusammenhang stehen. |
ElasticsanResources | Ja | Umfasst Ressourcen, die mit Microsoft.ElasticSan in Zusammenhang stehen. |
ExtendedLocationResources | Ja | Umfasst Ressourcen, die mit Microsoft.ExtendedLocation in Zusammenhang stehen. |
FeatureResources | Ja | Umfasst Ressourcen, die mit Microsoft.Features in Zusammenhang stehen. |
GuestConfigurationResources | Ja | Umfasst Ressourcen, die mit Microsoft.GuestConfiguration in Zusammenhang stehen. |
HealthResourceChanges | Ja | Umfasst Ressourcen, die mit Microsoft.Resources in Zusammenhang stehen. |
HealthResources | Ja | Umfasst Ressourcen, die mit Microsoft.ResourceHealth in Zusammenhang stehen. |
InsightsResources | Ja | Umfasst Ressourcen, die mit Microsoft.Insights in Zusammenhang stehen. |
IoTSecurityResources | Ja | Umfasst Ressourcen im Zusammenhang mitMicrosoft.IoTSecurity und Microsoft.IoTFirmwareDefense . |
KubernetesConfigurationResources | Ja | Umfasst Ressourcen, die mit Microsoft.KubernetesConfiguration in Zusammenhang stehen. |
KustoResources | Ja | Umfasst Ressourcen, die mit Microsoft.Kusto in Zusammenhang stehen. |
MaintenanceResources | Ja | Umfasst Ressourcen, die mit Microsoft.Maintenance in Zusammenhang stehen. |
ManagedServicesResources | Ja | Umfasst Ressourcen, die mit Microsoft.ManagedServices in Zusammenhang stehen. |
MigrateResources | Ja | Umfasst Ressourcen, die mit Microsoft.OffAzure in Zusammenhang stehen. |
NetworkResources | Ja | Umfasst Ressourcen, die mit Microsoft.Network in Zusammenhang stehen. |
OrbitalResources | Ja | Umfasst Ressourcen, die mit Microsoft.Orbital in Zusammenhang stehen. |
PatchAssessmentResources | Ja | Umfasst Ressourcen im Zusammenhang mit den Azure Virtual Machines-Patchbewertungen Microsoft.Compute und Microsoft.HybridCompute . |
PatchInstallationResources | Ja | Umfasst Ressourcen im Zusammenhang mit den Azure Virtual Machines-Patchinstallationen Microsoft.Compute und Microsoft.HybridCompute . |
PolicyResources | Ja | Umfasst Ressourcen, die mit Microsoft.PolicyInsights in Zusammenhang stehen. |
RecoveryServicesResources | Ja | Umfasst Ressourcen im Zusammenhang mitMicrosoft.DataProtection und Microsoft.RecoveryServices . |
ResourceChanges | Ja | Umfasst Ressourcen, die mit Microsoft.Resources in Zusammenhang stehen. |
ResourceContainerChanges | Ja | Umfasst Ressourcen, die mit Microsoft.Resources in Zusammenhang stehen. |
ResourceContainers | Ja | Umfasst die Ressourcentypen und Daten der Verwaltungsgruppe (Microsoft.Management/managementGroups ), des Abonnements (Microsoft.Resources/subscriptions ) und der Ressourcengruppe (Microsoft.Resources/subscriptions/resourcegroups ). |
Ressourcen | Ja | Die Standardtabelle, wenn keine Tabelle in der Abfrage definiert ist. Die meisten Resource Manager-Ressourcentypen und -Eigenschaften sind hier enthalten. |
SecurityResources | Ja | Umfasst Ressourcen, die mit Microsoft.Security in Zusammenhang stehen. |
ServiceFabricResources | Ja | Umfasst Ressourcen, die mit Microsoft.ServiceFabric in Zusammenhang stehen. |
ServiceHealthResources | Ja | Umfasst Ressourcen, die mit Microsoft.ResourceHealth/events in Zusammenhang stehen. |
SpotResources | Ja | Umfasst Ressourcen, die mit Microsoft.Compute in Zusammenhang stehen. |
SupportResources | Ja | Umfasst Ressourcen, die mit Microsoft.Support in Zusammenhang stehen. |
TagsResources | Ja | Umfasst Ressourcen, die mit Microsoft.Resources/tagnamespaces in Zusammenhang stehen. |
Eine Liste der Tabellen, die Ressourcentypen enthalten, finden Sie unter Referenz zu Azure Resource Graph-Tabellen und Ressourcentypen.
Hinweis
Resources
ist die Standardtabelle. Beim Abfragen der Tabelle Resources
muss der Tabellenname nur angegeben werden, wenn nicht join
oder union
verwendet werden. Es wird jedoch empfohlen, immer die ursprüngliche Tabelle in die Abfrage einzubeziehen.
Verwenden Sie den Resource Graph-Explorer im Portal, um zu ermitteln, welche Ressourcentypen in den einzelnen Tabellen verfügbar sind. Sie können auch eine Abfrage verwenden (z.B. <tableName> | distinct type
), um eine Liste von Ressourcentypen zu erhalten, die von der angegebenen Resource Graph-Tabelle unterstützt werden und in Ihrer Umgebung vorhanden sind.
Die folgende Abfrage zeigt eine einfache Verwendung von join
. Im Abfrageergebnis sind die Spalten kombiniert, und an alle doppelten Spaltennamen aus der verknüpften Tabelle (ResourceContainers in diesem Beispiel) wird 1 angehängt. Da die Tabelle ResourceContainers Typen für Abonnements und Ressourcengruppen enthält, können beide Typen zum Verknüpfen der Ressource aus der Tabelle Resources
verwendet werden.
Resources
| join ResourceContainers on subscriptionId
| limit 1
Die folgende Abfrage zeigt eine komplexere Verwendung von join
. Zuerst verwendet die Abfrage project
, um die Felder aus Resources
für den Ressourcentyp „Azure Key Vault-Tresore“ abzurufen. Im nächsten Schritt werden die Ergebnisse mithilfe von join
mit ResourceContainers zusammengeführt, wobei es sich bei dem Typ um ein Abonnement für eine Eigenschaft handelt, die sich sowohl im project
der ersten Tabelle als auch im project
der verbundenen Tabelle befindet. Durch das Umbenennen des Felds wird das Hinzufügen als name1 bei join
vermieden, da die Eigenschaft bereits aus Resources
projiziert wurde. Das Abfrageergebnis ist ein einzelner Schlüsseltresor, der den Typ, den Namen, den Speicherort und die Ressourcengruppe des Schlüsseltresors sowie den Namen des Abonnements anzeigt, in dem er sich befindet.
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
Hinweis
Wenn Sie die Ergebnisse von join
mit project
einschränken, muss die Eigenschaft, die von join
zum Verknüpfen der beiden Tabellen verwendet wird (subscriptionId im obigen Beispiel), in project
enthalten sein.
Erweiterte Eigenschaften
Als Vorschau-Feature verfügen einige der Ressourcentypen in Resource Graph über mehr typbezogene Eigenschaften, die über die vom Azure Resource Manager bereitgestellten Eigenschaften hinaus abgefragt werden können. Dieser Satz von Werten, bekannt als erweiterte Eigenschaften, existiert auf einem unterstützten Ressourcentyp in properties.extended
. Verwenden Sie die folgende Abfrage, um Ressourcentypen mit erweiterten Eigenschaften anzuzeigen:
Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc
Beispiel: Abrufen der Anzahl virtueller Computer über instanceView.powerState.code
:
Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
Benutzerdefinierte Sprachelemente in Resource Graph
Syntax für freigegebene Abfragen (Vorschauversion)
Als Previewfunktion kann der Zugriff auf eine freigegebene Abfrage direkt in einer Resource Graph-Abfrage erfolgen. Dieses Szenario ermöglicht es, Standardabfragen als freigegebene Abfragen zu erstellen und wiederzuverwenden. Verwenden Sie die Syntax {{shared-query-uri}}
, um eine freigegebene Abfrage innerhalb einer Resource Graph-Abfrage aufzurufen. Der URI der freigegebenen Abfrage entspricht der Ressourcen-ID der freigegebenen Abfrage auf der Seite Einstellungen für diese Abfrage. In diesem Beispiel ist /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS
der URI für die freigegebene Abfrage.
Dieser URI verweist auf das Abonnement, die Ressourcengruppe und den vollständigen Namen der freigegebenen Abfrage, auf die in einer anderen Abfrage verwiesen werden soll. Diese Abfrage ist identisch mit der Abfrage, die unter Tutorial: Erstellen und Freigeben einer Abfrage erstellt wird.
Hinweis
Eine Abfrage, die auf eine freigegebene Abfrage verweist, kann nicht als freigegebene Abfrage gespeichert werden.
Beispiel 1: Alleiniges Verwenden der freigegebenen Abfrage
Die Ergebnisse dieser Resource Graph-Abfrage sind identisch mit denen der in der freigegebenen Abfrage gespeicherten.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
Beispiel 2: Einfügen der freigegebenen Abfrage als Teil einer größeren Abfrage
Bei dieser Abfrage wird zunächst die freigegebene Abfrage und dann limit
verwendet, um die Ergebnisse weiter einzugrenzen.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'
Unterstützte KQL-Sprachelemente
Resource Graph unterstützt eine Teilmenge von Datentypen, Skalarfunktionen, Skalaroperatoren und Aggregationsfunktionen von KQL. Es werden bestimmte tabellarische Operatoren von Resource Graph unterstützt, von denen einige unterschiedliche Verhaltensweisen aufweisen.
Unterstützte tabellarische Operatoren und Operatoren auf oberster Ebene
Hier finden Sie die Liste der von Resource Graph unterstützten KQL-Tabellenoperatoren mit konkreten Beispielen:
KQL | Resource Graph-Beispielabfrage | Notizen |
---|---|---|
count | Anzahl von Schlüsseltresoren | |
distinct | Anzeigen von Ressourcen, die Speicher enthalten | |
extend | Anzahl von virtuellen Computern nach Betriebssystemtyp | |
join | Schlüsseltresor mit Abonnementname | Unterstützte Joinvarianten: innerunique, inner, leftouter und fullouter. Es können maximal drei join -Vorgänge in einer einzelnen Abfrage stattfinden. Einer davon kann ein tabellenübergreifender join -Vorgang sein. Wenn alle tabellenübergreifenden join -Vorgänge zwischen Resource und ResourceContainers stattfinden, sind drei tabellenübergreifende join -Vorgänge zulässig. Benutzerdefinierte Joinstrategien wie Broadcastjoin sind nicht zulässig. Welche Tabellen join verwenden können, erfahren Sie unter Resource Graph-Tabellen. |
limit | Liste der öffentlichen IP-Adressen | Synonym für take . Funktioniert nicht für Skip. |
mvexpand | Legacy-Operator, verwenden Sie stattdessen mv-expand . RowLimit maximal 2.000. Der Standardwert ist 128. |
|
mv-expand | Auflisten von Azure Cosmos DB mit bestimmten Schreibinstanzen | RowLimit maximal 2.000. Der Standardwert ist 128. Maximal drei mv-expand -Elemente in einer einzelnen Abfrage. |
order | Auflisten von Ressourcen nach Namen sortiert | Synonym für sort |
parse | Abrufen von virtuellen Netzwerken und Subnetzen von Netzwerkschnittstellen | Es ist optimal, direkt auf Eigenschaften zuzugreifen, wenn sie vorhanden sind, anstatt parse zu verwenden. |
project | Auflisten von Ressourcen nach Namen sortiert | |
project-away | Entfernen von Spalten aus den Ergebnissen | |
sort | Auflisten von Ressourcen nach Namen sortiert | Synonym für order |
summarize | Anzahl der Azure-Ressourcen | Nur vereinfachte erste Seite |
take | Liste der öffentlichen IP-Adressen | Synonym für limit . Funktioniert nicht für Skip. |
top | Anzeigen der ersten fünf virtuellen Computer nach Name und BS-Typ | |
union | Vereinen von Ergebnissen aus zwei Abfragen in einem einzigen Ergebnis | Einzelne Tabelle zulässig: | union [kind= inner|outer] [withsource=ColumnName] Table . Es können maximal drei union -Verzweigungen in einer einzelnen Abfrage vorhanden sein. Fuzzyauflösung von union -Verzweigungstabellen ist nicht zulässig. Kann innerhalb einer einzelnen Tabelle oder zwischen den Tabellen Resources und ResourceContainers verwendet werden. |
where | Anzeigen von Ressourcen, die Speicher enthalten |
Es gibt eine Standardgrenze von drei join
- und drei mv-expand
-Operatoren in einer einzelnen Resource Graph-SDK-Abfrage. Sie können eine Erhöhung dieser Grenzwerte für Ihren Mandanten über Hilfe und Support anfordern.
Zur Unterstützung der Portalfunktion Abfrage öffnen weist der Azure Resource Graph-Explorer einen höheren globalen Grenzwert als das Resource Graph-SDK auf.
Hinweis
Sie können eine Tabelle nicht mehrfach als rechte Tabelle referenzieren, was den Grenzwert von 1 überschreitet. Wenn Sie dies tun, erhalten Sie eine Fehlermeldung mit dem Code DisallowedMaxNumberOfRemoteTables.
Abfragebereich
Der Bereich des Abonnements oder der Verwaltungsgruppen, aus dem Ressourcen von einer Abfrage zurückgegeben werden, ist standardmäßig eine Liste mit Abonnements, basierend auf dem Kontext des autorisierten Benutzers. Wenn weder eine Verwaltungsgruppe noch eine Abonnementliste definiert ist, umfasst der Abfragebereich alle Ressourcen, einschließlich delegierter Azure Lighthouse-Ressourcen.
Die Liste der abzufragenden Abonnements oder Verwaltungsgruppen kann manuell definiert werden, um den Bereich der Ergebnisse zu ändern. Die REST-API-Eigenschaft managementGroups
übernimmt beispielsweise die Verwaltungsgruppen-ID, die sich von dem Namen der Verwaltungsgruppe unterscheidet. Wenn managementGroups
angegeben ist, werden Ressourcen aus den ersten 10.000 Abonnements in oder unter der angegebenen Verwaltungsgruppenhierarchie eingeschlossen. managementGroups
kann nicht gleichzeitig mit subscriptions
verwendet werden.
Beispiel: Abfrage aller Ressourcen innerhalb der Hierarchie der Verwaltungsgruppe namens My Management Group
mit der ID myMG
.
REST-API-URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
Anforderungstext
{ "query": "Resources | summarize count()", "managementGroups": ["myMG"] }
Mit dem Parameter AuthorizationScopeFilter
können Sie in der Tabelle AuthorizationResources
Azure Policy-Zuweisungen und Azure RBAC-Rollenzuweisungen (rollenbasierte Zugriffssteuerung in Azure) auflisten, die von oberen Bereichen geerbt werden. Der Parameter AuthorizationScopeFilter
akzeptiert die folgenden Werte für die Tabellen PolicyResources
und AuthorizationResources
:
- AtScopeAndBelow (Standardeinstellung bei fehlender Angabe): Gibt Zuweisungen für den angegebenen Bereich und alle untergeordneten Bereiche zurück.
- AtScopeAndAbove: Gibt Zuweisungen für den angegebenen Bereich und alle übergeordneten Bereiche, aber nicht für untergeordnete Bereiche zurück.
- AtScopeAboveAndBelow: gibt Zuweisungen für den angegebenen Bereich sowie für alle über- und untergeordneten Bereiche zurück.
- AtScopeExact: Gibt nur Zuweisungen für den angegebenen Bereich zurück. Über- und untergeordnete Bereiche werden nicht einbezogen.
Hinweis
Um den Parameter AuthorizationScopeFilter
zu verwenden, müssen Sie in Ihren Anforderungen die API-Version 2021-06-01-preview oder höher verwenden.
Beispiel: Abrufen aller Richtlinienzuweisungen im Bereich der Verwaltungsgruppe myMG und im (übergeordneten) Mandantenstammbereich
REST-API-URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
Exemplarischer Anforderungstext
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "managementGroups": ["myMG"] }
Beispiel: Abrufen aller Richtlinienzuweisungen im Bereich des Abonnements mySubscriptionId, im Verwaltungsgruppenbereich und im Mandantenstammbereich
REST-API-URI
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
Exemplarischer Anforderungstext
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "subscriptions": ["mySubscriptionId"] }
Escape-Zeichen
Einige Eigenschaftennamen, etwa diejenigen, die einen .
oder ein $
enthalten, müssen in einer Abfrage umhüllt oder mit Escapezeichen versehen sein. Andernfalls wird der jeweilige Eigenschaftenname falsch interpretiert, sodass nicht die erwarteten Ergebnisse bereitgestellt werden.
Punkt (
.
): Schließen Sie den Eigenschaftennamen['propertyname.withaperiod']
in Klammern ein.Beispielabfrage, in der die Eigenschaft odata.type umhüllt ist:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
Dollarzeichen (
$
): Versehen Sie das Zeichen im Eigenschaftennamen mit einem Escapezeichen. Welches Escapezeichen verwendet wird, hängt von der Shell ab, in der Resource Graph ausführt wird.Bash: Verwenden Sie einen umgekehrten Schrägstrich (
\
) als Escapezeichen.Beispielabfrage, in der die type-Eigenschaft in Bash mit einem Escapezeichen versehen ist:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
cmd: Versehen Sie das Dollarzeichen (
$
) nicht mit einem Escapezeichen.PowerShell: Verwenden Sie das Graviszeichen (
`
) als Escapezeichen.Beispielabfrage, in der die Eigenschaft type in PowerShell mit einem Escapezeichen versehen ist:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
Nächste Schritte
- Einstiegsabfragen und erweiterte Abfragen für die Azure Ressource Graph-Abfragesprache
- Weitere Informationen über das Erkunden von Azure-Ressourcen