Azure Kaynak Grafı sorgu dilini anlama

Azure Kaynak Grafı için sorgu dili birçok işleci ve işlevi destekler. Her çalışma ve Kusto Sorgu Dili (KQL) temelinde çalışır. Kaynak Grafı tarafından kullanılan sorgu dili hakkında bilgi edinmek için KQL öğreticisiyle başlayın.

Bu makale, Kaynak Grafı tarafından desteklenen dil bileşenlerini kapsar:

tabloları Kaynak Grafı

Kaynak Grafı, Azure Resource Manager kaynak türleri ve özellikleri hakkında depoladıkları veriler için çeşitli tablolar sağlar. Kaynak Grafı tabloları işleciyle birlikte join kullanarak ilgili kaynak türlerinden özellikleri alabilirsiniz.

Kaynak Grafı tablolar tatları join destekler:

Kaynak Grafı tablosu Diğer tablolar olabilir mi join ? Description
AdvisorResources Yes Kaynakları içerir.Microsoft.Advisor
AlertsManagementResources Yes Kaynakları içerir.Microsoft.AlertsManagement
AppServiceResources Yes Kaynakları içerir.Microsoft.Web
AuthorizationResources Yes Kaynakları içerir.Microsoft.Authorization
AWSResources Yes Kaynakları içerir.Microsoft.AwsConnector
AzureBusinessContinuityResources Yes Kaynakları içerir.Microsoft.AzureBusinessContinuity
ChaosResources Yes Kaynakları içerir.Microsoft.Chaos
CommunityGalleryResources Yes Kaynakları içerir.Microsoft.Compute
ComputeResources Yes Sanal Makine Ölçek Kümeleri ile ilgili Microsoft.Compute kaynakları içerir.
DesktopVirtualizationResources Yes Kaynakları içerir.Microsoft.DesktopVirtualization
DnsResources Yes Kaynakları içerir.Microsoft.Network
EdgeOrderResources Yes Kaynakları içerir.Microsoft.EdgeOrder
ElasticsanResources Yes Kaynakları içerir.Microsoft.ElasticSan
ExtendedLocationResources Yes Kaynakları içerir.Microsoft.ExtendedLocation
FeatureResources Yes Kaynakları içerir.Microsoft.Features
GuestConfigurationResources Yes Kaynakları içerir.Microsoft.GuestConfiguration
HealthResourceChanges Yes Kaynakları içerir.Microsoft.Resources
HealthResources Yes Kaynakları içerir.Microsoft.ResourceHealth
InsightsResources Yes Kaynakları içerir.Microsoft.Insights
IoTSecurityResources Yes ve ile ilgiliMicrosoft.IoTSecurityMicrosoft.IoTFirmwareDefensekaynakları içerir.
KubernetesConfigurationResources Yes Kaynakları içerir.Microsoft.KubernetesConfiguration
KustoResources Yes Kaynakları içerir.Microsoft.Kusto
MaintenanceResources Yes Kaynakları içerir.Microsoft.Maintenance
ManagedServicesResources Yes Kaynakları içerir.Microsoft.ManagedServices
MigrateResources Yes Kaynakları içerir.Microsoft.OffAzure
NetworkResources Yes Kaynakları içerir.Microsoft.Network
PatchAssessmentResources Yes Azure Sanal Makineler yama değerlendirmesi Microsoft.Compute kaynakları içerir ve Microsoft.HybridCompute.
PatchInstallationResources Yes Azure Sanal Makineler yaması kurulumu Microsoft.Compute kaynakları içerir.Microsoft.HybridCompute
PolicyResources Yes Kaynakları içerir.Microsoft.PolicyInsights
RecoveryServicesResources Yes ve ile ilgiliMicrosoft.DataProtectionMicrosoft.RecoveryServiceskaynakları içerir.
ResourceChanges Yes Kaynakları içerir.Microsoft.Resources
ResourceContainerChanges Yes Kaynakları içerir.Microsoft.Resources
ResourceContainers Yes Yönetim grubu (Microsoft.Management/managementGroups), abonelik (Microsoft.Resources/subscriptions) ve kaynak grubu (Microsoft.Resources/subscriptions/resourcegroups) kaynak türlerini ve verilerini içerir.
Resources Yes Sorguda tablo tanımlanmamışsa varsayılan tablo. Resource Manager kaynak türlerinin ve özelliklerinin çoğu buradadır.
SecurityResources Yes Kaynakları içerir.Microsoft.Security
ServiceFabricResources Yes Kaynakları içerir.Microsoft.ServiceFabric
ServiceHealthResources Yes Kaynakları içerir.Microsoft.ResourceHealth/events
SpotResources Yes Kaynakları içerir.Microsoft.Compute
SupportResources Yes Kaynakları içerir.Microsoft.Support
TagsResources Yes Kaynakları içerir.Microsoft.Resources/tagnamespaces

