Compartilhar via


Exemplos de consultas iniciais do Resource Graph

A primeira etapa para consultas de reconhecimento com o Microsoft Azure Resource Graph é uma compreensão básica da Linguagem de Consulta. Se você ainda não estiver familiarizado com o KQL (Kusto Query Language), recomendamos examinar o tutorial do KQL para entender como compor solicitações para os recursos que você está procurando.

Este artigo usa as consultas iniciais a seguir:

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Suporte ao idioma

A CLI do Azure (por meio de uma extensão) e o Azure PowerShell (por meio de um módulo) suportam o Gráfico de Recursos do Azure. Antes de executar qualquer uma das consultas a seguir, verifique se seu ambiente está preparado. Veja CLI do Azure e Azure PowerShell para obter as etapas instalar e validar o ambiente shell de escolha.

Contar recursos do Azure

Essa consulta retorna o número de recursos do Azure que existem nas assinaturas que você tem acesso. Também é uma boa consulta para validar se o shell de escolha tem os componentes apropriados do Azure Resource Graph instalados e em funcionamento.

Resources
| summarize count()

Por padrão, a CLI do Azure consulta todas as assinaturas acessíveis, mas você pode especificar o parâmetro --subscriptions para consultar assinaturas específicas.

az graph query -q "Resources | summarize count()"

Este exemplo usa uma variável para a ID da assinatura.

subid=$(az account show --query id --output tsv)
az graph query -q "Resources | summarize count()" --subscriptions $subid

Você também pode consultar pelos escopos para grupo de gerenciamento e locatário. Substitua <managementGroupId> e <tenantId> por seus valores.

az graph query -q "Resources | summarize count()" --management-groups '<managementGroupId>'
az graph query -q "Resources | summarize count()" --management-groups '<tenantId>'

Você também pode usar uma variável para a ID do locatário.

tenantid=$(az account show --query tenantId --output tsv)
az graph query -q "Resources | summarize count()" --management-groups $tenantid

Contagem de recursos do Key Vault

Essa consulta usa count em vez de summarize para contar o número de registros retornados. Somente os cofres de chaves são incluídos na contagem.

Resources
| where type =~ 'microsoft.keyvault/vaults'
| count
az graph query -q "Resources | where type =~ 'microsoft.keyvault/vaults' | count"

Listar recursos classificados por nome

Essa consulta retorna todo tipo de recurso, mas apenas as propriedades name, type e location. Ele usa order by para classificar as propriedades pela propriedade name em ordem crescente (asc).

Resources
| project name, type, location
| order by name asc
az graph query -q "Resources | project name, type, location | order by name asc"

Mostrar todas as máquinas virtuais ordenadas por nome em ordem decrescente

Para listar somente as máquinas virtuais (que são do tipo Microsoft.Compute/virtualMachines), podemos fazer a correspondência com a propriedade type nos resultados. Semelhante à consulta anterior, desc alterações a order by devem estar em ordem decrescente. O =~ no tipo de correspondência informa ao Microsoft Azure Active Directory Graph para diferenciar maiusculas e minúsculas.

Resources
| project name, location, type
| where type =~ 'Microsoft.Compute/virtualMachines'
| order by name desc
az graph query -q "Resources | project name, location, type| where type =~ 'Microsoft.Compute/virtualMachines' | order by name desc"

Mostrar as cinco primeiras máquinas virtuais por nome e tipo de sistema operacional

Essa consulta usará top para recuperar apenas cinco registros correspondentes ordenados por nome. O tipo de recurso do Azure é Microsoft.Compute/virtualMachines. project informa quais propriedades do Gráfico de Recurso do Azure incluir.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, properties.storageProfile.osDisk.osType
| top 5 by name desc
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project name, properties.storageProfile.osDisk.osType | top 5 by name desc"

Contar máquinas virtuais por tipo de sistema operacional

Aproveitando a consulta anterior, estamos ainda limitando pelos recursos do Azure do tipo Microsoft.Compute/virtualMachines, mas não limitando o número de registros retornados. Em vez disso, usamos summarize e count() para definir como agrupar e agregar os valores de propriedade, que neste exemplo é properties.storageProfile.osDisk.osType. Para obter um exemplo da aparência dessa cadeia de caracteres no objeto completo, consulte Explorar recursos - descoberta de máquina virtual.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| summarize count() by tostring(properties.storageProfile.osDisk.osType)
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | summarize count() by tostring(properties.storageProfile.osDisk.osType)"

