Partilhar via


Compreender a linguagem de consulta do Azure Resource Graph

A linguagem de consulta para o Azure Resource Graph dá suporte a muitos operadores e funções. Cada um funciona e opera com base na Kusto Query Language (KQL). Para saber mais sobre a linguagem de consulta utilizada pelo Resource Graph, comece com o tutorial do KQL.

Este artigo aborda os componentes de linguagem suportados pelo Resource Graph:

Tabelas do Gráfico de Recursos

O Gráfico de Recursos fornece várias tabelas para os dados que armazena sobre os tipos de recursos do Azure Resource Manager e suas propriedades. As tabelas do Gráfico de Recursos podem ser usadas com o join operador para obter propriedades de tipos de recursos relacionados.

As tabelas do Resource Graph suportam os join sabores:

Tabela do Gráfico de Recursos Podem join outras tabelas? Description
AdvisorResources Yes Inclui recursos relacionados com Microsoft.Advisor.
AlertsManagementResources Yes Inclui recursos relacionados com Microsoft.AlertsManagement.
AppServiceResources Yes Inclui recursos relacionados com Microsoft.Web.
AuthorizationResources Yes Inclui recursos relacionados com Microsoft.Authorization.
AWSResources Yes Inclui recursos relacionados com Microsoft.AwsConnector.
AzureBusinessContinuityResources Yes Inclui recursos relacionados com Microsoft.AzureBusinessContinuity.
ChaosResources Yes Inclui recursos relacionados com Microsoft.Chaos.
CommunityGalleryResources Yes Inclui recursos relacionados com Microsoft.Compute.
ComputeResources Yes Inclui recursos relacionados a Conjuntos de Dimensionamento de Microsoft.Compute Máquinas Virtuais.
DesktopVirtualizationResources Yes Inclui recursos relacionados com Microsoft.DesktopVirtualization.
DnsResources Yes Inclui recursos relacionados com Microsoft.Network.
EdgeOrderResources Yes Inclui recursos relacionados com Microsoft.EdgeOrder.
ElasticsanResources Yes Inclui recursos relacionados com Microsoft.ElasticSan.
ExtendedLocationResources Yes Inclui recursos relacionados com Microsoft.ExtendedLocation.
FeatureResources Yes Inclui recursos relacionados com Microsoft.Features.
GuestConfigurationResources Yes Inclui recursos relacionados com Microsoft.GuestConfiguration.
HealthResourceChanges Yes Inclui recursos relacionados com Microsoft.Resources.
HealthResources Yes Inclui recursos relacionados com Microsoft.ResourceHealth.
InsightsResources Yes Inclui recursos relacionados com Microsoft.Insights.
IoTSecurityResources Yes Inclui recursos relacionados com Microsoft.IoTSecurity e Microsoft.IoTFirmwareDefense.
KubernetesConfigurationResources Yes Inclui recursos relacionados com Microsoft.KubernetesConfiguration.
KustoResources Yes Inclui recursos relacionados com Microsoft.Kusto.
MaintenanceResources Yes Inclui recursos relacionados com Microsoft.Maintenance.
ManagedServicesResources Yes Inclui recursos relacionados com Microsoft.ManagedServices.
MigrateResources Yes Inclui recursos relacionados com Microsoft.OffAzure.
NetworkResources Yes Inclui recursos relacionados com Microsoft.Network.
PatchAssessmentResources Yes Inclui recursos relacionados com a avaliação Microsoft.Compute de patches em Máquinas Virtuais do Azure e Microsoft.HybridCompute.
PatchInstallationResources Yes Inclui recursos relacionados com a instalação Microsoft.Compute de patches Azure Virtual Machines e Microsoft.HybridCompute.
PolicyResources Yes Inclui recursos relacionados com Microsoft.PolicyInsights.
RecoveryServicesResources Yes Inclui recursos relacionados com Microsoft.DataProtection e Microsoft.RecoveryServices.
ResourceChanges Yes Inclui recursos relacionados com Microsoft.Resources.
ResourceContainerChanges Yes Inclui recursos relacionados com Microsoft.Resources.
ResourceContainers Yes Inclui tipos de recursos e dados do grupo de gerenciamento (Microsoft.Management/managementGroups), da assinatura (Microsoft.Resources/subscriptions) e do grupo de recursos (Microsoft.Resources/subscriptions/resourcegroups).
Resources Yes A tabela padrão se uma tabela não estiver definida na consulta. A maioria dos tipos de recursos e propriedades do Resource Manager estão aqui.
SecurityResources Yes Inclui recursos relacionados com Microsoft.Security.
ServiceFabricResources Yes Inclui recursos relacionados com Microsoft.ServiceFabric.
ServiceHealthResources Yes Inclui recursos relacionados com Microsoft.ResourceHealth/events.
SpotResources Yes Inclui recursos relacionados com Microsoft.Compute.
SupportResources Yes Inclui recursos relacionados com Microsoft.Support.
TagsResources Yes Inclui recursos relacionados com Microsoft.Resources/tagnamespaces.

