Az Azure Resource Graph lekérdezési nyelvének ismertetése

Az Azure Resource Graph lekérdezési nyelve számos operátort és függvényt támogat. Minden munka Kusto lekérdezésnyelv (KQL) alapján működik. A Resource Graph által használt lekérdező nyelv megismerését kezdje a KQL-oktatóanyaggal.

Ez a cikk a Resource Graph által támogatott nyelvi összetevőket ismerteti:

Resource Graph-táblák

A Resource Graph számos táblát biztosít az Azure Resource Manager-erőforrástípusokról és azok tulajdonságairól tárolt adatokhoz. A Resource Graph-táblák az operátorral használhatóak a join kapcsolódó erőforrástípusok tulajdonságainak lekérésére.

A Resource Graph-táblák támogatják az join ízeket:

Resource Graph-tábla Tud join más táblákat is? Description
AdvisorResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Advisor
AlertsManagementResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.AlertsManagement
AppServiceResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Web
AuthorizationResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Authorization
AWSResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.AwsConnector
AzureBusinessContinuityResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.AzureBusinessContinuity
ChaosResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Chaos
CommunityGalleryResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Compute
ComputeResources Yes A virtuálisgép-méretezési csoportokhoz Microsoft.Compute kapcsolódó erőforrásokat tartalmazza.
DesktopVirtualizationResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.DesktopVirtualization
DnsResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Network
EdgeOrderResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.EdgeOrder
ElasticsanResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.ElasticSan
ExtendedLocationResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.ExtendedLocation
FeatureResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Features
GuestConfigurationResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.GuestConfiguration
HealthResourceChanges Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Resources
HealthResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.ResourceHealth
InsightsResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Insights
IoTSecurityResources Yes Tartalmaz forrásokat, amelyek kapcsolódnak és Microsoft.IoTSecurityMicrosoft.IoTFirmwareDefense.
KubernetesConfigurationResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.KubernetesConfiguration
KustoResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Kusto
MaintenanceResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Maintenance
ManagedServicesResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.ManagedServices
MigrateResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.OffAzure
NetworkResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Network
PatchAssessmentResources Yes Tartalmaz Azure Virtual Machines patch assessment Microsoft.Compute és Microsoft.HybridCompute.
PatchInstallationResources Yes Tartalmaz Azure Virtual Machines javítás telepítéséhez Microsoft.Compute kapcsolódó forrásokat és Microsoft.HybridCompute.
PolicyResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.PolicyInsights
RecoveryServicesResources Yes Tartalmaz forrásokat, amelyek kapcsolódnak és Microsoft.DataProtectionMicrosoft.RecoveryServices.
ResourceChanges Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Resources
ResourceContainerChanges Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Resources
ResourceContainers Yes Tartalmazza a felügyeleti csoport (Microsoft.Management/managementGroups), az előfizetés (Microsoft.Resources/subscriptions) és az erőforráscsoport (Microsoft.Resources/subscriptions/resourcegroups) erőforrástípusokat és -adatokat.
Resources Yes Az alapértelmezett tábla, ha egy tábla nincs definiálva a lekérdezésben. A Resource Manager legtöbb erőforrástípusa és tulajdonsága itt található.
SecurityResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Security
ServiceFabricResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.ServiceFabric
ServiceHealthResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.ResourceHealth/events
SpotResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Compute
SupportResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Support
TagsResources Yes Tartalmaz forrásokat, amelyek kapcsolódóak .Microsoft.Resources/tagnamespaces

Az erőforrástípusokat tartalmazó táblák listájához lépjen az Azure Resource Graph táblára és az erőforrástípusra vonatkozó hivatkozásra.

Note

Resources az alapértelmezett tábla. A tábla lekérdezése Resources során nem szükséges megadni a tábla nevét, hacsak join nem használják vagy union használják. Az ajánlott eljárás azonban az, hogy a kezdeti táblát mindig belefoglalja a lekérdezésbe.

