Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Язык запросов для Azure Resource Graph поддерживает множество операторов и функций. Каждый из них работает так же, как элементы языка запросов Kusto (KQL). Чтобы ознакомиться с языком запросов, используемом в Resource Graph, начните с учебника по KQL.
В этой статье рассматриваются компоненты языка, поддерживаемые Resource Graph:
Таблицы Resource Graph
Resource Graph предоставляет несколько таблиц для хранения данных по типам ресурсов Azure Resource Manager и их свойствам. Таблицы Resource Graph можно использовать с оператором join для получения свойств из связанных типов ресурсов.
Таблицы Graph ресурсов поддерживают join вкусы:
| Таблица Resource Graph | Может ли join к другим таблицам? |
Description |
|---|---|---|
| AdvisorResources | Yes | Включает ресурсы, связанные с Microsoft.Advisor. |
| AlertsManagementResources | Yes | Включает ресурсы, связанные с Microsoft.AlertsManagement. |
| AppServiceResources | Yes | Включает ресурсы, связанные с Microsoft.Web. |
| AuthorizationResources | Yes | Включает ресурсы, связанные с Microsoft.Authorization. |
| AWSResources | Yes | Включает ресурсы, связанные с Microsoft.AwsConnector. |
| AzureBusinessContinuityResources | Yes | Включает ресурсы, связанные с Microsoft.AzureBusinessContinuity. |
| ChaosResources | Yes | Включает ресурсы, связанные с Microsoft.Chaos. |
| CommunityGalleryResources | Yes | Включает ресурсы, связанные с Microsoft.Compute. |
| ComputeResources | Yes | Включает ресурсы, связанные с Microsoft.Compute Масштабируемые наборы виртуальных машин. |
| DesktopVirtualizationResources | Yes | Включает ресурсы, связанные с Microsoft.DesktopVirtualization. |
| DnsResources | Yes | Включает ресурсы, связанные с Microsoft.Network. |
| EdgeOrderResources | Yes | Включает ресурсы, связанные с Microsoft.EdgeOrder. |
| ElasticsanResources | Yes | Включает ресурсы, связанные с Microsoft.ElasticSan. |
| ExtendedLocationResources | Yes | Включает ресурсы, связанные с Microsoft.ExtendedLocation. |
| FeatureResources | Yes | Включает ресурсы, связанные с Microsoft.Features. |
| GuestConfigurationResources | Yes | Включает ресурсы, связанные с Microsoft.GuestConfiguration. |
| HealthResourceChanges | Yes | Включает ресурсы, связанные с Microsoft.Resources. |
| HealthResources | Yes | Включает ресурсы, связанные с Microsoft.ResourceHealth. |
| InsightsResources | Yes | Включает ресурсы, связанные с Microsoft.Insights. |
| IoTSecurityResources | Yes | Включает ресурсы, связанные с Microsoft.IoTSecurity и Microsoft.IoTFirmwareDefense. |
| KubernetesConfigurationResources | Yes | Включает ресурсы, связанные с Microsoft.KubernetesConfiguration. |
| KustoResources | Yes | Включает ресурсы, связанные с Microsoft.Kusto. |
| MaintenanceResources | Yes | Включает ресурсы, связанные с Microsoft.Maintenance. |
| ManagedServicesResources | Yes | Включает ресурсы, связанные с Microsoft.ManagedServices. |
| MigrateResources | Yes | Включает ресурсы, связанные с Microsoft.OffAzure. |
| NetworkResources | Yes | Включает ресурсы, связанные с Microsoft.Network. |
| PatchAssessmentResources | Yes | Включает ресурсы, связанные с оценкой Microsoft.Compute патчей Виртуальные машины Azure и Microsoft.HybridCompute. |
| PatchInstallationResources | Yes | Включает ресурсы, связанные с установкой Microsoft.Compute патчей Виртуальные машины Azure и Microsoft.HybridCompute. |
| PolicyResources | Yes | Включает ресурсы, связанные с Microsoft.PolicyInsights. |
| RecoveryServicesResources | Yes | Включает ресурсы, связанные с Microsoft.DataProtection и Microsoft.RecoveryServices. |
| ResourceChanges | Yes | Включает ресурсы, связанные с Microsoft.Resources. |
| ResourceContainerChanges | Yes | Включает ресурсы, связанные с Microsoft.Resources. |
| ResourceContainers | Yes | Включает типы ресурсов и данные группы управления (Microsoft.Management/managementGroups), подписки (Microsoft.Resources/subscriptions) и группы ресурсов (Microsoft.Resources/subscriptions/resourcegroups). |
| Resources | Yes | Таблица по умолчанию, если таблица не определена в запросе. В ней содержится большинство типов ресурсов Resource Manager и их свойств. |
| SecurityResources | Yes | Включает ресурсы, связанные с Microsoft.Security. |
| ServiceFabricResources | Yes | Включает ресурсы, связанные с Microsoft.ServiceFabric. |
| ServiceHealthResources | Yes | Включает ресурсы, связанные с Microsoft.ResourceHealth/events. |
| SpotResources | Yes | Включает ресурсы, связанные с Microsoft.Compute. |
| SupportResources | Yes | Включает ресурсы, связанные с Microsoft.Support. |
| TagsResources | Yes | Включает ресурсы, связанные с Microsoft.Resources/tagnamespaces. |
Список таблиц, включающих типы ресурсов, перейдите в таблицу Azure Resource Graph и ссылку на тип ресурса.
Note
Resources — это таблица по умолчанию. При запросе Resources таблицы не требуется указать имя таблицы, если join не используется или union не используется. Но рекомендуется всегда включать начальную таблицу в запрос.
Чтобы узнать, какие типы ресурсов доступны в каждой таблице, используйте обозреватель Resource Graph на портале. В качестве альтернативы можно использовать такой запрос, как <tableName> | distinct type, чтобы получить список имеющихся в среде типов ресурсов, которые поддерживаются данной таблицей Resource Graph.
В приведенном ниже запросе показана простая операция join. Результат запроса объединяет столбцы, и любые дублирующиеся имена столбцов из объединённой таблицы, ResourceContainers в данном примере, добавляются 1. Поскольку таблица ResourceContainers содержит типы как для подписок, так и для групп ресурсов, любой из типов может использоваться для присоединения к ресурсу из Resources таблицы.
Resources
| join ResourceContainers on subscriptionId
| limit 1
В приведенном ниже запросе показано более сложное использование join. Во-первых, запрос используется project для получения полей из Resources типа ресурса Хранилища ключей Azure. Следующий шаг использует join слияние результатов с ResourceContainers , где тип является подпиской на свойство, которое находится как в project первой таблице, так и в объединённой таблице project. Переименование поля избегает join добавления его как name1 , поскольку свойство уже проецируется из Resources. Результатом запроса является хранилище ключей, которое представляет тип, название, местоположение и группу ресурсов хранилища, а также название подписки.
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
При ограничении join результатов project, свойство, используемое join для связи двух таблиц, subscriptionId в приведённом выше примере, должно быть включено в project.
Расширенные свойства
В качестве функции предварительного просмотра некоторые типы ресурсов в Resource Graph имеют больше типовых свойств, доступных для запроса, помимо свойств, предоставляемых Azure Resource Manager. Этот набор значений, известный как расширенные свойства, существует на поддерживаемом типе ресурса в properties.extended. Чтобы показать типы ресурсов с расширенными свойствами, используйте следующий запрос:
Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc
Пример: получить количество виртуальных машин по instanceView.powerState.code:
Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
пользовательские элементы языка Resource Graph
Синтаксис общего запроса (Предварительная версия)
В качестве функции предварительного просмотра общий запрос можно получить напрямую в запросе Resource Graph. Этот сценарий позволяет создавать стандартные запросы в виде общих и использовать их повторно. Чтобы вызвать общий запрос в рамках запроса Resource Graph, используйте синтаксис {{shared-query-uri}}. URI общего запроса — это идентификатор ресурса общего запроса на странице настроек для этого запроса. В этом примере наш URI общего запроса — /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS.
Этот URI указывает на подписку, группу ресурсов и полное имя общего запроса, на который мы хотим ссылаться в другом запросе. Этот запрос совпадает с запросом, который был создан в Руководстве по созданию запроса и предоставлению общего доступа к нему.
Note
Нельзя сохранить запрос, который ссылается на общий запрос в виде общего запроса.
Пример 1. Используйте только общий запрос:
Результаты этого запроса Resource Graph совпадают с результатами запроса, хранящегося в общем запросе.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
Пример 2. Включение общего запроса в состав более крупного запроса:
Сначала этот запрос использует общий запрос, а затем использует limit для ограничения результатов.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'
Поддерживаемые элементы языка KQL
Граф ресурсов поддерживает подмножество типов данных KQL, скалярных функций, скалярных операторов и функций агрегации. Определённые табличные операторы поддерживаются графом ресурсов, некоторые из которых имеют разное поведение.
Поддерживаемые табличные операторы и операторы верхнего уровня
Ниже приведен список табличных операторов KQL, поддерживаемых Resource Graph с определенными примерами:
| KQL | Пример запроса Resource Graph | Notes |
|---|---|---|
| count | Число хранилищ ключей | |
| distinct | Отображение ресурсов, которые содержат хранилище | |
| extend | Подсчет виртуальных машин по типу ОС | |
| join | Хранилище ключей с именем подписки | Присоединяйтесь к поддерживаемым вкусам: innerunique, inner, leftouter и fullouter. Ограничение на три операции с join или union (или их комбинацию) в одном запросе, считающиеся вместе, при этом одна из них может быть перекрестным соединением таблиц. Если всё кросс-таблицное join использование происходит между Resource и ResourceContainers, то разрешено три кросс-таблицы join . Пользовательские стратегии соединения, такие как широковещательное соединение, не допускаются. Для каких таблиц можно использовать join, перейдите к таблицам Resource Graph. |
| limit | Вывод списка общедоступных IP-адресов | Синоним take. С Скипом это не работает. |
| mvexpand | Устаревший оператор, используйте вместо него mv-expand.
Максимальный лимит ряда — 2 000. Значение по умолчанию — 128. |
|
| mv-expand | Вывод списка Azure Cosmos DB с определенными расположениями записи |
Максимальный лимит ряда — 2 000. Значение по умолчанию — 128. Не более 3 mv-expand в одном запросе. |
| order | Вывод списка ресурсов, отсортированных по имени | Синоним sort |
| parse | Получение виртуальных сетей и подсетей сетевых интерфейсов | Доступ к свойствам рекомендуется осуществлять напрямую, если они существуют, а не с помощью parse. |
| project | Вывод списка ресурсов, отсортированных по имени | |
| project-away | Удаление столбцов из результатов | |
| sort | Вывод списка ресурсов, отсортированных по имени | Синоним order |
| summarize | Подсчет ресурсов Azure | Только первая упрощенная страница |
| take | Вывод списка общедоступных IP-адресов | Синоним limit. С Скипом это не работает. |
| top | Отображение первых пяти виртуальных машин по имени и типу ОС | |
| union | Объединение результатов из двух запросов в один результат | Разрешена одна таблица: | union [kind= inner|outer] [withsource=ColumnName] Table. Ограничение на три union ноги в одном запросе. Нечеткое разрешение таблиц разветвлений union не допускается. Может использоваться внутри одной таблицы или между таблицами Resources и ResourceContainers . |
| where | Отображение ресурсов, которые содержат хранилище |
Ограничение по умолчанию — три join и три mv-expand оператора в одном запросе пакета SDK для Resource Graph. Чтобы увеличить эти ограничения для своего клиента, выберите Справка + поддержка.
Для поддержки работы с порталом Open Query Azure Resource Graph Explorer имеет более высокий глобальный лимит, чем Resource Graph SDK.
Note
Вы не можете ссылаться на таблицу в виде правой таблицы несколько раз, что превышает ограничение 1. При этом вы получите ошибку с кодом DisallowedMaxNumberOfRemoteTables.
Область запроса
Область подписок или групп управления , из которых ресурсы возвращаются по запросу, по умолчанию сводится к списку подписок на основе контекста уполномоченного пользователя. Если группа управления или список подписок не определены, область запроса — это все ресурсы и делегированные ресурсы Azure Lighthouse .
Список подписок или групп управления для запроса может быть определен вручную для изменения области результатов. Например, свойство managementGroups REST API принимает идентификатор группы управления, который отличается от названия группы управления. При managementGroups указании включены ресурсы из первых 10 000 подписок в указанной иерархии групп управления или в ней.
managementGroups нельзя использовать в то же время, что и subscriptions.
Пример. Запрос всех ресурсов в иерархии группы управления с My Management Group идентификатором myMG.
Универсальный код ресурса (URI) REST API
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01Тело запроса
{ "query": "Resources | summarize count()", "managementGroups": ["myMG"] }
Этот AuthorizationScopeFilter параметр позволяет перечислять Политика Azure назначения и назначения ролей на основе ролей Azure (Azure RBAC) в AuthorizationResources таблице, унаследованной от верхних областей. Параметр AuthorizationScopeFilter принимает следующие значения для PolicyResources таблиц и AuthorizationResources таблиц:
- AtScopeAndBelow (по умолчанию, если не указано): Возвращает назначения для данной области области и всех дочерних областей.
- AtScopeAndAbove: Возвращает назначения для данной области и всех родительских областей, но не для дочерних областей.
- AtScopeAboveAndBelow: Возвращает назначения для данной области, всех родительских областей и всех дочерних областей.
- AtScopeExact: Возвращает присваивания только для данной области; Не включены родительские или детские прицелы.
Note
Чтобы использовать этот AuthorizationScopeFilter параметр, обязательно используйте версию API 2021-06-01-preview или более позднюю версию в ваших запросах.
Пример: Получите все назначения полисов в управленческой группе myMG и Tenant Root (родительских) сферах.
Универсальный код ресурса (URI) REST API
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-previewПример текста запроса
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "managementGroups": ["myMG"] }
Пример: Получите все назначения политик в подписке mySubscriptionId , группе управления и корневом диапазоне арендаторов.
Универсальный код ресурса (URI) REST API
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-previewПример текста запроса
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "subscriptions": ["mySubscriptionId"] }
Escape-символы
Некоторые имена свойств, например включающие в себя . или $, должны заключаться в оболочку или экранироваться в запросе, иначе они будут интерпретироваться неправильно и давать непредвиденные результаты.
Точка (
.): заключите имя['propertyname.withaperiod']свойства с помощью квадратных скобок.Пример запроса, который обворачивает свойство odata.type:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']Знак доллара (
$): экранируйте символ в имени свойства. Используемый escape-символ зависит от оболочки, которая запускает Resource Graph.Удар: Используйте обратную черту (
\) в качестве персонажа для побега.Пример запроса, который избегает свойства $type в Bash:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$typecmd: Не уходите от символа доллара (
$) персонажа.PowerShell: Используйте backtick (
`) в качестве персонажа для побега.Пример запроса, который избегает свойства $type в PowerShell:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
Функции оценки разрешений RBAC в Azure Resource Graph
Azure Resource Graph (ARG) предоставляет две функции, позволяющие оценить, имеет ли удостоверение запроса current querying identity имеет определенные разрешения для отдельных ресурсов:
hasPermission()hasDataPermission()
Эти функции возвращают логическое значение (1 или 0) для каждого ресурса и обеспечивают такие сценарии, как фильтрация или сводка ресурсов на основе доступа.
Note
Эти функции оцениваются в контексте экземпляра ресурса и эффективных назначений RBAC. Они не работают напрямую с определениями ролей.
hasPermission()
Функция hasPermission() оценивает, имеет ли запрашивающее удостоверение определенное разрешение на плоскость управления для ресурса.
Используйте следующий формат:hasPermission()
hasPermission('<permission-string>')
Функция hasPermission() использует эффективные назначения RBAC для идентификатора запроса и вычисляет каждую строку ресурса. Функция возвращает 1 — удостоверение имеет указанное разрешение на ресурс и 0 , если удостоверение не имеет.
Пример проверки доступа на запись к реестрам контейнеров Azure
resources
| where type =~ 'Microsoft.ContainerRegistry/registries'
| extend canPush = hasPermission('Microsoft.ContainerRegistry/registries/push/write')
В этом примере каждый ресурс реестра контейнеров оценивается по отдельности и canPush указывает, может ли запрашивающее удостоверение выполнять указанное действие записи в этом ресурсе. Результаты можно использовать для фильтрации, агрегирования или суммирования на основе возвращаемого значения.
hasDataPermission()
Определяет hasDataPermission() , имеет ли запрашивающее удостоверение определенное разрешение плоскости данных для ресурса.
Используйте следующий формат:hasDataPermission()
hasDataPermission('<permission-string>')
Функция hasDataPermission() использует эффективную оценку доступа на уровне данных для идентификатора запроса и вычисляется на строку ресурса. Функция возвращает значение 1, если удостоверение имеет указанное разрешение плоскости данных для ресурса и 0, если удостоверение не имеет.
Пример. Проверка доступа на чтение плоскости данных к Хранилище BLOB-объектов Azure
resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| extend canReadBlobs = hasDataPermission('Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read')
В этом примере каждый ресурс хранилища оценивается по отдельности. Функция hasDataPermissions() проверяет, имеет ли запрашивающее удостоверение указанные разрешения data-pe. Возвращаемое значение можно использовать для фильтрации, сводки или создания отчетов.
Пример. Проверка доступа на чтение плоскости данных к Хранилище BLOB-объектов Azure с помощью фильтрации
resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| where hasDataPermission('Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read') == 1
В этом примере возвращаются только учетные записи хранения, в которых удостоверение запроса имеет доступ на чтение BLOB-объектов.
Важные ограничения
Эти функции часто путаются с сценариями обнаружения ролей или разрешений. Для понимания важны следующие ограничения.
-
hasDataPermission()ФункцииhasPermission()не определяют, какие разрешения предоставляет определение роли. - Их нельзя использовать для запроса или фильтрации ресурсов microsoft.authorization/roledefinitions .
- Они не предназначены для ответа на такие вопросы, как:
- "Какие роли предоставляют это разрешение?"
- "Какие действия включают это определение роли?"
Дальнейшие шаги
- Azure Resource Graph query language: Starter queries и Advanced queries.
- Узнайте больше о том, как изучить ресурсы Azure.