Outra maneira de escrever a mesma consulta é extend uma propriedade e dê a ele um nome temporário para uso dentro da consulta, nesse caso sistema operacional. O sistema operacional então é usado para summarize e count() como no exemplo anterior.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| extend os = properties.storageProfile.osDisk.osType
| summarize count() by tostring(os)
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | extend os = properties.storageProfile.osDisk.osType | summarize count() by tostring(os)"

Observação

Lembre-se que, embora =~ permite o uso de correspondência, diferencia maiusculas de minúsculas de propriedades (como properties.storageProfile.osDisk.osType) na consulta exigem que o caso esteja correto. Se a propriedade for o caso incorreto, um valor nulo ou incorreto será retornado, e o agrupamento ou resumo ficará incorreto.

Mostrar recursos que contêm armazenamento

Em vez de definir explicitamente o tipo a ser correspondido, este exemplo de consulta encontra qualquer recurso do Azure que contains a palavra armazenamento.

Resources
| where type contains 'storage' | distinct type
az graph query -q "Resources | where type contains 'storage' | distinct type"

Listar todas as sub-redes de rede virtual do Azure

Essa consulta retorna uma lista de VNets (redes virtuais) do Azure, incluindo nomes de sub-rede e prefixos de endereço.

Resources
| where type == 'microsoft.network/virtualnetworks'
| extend subnets = properties.subnets
| mv-expand subnets
| project name, subnets.name, subnets.properties.addressPrefix, location, resourceGroup, subscriptionId
az graph query -q "Resources | where type == 'microsoft.network/virtualnetworks' | extend subnets = properties.subnets | mv-expand subnets | project name, subnets.name, subnets.properties.addressPrefix, location, resourceGroup, subscriptionId"

Listar todos os endereços IP públicos

Semelhante à consulta anterior, encontre tudo o que seja um tipo que contenha a palavra publicIPAddresses. Essa consulta expande esse padrão para incluir apenas resultados com properties.ipAddressisnotempty, retornando apenas o properties.ipAddress e para limitos resultados de acordo com os 100 principais. Você talvez precise escapar as cotas dependendo do seu shell escolhido.

Resources
| where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress)
| project properties.ipAddress
| limit 100
az graph query -q "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | project properties.ipAddress | limit 100"

Contar recursos que têm endereços IP configurados por assinatura

Usando a consulta de exemplo anterior e adicionando summarize e count(), obtemos uma lista por assinatura de recursos com endereços IP configurados.

Resources
| where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress)
| summarize count () by subscriptionId
az graph query -q "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId"

Listar recursos com um valor de marca específico

É possível limitar os resultados por propriedades que não seja o tipo de recurso do Azure, como uma marca. Neste exemplo, estamos filtrando por recursos do Azure com o nome de marca de Ambiente que tenha um valor de Interno.

Resources
| where tags.environment=~'internal'
| project name
az graph query -q "Resources | where tags.environment=~'internal' | project name"

Para fornecer também quais marcas o recurso tem e seus valores, adicione a propriedade tags à palavra-chave project.

Resources
| where tags.environment=~'internal'
| project name, tags
az graph query -q "Resources | where tags.environment=~'internal' | project name, tags"

Listar todas as contas de armazenamento com um valor de marca específico

Combine a funcionalidade de filtro do exemplo anterior e filtre o tipo de recurso do Azure pela propriedade type. Essa consulta também limita a nossa pesquisa por tipos específicos de recursos do Azure com um valor e nome de marca específicos.

Resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| where tags['tag with a space']=='Custom value'
az graph query -q "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where tags['tag with a space']=='Custom value'"

Observação

Este exemplo usa == para a correspondência em vez do =~ condicional. == é uma correspondência que diferencia maiusculas de minúsculas.

Listar todas as marcas e os respectivos valores