Ha szeretné felderíteni, hogy mely erőforrástípusok érhetők el az egyes táblákban, használja a Resource Graph Explorert a portálon. Másik lehetőségként használjon egy lekérdezést, például <tableName> | distinct type lekérheti az adott Resource Graph-tábla által támogatott erőforrástípusok listáját, amelyek a környezetben léteznek.

Az alábbi lekérdezés egy egyszerű joinlekérdezést jelenít meg. A lekérdezés eredménye összekeveri az oszlopokat, és a kapcsolódó táblázatból, a ResourceContainers (ebben a példában) bármely duplikált oszlopnevet 1-mel csatoljuk. Mivel a ResourceContainers táblája tartalmazza a típusokat előfizetésekhez és az erőforráscsoportokhoz egyaránt, mindkét típus használható az erőforráshoz a tábla Resources szerinti csatlakozáshoz.

Resources
| join ResourceContainers on subscriptionId
| limit 1

Az alábbi lekérdezés a joinösszetettebb használatát mutatja be. Először is a lekérdezés az Azure Key Vault-tárolók erőforrástípusának mezőit project használjaResources. A következő lépés join az eredmények összevonását használja a ResourceContainers-szel , ahol a típus egy előfizetés egy tulajdonságon, amely mind az első project táblában, mind az egyesített táblában projecttalálható. A mező átnevezése elkerülijoin, hogy name1-ként adják hozzá, mivel a tulajdonság már ki van vetítve .Resources A lekérdezés eredménye egyetlen kulcstartó, amely a kulcstartó nevét, helyét és erőforráscsoportját, valamint annak az előfizetésnek a nevét jeleníti meg, amelyben szerepel.

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

Az eredmények korlátozása join esetén project, a két tábla összekapcsolásához használt join tulajdonság, a fenti példában SubscriptionId, be kell kerülni .project

Kiterjesztett tulajdonságok

Előnézeti funkcióként néhány erőforrás-típus az Azure Resource Manager által biztosított tulajdonságokon túl több típushoz kapcsolódó tulajdonsággal rendelkezik. Ez az értékhalmaz, amelyet kiterjesztett tulajdonságoknak neveznek, egy támogatott erőforrástípuson létezik .properties.extended A kiterjesztett tulajdonságokkal rendelkező erőforrás-típusok megjelenítéséhez használja a következő lekérdezést:

Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc

Példa: Virtuális gépek számának lekérése a következő szerint instanceView.powerState.code:

Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)

Resource Graph egyéni nyelvi elemei

Megosztott lekérdezés szintaxisa (előzetes verzió)

Előnézeti funkcióként egy megosztott lekérdezés közvetlenül elérhető egy Resource Graph lekérdezésben. Ez a forgatókönyv lehetővé teszi szabványos lekérdezések közös lekérdezésként való létrehozását és újbóli felhasználását. Ha megosztott lekérdezést szeretne meghívni egy Resource Graph-lekérdezésben, használja a szintaxist {{shared-query-uri}} . A megosztott lekérdezés URI-je a megosztott lekérdezés Erőforrás azonosítója a Beállítások oldalon az adott lekérdezéshez. Ebben a példában a megosztott lekérdezés URI-ja a következő /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS. Ez az URI a másik lekérdezésben hivatkozni kívánt megosztott lekérdezés előfizetésére, erőforráscsoportjára és teljes nevére mutat. Ez a lekérdezés megegyezik a következő oktatóanyagban létrehozott lekérdezéssel: Lekérdezés létrehozása és megosztása.

Note

Nem menthet olyan lekérdezést, amely megosztott lekérdezésre hivatkozik megosztott lekérdezésként.

1. példa: Csak a megosztott lekérdezés használata:

A Resource Graph-lekérdezés eredményei megegyeznek a megosztott lekérdezésben tárolt lekérdezés eredményeivel.

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}

2. példa: A megosztott lekérdezés belefoglalása egy nagyobb lekérdezés részeként:

Ez a lekérdezés először a megosztott lekérdezést használja, majd limit tovább korlátozza az eredményeket.

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'

Támogatott KQL nyelvi elemek

A Resource Graph támogatja a KQL adattípusok, skaláris függvények, skaláris operátorok és aggregációs függvények egy részhalmazát. A Resource Graph támogatja a konkrét táblázatos operátorokat , amelyek közül néhány eltérő viselkedéssel bír.

Támogatott táblázatos/felső szintű operátorok

Íme a Resource Graph által támogatott KQL táblázatos operátorok listája konkrét mintákkal:

KQL Resource Graph-minta lekérdezés Notes
count Kulcstartók megszámlálása
distinct A tárolót tartalmazó erőforrások megjelenítése
extend A virtuális gépek száma az operációs rendszer típusa szerint
join Kulcstartó előfizetés nevével Csatlakozz a támogatott ízekhez: innerunique, inner, leftouter és fullouter. Egy lekérdezés három join vagy union műveletének (vagy a kettő kombinációjának) korlátja, összeszámolva, amelyek közül az egyik táblaközi illesztés lehet. Ha minden kereszttáblás join használat az Erőforrás és a ResourceContainers között van, akkor három kereszttáblás join használat engedélyezett. Az egyéni illesztési stratégiák, például a közvetítési csatlakozás nem engedélyezettek. Mely táblák használhatókjoin, lépjen a Resource Graph-táblákra.
limit Az összes nyilvános IP-cím listázása Szinonimája.take Nem működik Skip-tel.
mvexpand Régebbi operátort használjon mv-expand helyette. RowLimit maximum: 2 000. Az alapértelmezett érték 128.
mv-expand Az Azure Cosmos DB listázása adott írási helyekkel RowLimit maximum: 2 000. Az alapértelmezett érték 128. 3-ra mv-expand vonatkozó korlát egyetlen lekérdezésben.
order Az erőforrások listája név szerint rendezve Szinonimája sort
parse Virtuális hálózatok és hálózati adapterek alhálózatainak lekérése A tulajdonságokat optimális közvetlenül elérni, ha azok a használat parsehelyett léteznek.
project Az erőforrások listája név szerint rendezve
project-away Oszlopok eltávolítása az eredményekből
sort Az erőforrások listája név szerint rendezve Szinonimája order
summarize Az Azure-erőforrások száma Csak egyszerűsített első oldal
take Az összes nyilvános IP-cím listázása Szinonimája.limit Nem működik Skip-tel.
top Az első öt virtuális gép megjelenítése a nevük és az operációs rendszerük típusa szerint
union Két lekérdezés eredményeinek egyesítése egyetlen eredményben Egyetlen tábla engedélyezett: | union [kind= inner|outer] [withsource=ColumnName] Table. Egyetlen lekérdezés három union lábának korlátja. A lábtáblák homályos felbontása union nem engedélyezett. Használható egyetlen táblában vagy a Resources és ResourceContainers táblák között.
where A tárolót tartalmazó erőforrások megjelenítése

Egyetlen Resource Graph SDK-lekérdezésben három join és három mv-expand operátor alapértelmezett korlátja van. A bérlőre vonatkozó korlátozások növelését a Súgó + támogatás segítségével kérheti.

Az Open Query portál élményének támogatásához az Azure Resource Graph Explorer magasabb globális korláttal rendelkezik, mint a Resource Graph SDK.

Note

A táblákra nem hivatkozhat többször jobb táblázatként, ami meghaladja az 1-et. Ha így tesz, hibaüzenetet kap a DisallowedMaxNumberOfRemoteTables kóddal.

Lekérdezési hatókör

Az előfizetések vagy kezelőcsoportok hatóköre, amelyekből lekérdezés által visszaküldött erőforrásokat adnak, alapértelmezés szerint az engedélyezett felhasználó kontextusa alapján egy előfizetéslistára vonatkozik. Ha egy menedzsment csoport vagy előfizetéses lista nincs meghatározva, a lekérdezési hatókör minden erőforrást magában foglal, és tartalmazza az Azure Lighthouse által delegált erőforrásokat is.