Kaynak türlerini içeren tabloların listesi için Azure Kaynak Grafı tablosuna ve kaynak türü başvurusuna gidin.

Note

Resources varsayılan tablodur. Tabloyu sorgularkenResources, kullanılmadığı veya join kullanılmadığı sürece union tablo adını sağlamak gerekmez. Ancak önerilen uygulama, ilk tabloyu her zaman sorguya eklemektir.

Her tabloda hangi kaynak türlerinin kullanılabilir olduğunu bulmak için portaldaki Kaynak Grafı Gezgini'ni kullanın. Alternatif olarak, verilen Kaynak Grafı tablosunun ortamınızda bulunan desteklediği kaynak türlerinin listesini almak için gibi <tableName> | distinct type bir sorgu kullanın.

Aşağıdaki sorguda basit joinbir gösterilir. Sorgu sonucu sütunları birleştirir ve bu örnekte ResourceContainers olan birleştirilmiş tablodan gelen çoğaltılmış sütun isimleri 1 ile eklenir. ResourceContainers tablosunda hem abonelikler hem de kaynak grupları için tipler olduğundan, her iki tip de tablodan kaynağa Resources katılmak için kullanılabilir.

Resources
| join ResourceContainers on subscriptionId
| limit 1

Aşağıdaki sorguda daha karmaşık bir kullanımı gösterilmektedir join. İlk olarak sorgu, Azure Key Vault kasaları kaynak türüne ait alanları project almak için kullanırResources. Sonraki adımjoin, sonuçları ResourceContainers ile birleştirmek için kullanılır; burada tip hem ilk tabloda hem de birleşik tabloda projectproject özellik için aboneliktir. Alan yeniden adı join ile name1 eklenmesi sağlanır çünkü özellik zaten 'dan Resourcesprojeksiyon edilmektedir. Sorgu sonucu, anahtar kasasının türünü, adını, konumunu ve kaynak grubunu ve içinde bulunduğu aboneliğin adını görüntüleyen tek bir anahtar kasasıdır.

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

Sonuçları join sınırlarken project, join yukarıdaki örnekte iki tabloyu ilişkilendirmek için kullanılan özellik, abonelikId , içine projectdahil edilmelidir.

Genişletilmiş özellikler

Önizleme özelliği olarak, Resource Graph'taki bazı kaynak türleri, Azure Resource Manager tarafından sağlanan özelliklerin ötesinde sorgulanabilir daha fazla türle ilgili özelliklere sahiptir. Bu değer kümesi, genişletilmiş özellikler olarak bilinir ve içinde desteklenen bir kaynak türünde properties.extendedmevcuttur. Genişletilmiş özelliklere sahip kaynak türlerini göstermek için aşağıdaki sorgu kullanın:

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

Örnek: ile sanal makinelerin instanceView.powerState.codesayısını alma:

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

Özel dil öğelerini Kaynak Grafı

Paylaşılan sorgu söz dizimi (önizleme)

