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:

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.Advisorin Zusammenhang stehen.
AlertsManagementResources Ja Umfasst Ressourcen, die mit Microsoft.AlertsManagementin Zusammenhang stehen.
AppServiceResources Ja Umfasst Ressourcen, die mit Microsoft.Webin Zusammenhang stehen.
AuthorizationResources Ja Umfasst Ressourcen, die mit Microsoft.Authorizationin Zusammenhang stehen.
AWSResources Ja Umfasst Ressourcen, die mit Microsoft.AwsConnectorin Zusammenhang stehen.
AzureBusinessContinuityResources Ja Umfasst Ressourcen, die mit Microsoft.AzureBusinessContinuityin Zusammenhang stehen.
ChaosResources Ja Umfasst Ressourcen, die mit Microsoft.Chaosin Zusammenhang stehen.
CommunityGalleryResources Ja Umfasst Ressourcen, die mit Microsoft.Computein Zusammenhang stehen.
ComputeResources Ja Enthält Ressourcen im Zusammenhang mit Microsoft.Compute-VM-Skalierungsgruppen.
DesktopVirtualizationResources Ja Umfasst Ressourcen, die mit Microsoft.DesktopVirtualizationin Zusammenhang stehen.
DnsResources Ja Umfasst Ressourcen, die mit Microsoft.Networkin Zusammenhang stehen.
EdgeOrderResources Ja Umfasst Ressourcen, die mit Microsoft.EdgeOrderin Zusammenhang stehen.
ElasticsanResources Ja Umfasst Ressourcen, die mit Microsoft.ElasticSanin Zusammenhang stehen.
ExtendedLocationResources Ja Umfasst Ressourcen, die mit Microsoft.ExtendedLocationin Zusammenhang stehen.
FeatureResources Ja Umfasst Ressourcen, die mit Microsoft.Featuresin Zusammenhang stehen.
GuestConfigurationResources Ja Umfasst Ressourcen, die mit Microsoft.GuestConfigurationin Zusammenhang stehen.
HealthResourceChanges Ja Umfasst Ressourcen, die mit Microsoft.Resourcesin Zusammenhang stehen.
HealthResources Ja Umfasst Ressourcen, die mit Microsoft.ResourceHealthin Zusammenhang stehen.
InsightsResources Ja Umfasst Ressourcen, die mit Microsoft.Insightsin Zusammenhang stehen.
IoTSecurityResources Ja Umfasst Ressourcen im Zusammenhang mitMicrosoft.IoTSecurity und Microsoft.IoTFirmwareDefense.
KubernetesConfigurationResources Ja Umfasst Ressourcen, die mit Microsoft.KubernetesConfigurationin Zusammenhang stehen.
KustoResources Ja Umfasst Ressourcen, die mit Microsoft.Kustoin Zusammenhang stehen.
MaintenanceResources Ja Umfasst Ressourcen, die mit Microsoft.Maintenancein Zusammenhang stehen.
ManagedServicesResources Ja Umfasst Ressourcen, die mit Microsoft.ManagedServicesin Zusammenhang stehen.
MigrateResources Ja Umfasst Ressourcen, die mit Microsoft.OffAzurein Zusammenhang stehen.
NetworkResources Ja Umfasst Ressourcen, die mit Microsoft.Networkin Zusammenhang stehen.
OrbitalResources Ja Umfasst Ressourcen, die mit Microsoft.Orbitalin 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.PolicyInsightsin Zusammenhang stehen.
RecoveryServicesResources Ja Umfasst Ressourcen im Zusammenhang mitMicrosoft.DataProtection und Microsoft.RecoveryServices.
ResourceChanges Ja Umfasst Ressourcen, die mit Microsoft.Resourcesin Zusammenhang stehen.
ResourceContainerChanges Ja Umfasst Ressourcen, die mit Microsoft.Resourcesin 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.Securityin Zusammenhang stehen.
ServiceFabricResources Ja Umfasst Ressourcen, die mit Microsoft.ServiceFabricin Zusammenhang stehen.
ServiceHealthResources Ja Umfasst Ressourcen, die mit Microsoft.ResourceHealth/eventsin Zusammenhang stehen.
SpotResources Ja Umfasst Ressourcen, die mit Microsoft.Computein Zusammenhang stehen.
SupportResources Ja Umfasst Ressourcen, die mit Microsoft.Supportin Zusammenhang stehen.
TagsResources Ja Umfasst Ressourcen, die mit Microsoft.Resources/tagnamespacesin 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 400. Der Standardwert ist 128.
mv-expand Auflisten von Azure Cosmos DB mit bestimmten Schreibinstanzen RowLimit maximal 400. Der Standardwert ist 128. Maximal zwei 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