A lekérdezésre kerülő előfizetések vagy felügyeleti csoportok listája manuálisan definiálható az eredmények hatókörének módosításához. A REST API managementGroups tulajdonság például a felügyeleti csoport azonosítóját veszi fel, amely eltér a felügyeleti csoport nevétől. Ha managementGroups meg van adva, az első 10 000 előfizetésből származó erőforrások szerepelnek a megadott felügyeleticsoport-hierarchiában vagy alatt. managementGroups nem használható egyszerre, mint subscriptionsa .

Példa: Az azonosítóval My Management Groupellátott myMG felügyeleti csoport hierarchiájának összes erőforrásának lekérdezése.

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • Kérelem tartalma

    {
      "query": "Resources | summarize count()",
      "managementGroups": ["myMG"]
    }
    

A AuthorizationScopeFilter paraméter lehetővé teszi az Azure Policy-hozzárendelések és az Azure szerepköralapú hozzáférés-vezérlési (Azure RBAC- ) szerepkör-hozzárendelések felsorolását a AuthorizationResources felső hatókörökből öröklő táblában. A AuthorizationScopeFilter paraméter a következő értékeket fogadja el a táblákhoz és PolicyResources a AuthorizationResources táblákhoz:

  • AtScopeAndBelow (alapértelmezett, ha nincs megadva): Visszaadja a megadott scope-ra és az összes gyermek scope-ra vonatkozó kiosztásokat.
  • AtScopeAndAbove: A megadott scope-hoz és az összes szülő scope-hoz tartozó hozzárendeléseket ad, de a gyermek scope-okat nem.
  • AtScopeAboveAndBelow: Visszaadja a megadott scope-hoz, az összes szülő scope-hoz és minden gyermek scope-hoz.
  • AtScopeExact: Csak a megadott hatótávra vonatkozó hozzárendeléseket ad vissza; Szülői vagy gyermek távcsövek nem szerepelnek.

Note

A AuthorizationScopeFilter paraméter használatához mindenképp használd a 2021-06-01-preview vagy későbbi API verziót a kéréseidben.

Példa: Szerezd meg az összes szabályzat kijelölést a myMG menedzsment csoportnál és a Bérlő Root (szülő) sztáriánál keresztül.

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Törzsminta kérése

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "managementGroups": ["myMG"]
    }
    

Példa: Minden szabályzat hozzárendelést a mySubscriptionId előfizetés, menedzsment csoport és Bérlő Root scope-on kap.

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Törzsminta kérése

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "subscriptions": ["mySubscriptionId"]
    }
    

** Vezérlő karakterek