Essa consulta lista as marcas em grupos de gerenciamento, assinaturas e recursos, junto com os respectivos valores. A consulta primeiro limita os recursos em que as marcas isnotempty(), limita os campos incluídos incluindo apenas marcas no project e mvexpand e extend para obter os dados emparelhados do recipiente de propriedades. Depois, ela usa union para combinar os resultados de ResourceContainers com os mesmos resultados de Resources, proporcionando ampla cobertura para quais marcas são buscadas. Por fim, ela limita os resultados aos dados emparelhados distinct e exclui as marcas ocultas do sistema.

ResourceContainers
| where isnotempty(tags)
| project tags
| mvexpand tags
| extend tagKey = tostring(bag_keys(tags)[0])
| extend tagValue = tostring(tags[tagKey])
| union (
    resources
    | where isnotempty(tags)
    | project tags
    | mvexpand tags
    | extend tagKey = tostring(bag_keys(tags)[0])
    | extend tagValue = tostring(tags[tagKey])
)
| distinct tagKey, tagValue
| where tagKey !startswith "hidden-"
az graph query -q "ResourceContainers | where isnotempty(tags) | project tags | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) | union (resources | where notempty(tags) | project tags | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) ) | distinct tagKey, tagValue | where tagKey !startswith "hidden-""

Mostrar grupos de segurança de rede não associados

Essa consulta retorna NSGs (grupos de segurança de rede) que não estão associados a uma sub-rede ou adaptador de rede.

Resources
| where type =~ "microsoft.network/networksecuritygroups" and isnull(properties.networkInterfaces) and isnull(properties.subnets)
| project name, resourceGroup
| sort by name asc
az graph query -q "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc"

Listar alertas do Azure Monitor ordenados por gravidade

Essa consulta usa a tabela alertsmanagementresources para retornar alertas do Azure Monitor ordenados por gravidade.

alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity)
| summarize AlertsCount = count() by Severity
az graph query -q "alertsmanagementresources | where type =~ 'microsoft.alertsmanagement/alerts' | where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now() | project Severity = tostring(properties.essentials.severity) | summarize AlertsCount = count() by Severity"

Listar alertas do Azure Monitor ordenados por gravidade e estado de alerta

Essa consulta usa a tabela alertsmanagementresources para retornar alertas do Azure Monitor ordenados por gravidade e por estado de alerta.

alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity), AlertState = tostring(properties.essentials.alertState)
| summarize AlertsCount = count() by Severity, AlertState
az graph query -q "alertsmanagementresources | where type =~ 'microsoft.alertsmanagement/alerts' | where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now() | project Severity = tostring(properties.essentials.severity), AlertState = tostring(properties.essentials.alertState) | summarize AlertsCount = count() by Severity, AlertState"

Listar alertas do Azure Monitor ordenados por gravidade, serviço de monitoramento e tipo de recurso de destino

Essa consulta usa a tabela alertsmanagementresources para retornar alertas do Azure Monitor ordenados por gravidade, serviço de monitoramento e tipo de recurso de destino.

alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity),
MonitorCondition = tostring(properties.essentials.monitorCondition),
ObjectState = tostring(properties.essentials.alertState),
MonitorService = tostring(properties.essentials.monitorService),
AlertRuleId = tostring(properties.essentials.alertRule),
SignalType = tostring(properties.essentials.signalType),
TargetResource = tostring(properties.essentials.targetResourceName),
TargetResourceType = tostring(properties.essentials.targetResourceName), id
| summarize AlertsCount = count() by Severity, MonitorService , TargetResourceType
az graph query -q "alertsmanagementresources | where type =~ 'microsoft.alertsmanagement/alerts' | where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now() | project Severity = tostring(properties.essentials.severity), MonitorCondition = tostring(properties.essentials.monitorCondition), ObjectState = tostring(properties.essentials.alertState), MonitorService = tostring(properties.essentials.monitorService), AlertRuleId = tostring(properties.essentials.alertRule), SignalType = tostring(properties.essentials.signalType), TargetResource = tostring(properties.essentials.targetResourceName), TargetResourceType = tostring(properties.essentials.targetResourceName), id | summarize AlertsCount = count() by Severity, MonitorService , TargetResourceType"

Próximas etapas