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:
- Recursos do Count Azure
- Contagem de recursos do Key Vault
- Listar recursos classificados por nome
- Mostrar todas as máquinas virtuais, ordenadas por nome em ordem decrescente
- Mostrar as primeiras cinco máquinas virtuais por nome e tipo do sistema operacional
- Contagem de máquinas virtuais por tipo de sistema operacional
- Mostrar recursos que contêm o armazenamento
- Liste todas as sub-redes da rede virtual do Azure
- Listar todos os endereços de IP
- Recursos de contagem que têm endereços IP configurados por assinatura
- Listar de recursos com um valor de marca específica
- Listar todas as contas de armazenamento com o valor de marca específica
- Listar todas as marcas e os respectivos valores
- Mostrar grupos de segurança de rede não associados
- Listar alertas do Azure Monitor ordenados por gravidade
- Listar alertas do Azure Monitor ordenados por gravidade e estado de alerta
- Lista de alertas do Azure Monitor ordenados por gravidade, serviço de monitoramento e tipo de recurso de destino
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. Obrigado a Saul Dolgin pela contribuiçã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 limit
os resultados de acordo com os 100 principais.
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
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
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
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
- Saiba mais sobre a linguagem de consulta.
- Saiba mais sobre como explorar recursos.
- Veja exemplos de Consultas avançadas.