Önizleme özelliği olarak, paylaşılan bir sorguya doğrudan Kaynak Grafiği sorgusu ile erişilebilir. Bu senaryo, paylaşılan sorgular olarak standart sorgular oluşturmayı ve bunları yeniden kullanmayı mümkün kılar. Kaynak Grafı sorgunun içinde paylaşılan sorguyu çağırmak için söz dizimini {{shared-query-uri}} kullanın. Paylaşılan sorgunun URI'si, o sorgu için Ayarlar sayfasındaki paylaşılan sorgunun Kaynak Kimliğidir. Bu örnekte, paylaşılan sorgu URI'miz şeklindedir /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS. Bu URI, başka bir sorguda başvurmak istediğimiz paylaşılan sorgunun aboneliğine, kaynak grubuna ve tam adına işaret ediyor. Bu sorgu, Öğretici: Sorgu oluşturma ve paylaşma bölümünde oluşturulan sorguyla aynıdır.

Note

Paylaşılan sorguya başvuran bir sorguyu paylaşılan sorgu olarak kaydedemezsiniz.

Örnek 1: Yalnızca paylaşılan sorguyu kullanın:

Bu Kaynak Grafı sorgusunun sonuçları, paylaşılan sorguda depolanan sorguyla aynıdır.

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

Örnek 2: Paylaşılan sorguyu daha büyük bir sorgunun parçası olarak ekleyin:

Bu sorgu önce paylaşılan sorguyu kullanır ve ardından sonuçları daha fazla kısıtlamak için kullanır limit .

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

Desteklenen KQL dil öğeleri

Resource Graph, KQL veri türleri, skaler fonksiyonlar, skaler operatörler ve toplama fonksiyonlarının bir alt kümesini destekler. Resource Graph tarafından desteklenen belirli tablo operatörleri vardır; bazıları farklı davranışlara sahiptir.

Desteklenen tablosal/üst düzey işleçler

Belirli örneklerle Kaynak Grafı tarafından desteklenen KQL tablo işleçlerinin listesi aşağıdadır:

KQL Örnek sorguyu Kaynak Grafı Notes
count Anahtar kasalarını sayma
distinct Depolama içeren kaynakları göster
extend Sanal makineleri işletim sistemi türüne göre sayma
join Abonelik adıyla anahtar kasası Desteklenen tatlara katılın: içteniksiz, , solcu ve tam tat. Tek bir sorguda üç join veya union işlemin (veya ikisinin birleşiminin) sınırı, birlikte sayılır ve bunlardan biri tablolar arası birleşim olabilir. Tüm çapraz tablo join kullanımı Resource ve ResourceContainers arasında ise, üç çapraz tablo join izinlidir. Yayına katılma gibi özel birleştirme stratejilerine izin verilmez. hangi tabloların kullanabileceği jointablolar için Kaynak Grafı tablolara gidin.
limit Tüm genel IP adreslerini listele öğesinin eş anlamlısı take. Skip ile işe yaramıyor.
mvexpand Eski işleç yerine kullanın mv-expand . RowLimit maksimum 2.000. Varsayılan değer 128'dir.
mv-expand Azure Cosmos DB'nin belirli yazma konumlarını listeleme RowLimit maksimum 2.000. Varsayılan değer 128'dir. Tek bir sorguda 3 mv-expand sınırı.
order Ada göre sıralanmış kaynakları listeleme Eş anlamlısı sort
parse Ağ arabirimlerinin sanal ağlarını ve alt ağlarını alma özellikleri kullanmak parseyerine varsa doğrudan erişmek en uygunudur.
project Ada göre sıralanmış kaynakları listeleme
project-away Sonuçlardan sütunları kaldırma
sort Ada göre sıralanmış kaynakları listeleme Eş anlamlısı order
summarize Azure kaynaklarını sayma Yalnızca basitleştirilmiş ilk sayfa
take Tüm genel IP adreslerini listele öğesinin eş anlamlısı limit. Skip ile işe yaramıyor.
top Ada ve işletim sistemi türüne göre ilk beş sanal makineyi gösterme
union İki sorgudan elde edilen sonuçları tek bir sonuçta birleştirme Tek tabloya izin verilir: | union [kind= inner|outer] [withsource=ColumnName] Table. Tek bir sorguda üç union bacak sınırı. Bacak masalarının bulanık çözünürlüğüne union izin verilmez. Tek bir tabloda veya Resources ile ResourceContainers tabloları arasında kullanılabilir.
where Depolama içeren kaynakları göster