Egyes tulajdonságneveket, például az a . vagy $, be kell csomagolni vagy meg kell szökni a lekérdezésben, vagy a tulajdonságnév helytelenül van értelmezve, és nem adja meg a várt eredményeket.

  • Pont (.): A tulajdonságnév ['propertyname.withaperiod'] körbefuttatása szögletes zárójelekkel.

    Példa lekérdezés, amely az odata.type tulajdonságot csomagolja:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • Dollárjel ($): A tulajdonságnév karakterének elhagyása. A használt feloldó karakter a Resource Graphot futtató rendszerhéjtól függ.

    • Bash: Használj egy backslash-t (\) menekülő karakterként.

      Példa lekérdezés, amely a Bash-ban $type tulajdonságból kilép:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd: Ne menekülj el a dollárjel ($) karakter elől.

    • PowerShell: Használj egy backticket (`) menekülés karakterként.

      Példa lekérdezés, amely kilép a PowerShell-ben $type tulajdonságból:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
      

RBAC-engedélyek kiértékelési függvényei a Azure Resource Graph

A Azure Resource Graph (ARG) két olyan függvényt biztosít, amelyek lehetővé teszik annak kiértékelését, hogy a kurens lekérdezési identitás adott engedélyekkel rendelkezik-e az egyes erőforrásokhoz:

  • hasPermission()
  • hasDataPermission()

Ezek a függvények egy logikai értéket (1 vagy 0) adnak vissza erőforrásonként, és lehetővé teszik az olyan forgatókönyveket, mint például az erőforrások szűrése vagy összegzése a hozzáférés alapján.

Note

Ezeket a függvényeket egy erőforráspéldány és az érvényes RBAC-hozzárendelések kontextusában értékeli ki a rendszer. Ezek nem működnek közvetlenül a szerepkör-definíciókon.

hasPermission()

A hasPermission() függvény kiértékeli, hogy a lekérdezési identitás rendelkezik-e adott vezérlősík-engedéllyel egy erőforráson.

Használja a következő formátumot hasPermission():

hasPermission('<permission-string>')

A hasPermission() függvény hatékony RBAC-hozzárendeléseket használ a lekérdezési identitáshoz, és erőforrássoronként kiértékeli. A függvény 1 értéket ad vissza, ha az identitás rendelkezik a megadott engedéllyel az erőforráson, és 0 , ha az identitás nem.

Példa: Írási hozzáférés ellenőrzése Azure tárolóregisztrációs adatbázisokhoz

resources
| where type =~ 'Microsoft.ContainerRegistry/registries'
| extend canPush = hasPermission('Microsoft.ContainerRegistry/registries/push/write')

Ebben a példában az egyes tárolóregisztrációs adatbázis-erőforrásokat egyenként értékeli ki a rendszer, és canPush jelzi, hogy a lekérdezési identitás végrehajthatja-e a megadott írási műveletet az adott erőforráson. Az eredmények felhasználhatók szűrésre, összesítésre vagy összegzésre a visszaadott érték alapján.

hasDataPermission()

A hasDataPermission() lekérdezés kiértékeli, hogy a lekérdezési identitás rendelkezik-e adott adatsík-engedéllyel egy erőforráson.

Használja a következő formátumot hasDataPermission():

hasDataPermission('<permission-string>')

A hasDataPermission() függvény hatékony adatsík-hozzáférés-kiértékelést használ a lekérdezési identitáshoz, és erőforrássoronként értékeli ki. A függvény 1 értéket ad vissza, ha az identitás rendelkezik a megadott adatsík-engedéllyel az erőforráson, és 0 értéket, ha az identitás nem.

Példa: Adatsík olvasási hozzáférésének ellenőrzése Azure Blob Storage

resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| extend canReadBlobs = hasDataPermission('Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read')

Ebben a példában minden tárolóerőforrást külön-külön értékelünk ki. A hasDataPermissions() függvény ellenőrzi, hogy a lekérdezési identitás rendelkezik-e a megadott adat-plne engedélyekkel. A visszaadott érték használható szűréshez, összegzéshez vagy jelentéskészítéshez.

Példa: Adatsík olvasási hozzáférésének ellenőrzése Azure Blob Storage szűréssel

resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| where hasDataPermission('Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read') == 1

Ez a példa csak azokat a tárfiókokat adja vissza, ahol a lekérdezési identitás blob olvasási hozzáféréssel rendelkezik.

Fontos korlátozások

Ezeket a függvényeket gyakran összekeverik a szerepkör- vagy engedélyfelderítési forgatókönyvekkel. A következő korlátozásokat fontos megérteni:

  • A hasPermission() függvények nem hasDataPermission() határozzák meg, hogy a szerepkördefiníció milyen engedélyeket ad meg.
  • Nem használhatók a microsoft.authorization/roledefinitions erőforrások lekérdezésére vagy szűrésére.
  • Ezek nem olyan kérdések megválaszolására szolgálnak, mint például:
    • "Mely szerepkörök biztosítják ezt az engedélyt?"
    • "Milyen műveleteket tartalmaz ez a szerepkör-definíció?"

Következő lépések