Para obter uma lista de tabelas que inclui tipos de recursos, vá para Tabela do Gráfico de Recursos do Azure e referência de tipo de recurso.

Note

Resources é a tabela padrão. Ao consultar a Resources tabela, não é necessário fornecer o nome da tabela, a menos que join ou union sejam usados. Mas a prática recomendada é sempre incluir a tabela inicial na consulta.

Para descobrir quais tipos de recursos estão disponíveis em cada tabela, use o Resource Graph Explorer no portal. Como alternativa, use uma consulta como <tableName> | distinct type para obter uma lista de tipos de recursos suportados pela tabela do Gráfico de Recursos que existem em seu ambiente.

A consulta a seguir mostra um arquivo join. O resultado da consulta mistura as colunas e quaisquer nomes duplicados das colunas da tabela unida, ResourceContainers neste exemplo, são acrescentados a 1. Como a tabela ResourceContainers tem tipos tanto para subscrições como para grupos de recursos, qualquer um dos tipos pode ser usado para se juntar ao recurso a partir da Resources tabela.

Resources
| join ResourceContainers on subscriptionId
| limit 1

A consulta a seguir mostra um uso mais complexo do join. Primeiro, a consulta usa project para obter os campos do tipo de recurso Cofre da Resources Chave do Azure. O passo seguinte utiliza join a fusão dos resultados com os ResourceContainers , onde o tipo é uma subscrição numa propriedade que está tanto na primeira tabela project como na tabela projectunida. A renomeação do campo evita join adicioná-lo como name1 , pois a propriedade já é projetada a partir de Resources. O resultado da consulta é um cofre de chave única exibindo o tipo, o nome, o local e o grupo de recursos do cofre de chaves, juntamente com o nome da assinatura em que ele está.

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

Ao limitar os join resultados com project, a propriedade usada por join para relacionar as duas tabelas, subscriptionId no exemplo acima, deve ser incluída em project.

Propriedades estendidas

Como funcionalidade de pré-visualização , alguns dos tipos de recursos no Resource Graph têm mais propriedades relacionadas com tipos disponíveis para consultar para além das propriedades fornecidas pelo Azure Resource Manager. Este conjunto de valores, conhecido como propriedades estendidas, existe num tipo de recurso suportado em properties.extended. Para mostrar tipos de recursos com propriedades estendidas, use a seguinte consulta:

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

Exemplo: Obter contagem de máquinas virtuais por instanceView.powerState.code:

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

Elementos de linguagem personalizados do Gráfico de Recursos

Sintaxe de consulta compartilhada (visualização)

Como funcionalidade de pré-visualização, uma consulta partilhada pode ser acedida diretamente numa consulta de Grafo de Recursos. Esse cenário torna possível criar consultas padrão como consultas compartilhadas e reutilizá-las. Para chamar uma consulta compartilhada dentro de uma consulta do Gráfico de Recursos, use a {{shared-query-uri}} sintaxe. O URI da consulta partilhada é o ID de Recurso da consulta partilhada na página de Definições dessa consulta. Neste exemplo, nosso URI de consulta compartilhada é /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS. Esse URI aponta para a assinatura, o grupo de recursos e o nome completo da consulta compartilhada que queremos referenciar em outra consulta. Esta consulta é a mesma criada em Tutorial: Criar e partilhar uma consulta.

Note

Não é possível salvar uma consulta que faça referência a uma consulta compartilhada como uma consulta compartilhada.

Exemplo 1: Use apenas a consulta compartilhada:

Os resultados desta consulta do Gráfico de Recursos são os mesmos que a consulta armazenada na consulta compartilhada.

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

Exemplo 2: Inclua a consulta compartilhada como parte de uma consulta maior:

Essa consulta primeiro usa a consulta compartilhada e, em seguida, usa limit para restringir ainda mais os resultados.

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

Elementos de linguagem KQL suportados

O Resource Graph suporta um subconjunto de tipos de dados KQL, funções escalares, operadores escalares e funções de agregação. Operadores tabulares específicos são suportados pelo Resource Graph, alguns dos quais apresentam comportamentos diferentes.

Operadores tabulares/de nível superior suportados

Aqui está a lista de operadores tabulares KQL suportados pelo Resource Graph com exemplos específicos:

KQL Consulta de exemplo do Gráfico de Recursos Notes
count Contar cofres de chaves
distinct Mostrar recursos que contêm armazenamento
extend Contar máquinas virtuais por tipo de SO
join Cofre de chaves com nome de subscrição Junte-se sabores suportados: innerunique, inner, leftouter e fullouter. Limite de três join ou union operações (ou uma combinação das duas) numa única consulta, contadas em conjunto, uma das quais pode ser uma junção entre tabelas. Se todo o uso de cross-table join for entre Resource e ResourceContainers, então três join cross-tables são permitidos. Estratégias de associação personalizadas, como associação de transmissão, não são permitidas. Para quais tabelas podem usar join, vá para Tabelas do Gráfico de Recursos.
limit Listar todos os endereços IP públicos Sinónimo de take. Não funciona com o Skip.
mvexpand Operador legado, use mv-expand em vez disso. Limite de linha máximo de 2.000. O padrão é 128.
mv-expand Listar o Azure Cosmos DB com locais de gravação específicos Limite de linha máximo de 2.000. O padrão é 128. Limite de 3 mv-expand em uma única consulta.
order Listar recursos ordenados por nome Sinónimo de sort
parse Obter redes virtuais e sub-redes de interfaces de rede É ideal acessar as propriedades diretamente se elas existirem, em vez de usar parseo .
project Listar recursos ordenados por nome
project-away Remover colunas dos resultados
sort Listar recursos ordenados por nome Sinónimo de order
summarize Contar recursos do Azure Apenas primeira página simplificada
take Listar todos os endereços IP públicos Sinónimo de limit. Não funciona com o Skip.
top Mostrar as primeiras cinco máquinas virtuais por nome e por tipo de SO
union Combinar resultados de duas consultas em um único resultado Mesa única permitida: | union [kind= inner|outer] [withsource=ColumnName] Table. Limite de três union pernas em uma única consulta. Não é permitida a resolução difusa de mesas de union perna. Podem ser usados dentro de uma única tabela ou entre as tabelas de Recursos e ResourceContainers .
where Mostrar recursos que contêm armazenamento

Há um limite padrão de três join e três mv-expand operadores em uma única consulta do SDK do Resource Graph. Pode solicitar um aumento destes limites para o seu inquilino através da Ajuda + suporte.

Para suportar a experiência do portal Open Consult , o Azure Resource Graph Explorer tem um limite global mais elevado do que o Resource Graph SDK.

Note

Não é possível fazer referência a uma tabela como tabela correta várias vezes, o que excede o limite de 1. Se você fizer isso, você receberá um erro com o código DisallowedMaxNumberOfRemoteTables.

Escopo da consulta

O âmbito das subscrições ou grupos de gestão dos quais os recursos são devolvidos por uma consulta passa por defeito a uma lista de subscrições com base no contexto do utilizador autorizado. Se não estiver definido um grupo de gestão ou uma lista de subscrições, o âmbito da consulta inclui todos os recursos e inclui recursos delegados pelo Azure Lighthouse .

A lista de assinaturas ou grupos de gerenciamento a serem consultados pode ser definida manualmente para alterar o escopo dos resultados. Por exemplo, a propriedade REST API managementGroups usa a ID do grupo de gerenciamento, que é diferente do nome do grupo de gerenciamento. Quando managementGroups especificado, os recursos das primeiras 10.000 assinaturas na hierarquia de grupo de gerenciamento especificada ou sob ela são incluídos. managementGroups não pode ser usado ao mesmo tempo que subscriptionso .

Exemplo: Consultar todos os recursos dentro da hierarquia do grupo de gerenciamento nomeado My Management Group com ID myMG.

  • URI da API REST

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • Órgão do Pedido

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

O AuthorizationScopeFilter parâmetro permite listar atribuições de Política do Azure e atribuições de função de controle de acesso baseado em função do Azure (Azure RBAC) na AuthorizationResources tabela que são herdadas de escopos superiores. O AuthorizationScopeFilter parâmetro aceita os seguintes valores para as PolicyResources tabelas e AuthorizationResources :

  • AtScopeAndBelow (padrão se não especificado): Devolve as atribuições para o âmbito dado e para todos os escopos filhos.
  • AtScopeAndAbove: Devolve atribuições para o âmbito dado e para todos os escopos pais, mas não para os filhos.
  • AtScopeAboveAndBelow: Devolve atribuições para o âmbito dado, todos os escopos pais e todos os escopos filhos.
  • AtScopeExact: Retorna atribuições apenas para o âmbito dado; Não estão incluídos os endoscopos parentais ou filhos.

Note

Para usar o AuthorizationScopeFilter parâmetro, certifique-se de usar a versão 2021-06-01-preview ou a versão posterior da API nos seus pedidos.

Exemplo: Obtenha todas as atribuições de políticas no grupo de gestão myMG e nos escopos Tenant Root (pai).

  • URI da API REST

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Solicitar amostra do corpo

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

Exemplo: Obtenha todas as atribuições de políticas na subscrição mySubscriptionId , grupo de gestão e escopos Tenant Root.

  • URI da API REST

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Solicitar amostra do corpo

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

Personagens de fuga

Alguns nomes de propriedade, como aqueles que incluem um . ou $, devem ser encapsulados ou escapados na consulta ou o nome da propriedade é interpretado incorretamente e não fornece os resultados esperados.

  • Ponto (.): Envolva o nome ['propertyname.withaperiod'] da propriedade usando colchetes.

    Exemplo de consulta que envolve a propriedade odata.type:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • Cifrão ($): Fuja do caractere no nome da propriedade. O caractere de escape usado depende do shell que executa o Resource Graph.

    • Bash: Use uma barra inversa (\) como personagem de fuga.

      Exemplo de consulta que escapa da propriedade $type no Bash:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd: Não escapes à personagem do cifrão ().$

    • PowerShell: Use um backtick (`) como personagem de escape.

      Exemplo de consulta que escapa da propriedade $type no PowerShell:

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

Próximos passos