Tek bir Kaynak Grafı SDK sorgusunda varsayılan olarak üç join ve üç mv-expand işleç sınırı vardır. Yardım + destek aracılığıyla kiracınız için bu sınırlarda bir artış isteyebilirsiniz.

Open Query portal deneyimini desteklemek için Azure Kaynak Grafı Explorer, Resource Graph SDK'dan daha yüksek bir küresel sınıra sahiptir.

Note

Bir tabloya birden çok kez sağ tablo olarak başvuramazsınız ve bu da 1 sınırını aşıyor. Bunu yaparsanız, DisallowedMaxNumberOfRemoteTables koduyla bir hata alırsınız.

Sorgu kapsamı

Bir sorgu ile kaynakların geri döndüğü aboneliklerin veya yönetim gruplarının kapsamı, yetkili kullanıcının bağlamına göre varsayılan olarak abonelik listesine dayanır. Bir yönetim grubu veya abonelik listesi tanımlanmamışsa, sorgu kapsamı tüm kaynaklardan oluşur ve Azure Lighthouse ile delege edilmiş kaynakları içerir.

Sorgulanacak aboneliklerin veya yönetim gruplarının listesi, sonuçların kapsamını değiştirmek için el ile tanımlanabilir. Örneğin REST API managementGroups özelliği, yönetim grubunun adından farklı olan yönetim grubu kimliğini alır. Belirtildiğinde managementGroups , belirtilen yönetim grubu hiyerarşisindeki veya altındaki ilk 10.000 abonelikteki kaynaklar eklenir. managementGroups ile aynı anda subscriptionskullanılamaz.

Örnek: Kimliği My Management Groupile adlı myMG yönetim grubunun hiyerarşisi içindeki tüm kaynakları sorgulayın.

  • REST API URI'si

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • İstek İçeriği

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

parametresi, AuthorizationScopeFilter üst kapsamlardan devralınan tablodaki AuthorizationResources Azure İlkesi atamalarını ve Azure rol tabanlı erişim denetimi (Azure RBAC) rol atamalarını listelemenizi sağlar. AuthorizationScopeFilter parametresi ve PolicyResources tabloları için AuthorizationResources aşağıdaki değerleri kabul eder:

  • AtScopeAndBelow (belirtilmediyse varsayılan): Verilen kapsam ve tüm alt kapsamlar için atamaları döndürür.
  • AtScopeAndAbove: Verilen kapsam ve tüm ana kapsamlar için atamaları döndürür, ancak alt kapsamları döndürmez.
  • AtScopeAboveAndBelow: Verilen kapsam, tüm ana kapsamlar ve tüm alt kapsamlar için atamaları döndürür.
  • AtScopeExact: Verilen kapsam için yalnızca atamaları döndürür; Ebeveyn veya çocuk kapsamları dahil edilmez.

Note

Parametreyi AuthorizationScopeFilter kullanmak için, isteklerinizde 2021-06-01-preview veya daha sonraki API sürümünü kullandığınızdan emin olun.

Örnek: Tüm politika atamalarını myMG yönetim grubu ve Kiracı Kökü (ebeveyn) kapsamlarında alın.

  • REST API URI'si

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • İstek Gövdesi Örneği

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

Örnek: Tüm politika atamalarını mySubscriptionId aboneliği, yönetim grubu ve Kiracı Kökü kapsamlarında alın.

  • REST API URI'si

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • İstek Gövdesi Örneği

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

Kaçış karakterleri

veya .içerenler $ gibi bazı özellik adları sorguda sarmalanmalıdır veya kaçılmalıdır veya özellik adı yanlış yorumlanır ve beklenen sonuçları sağlamaz.

  • Nokta (.): Köşeli ayraç kullanarak özellik adını ['propertyname.withaperiod'] sarmalar.

    Odata.type özelliğini saran örnek sorgu:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • Dolar işareti ($): Özellik adındaki karakterden kaçış. Kullanılan kaçış karakteri, Kaynak Grafı çalıştıran kabuğa bağlıdır.

    • Bash: Kaçış karakteri olarak bir backslash (\) kullanın.

      Bash' $type özelliğinden kaçan örnek sorgu:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd: Dolar işareti ($) karakterinden kaçmayın.

    • PowerShell: Kaçış karakteri olarak bir backtick (`) kullanın.

      PowerShell'de $type özelliğinden kaçan örnek sorgu:

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

Azure Kaynak Grafı RBAC izin değerlendirme işlevleri

Azure Kaynak Grafı (ARG), geçerli sorgulama kimliğinin tek tek kaynaklar üzerinde belirli izinlere sahip olup olmadığını değerlendirmenize olanak sağlayan iki işlev sağlar:

  • hasPermission()
  • hasDataPermission()

Bu işlevler kaynak başına boole değeri (1 veya 0) döndürür ve kaynakları erişime göre filtreleme veya özetleme gibi senaryoları etkinleştirir.

Note

Bu işlevler bir kaynak örneği ve etkili RBAC atamaları bağlamında değerlendirilir. Rol tanımları üzerinde doğrudan çalışmazlar .

hasPermission()

işlevi, hasPermission() sorgulayan kimliğin bir kaynak üzerinde belirli bir denetim düzlemi iznine sahip olup olmadığını değerlendirir.

için hasPermission()aşağıdaki biçimi kullanın:

hasPermission('<permission-string>')

İşlev, hasPermission() sorgu kimliği için etkili RBAC atamaları kullanır ve kaynak satırı başına değerlendirmeler gerçekleştirir. İşlev, kimliğin kaynak üzerinde belirtilen izne sahip olduğu 1 , kimlik yoksa 0 döndürür.

Örnek Azure Kapsayıcı Kayıt Defterlerine yazma erişimini denetleme

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

Bu örnekte her kapsayıcı kayıt defteri kaynağı ayrı ayrı değerlendirilir ve canPush sorgulayan kimliğin bu kaynakta belirtilen yazma eylemini gerçekleştirip gerçekleştiremeyeceğini gösterir. Sonuçlar, döndürülen değere göre filtreleme, toplama veya özetleme için kullanılabilir.

hasDataPermission()

, hasDataPermission() sorgulayan kimliğin bir kaynak üzerinde belirli bir veri düzlemi iznine sahip olup olmadığını değerlendirir.

için hasDataPermission()aşağıdaki biçimi kullanın:

hasDataPermission('<permission-string>')

İşlev, hasDataPermission() sorgulama kimliği için etkili veri düzlemi erişim değerlendirmesi kullanır ve kaynak satırı başına değerlendirilir. İşlev, kimlik kaynakta belirtilen veri düzlemi iznine sahipse 1, kimlik değilse 0 döndürür.

Örnek: Azure Blob Depolama veri düzlemi okuma erişimini denetleme

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

Bu örnekte, her depolama kaynağı ayrı ayrı değerlendirilir. İşlev, hasDataPermissions() sorgulayan kimliğin belirtilen data-plne izinlerine sahip olup olmadığını denetler. Döndürülen değer filtreleme, özetleme veya raporlama için kullanılabilir.

Örnek: Filtreleme ile Azure Blob Depolama veri düzlemi okuma erişimini denetleme

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

Bu örnek yalnızca sorgulayan kimliğin blob okuma erişimine sahip olduğu depolama hesaplarını döndürür.

Önemli sınırlamalar

Bu işlevler genellikle rol veya izin bulma senaryolarıyla karıştırılır. Aşağıdaki sınırlamaların anlaşılması önemlidir:

  • hasPermission() ve hasDataPermission() işlevleri, rol tanımının hangi izinleri vereceğini belirlemez.
  • Microsoft.authorization/roledefinitions kaynaklarını sorgulamak veya filtrelemek için kullanılamazlar.
  • Bunlar, şu gibi soruları yanıtlamak için tasarlanmamıştır:
    • "Hangi roller bu izni verir?"
    • "Bu rol tanımı hangi eylemleri içerir?"

Sonraki Adımlar