Я хочу запросить все встроенные определения ролей Azure, используя Search-AzQuery
. У меня установлен модуль Az.ResourceGroup
v1.0.0.
Этот запрос отлично работает в Azure Resource Graph Explorer на портале Azure и возвращает 5 записей:
authorizationresources | where type == "microsoft.authorization/roledefinitions" | where properties["type"] == "BuiltInRole" | limit 5
Если я запускаю тот же запрос локально, используя Search-AzQuery
(или az graph query
, если уж на то пошло), я получаю ноль записей.
Search-AzGraph -Query 'authorizationresources | where type == "microsoft.authorization/roledefinitions" | where properties["type"] == "BuiltInRole" | limit 5'
Однако если я удалю второй where
, он вернет записи.
Search-AzGraph -Query 'authorizationresources | where type == "microsoft.authorization/roledefinitions" | limit 5'
Я также пробовал использовать оператор =~
(чтобы игнорировать регистр при сравнении), но это не имеет значения.
Что я делаю неправильно?
Когда вы запускаете локально, вы не должны работать так, как вы работаете, вы получите 0 записей, как показано ниже:
Чтобы получить правильные результаты, вы должны использовать команду, как показано ниже, и следовать Microsoft-Document:
az graph query -q "
authorizationresources
| where type == 'microsoft.authorization/roledefinitions'
| where properties['type'] == 'BuiltInRole'
"
Также см. мой ответ в SO-теме.
Редактировать:
Используйте эту команду:
Search-AzGraph -Query "
authorizationresources
| where type =~ 'microsoft.authorization/roleassignments'
"
Редактировать2:
$rith = Search-AzGraph -Query "
authorizationresources
| where type =~ 'microsoft.authorization/roleassignments'
"
$rithwik = $rith | Where-Object { $_.properties.principalType -eq 'X' }
$rithwik
Я согласен с @wenbo, UseTenantScope, в конце концов, все будет работать.
Попробуйте с az graph query -q
, у меня это сработало
Для меня это тоже работает. Итак, единственная разница в том, что вы разделили его на несколько строк? Было бы неплохо заставить его работать и с Search-AzGraph
Да, в этом и есть разница, и это будет работать только так.
Задокументировано ли где-нибудь требование использования нескольких строк? Я не вижу этого упоминания на странице, на которую вы ссылаетесь
Нет, это не так, но при таком задании он дает записи
Давайте продолжим обсуждение в чате.
Search-AzGraph -Query "authorizationresources | where type == 'microsoft.authorization/roledefinitions' | where properties['type'] == 'BuiltInRole' | limit 5" -UseTenantScope
Стоит добавить UseTenantScope
, я много пробовала и обнаружила, что этот метод работает.
Почему это работает:
roledefinitions
имеет идентификатор ресурса, подобный этому /providers/Microsoft.Authorization/RoleDefinitions/aabbc5dd-1af0-458b-a942-81af88f9c138
, который не связан с определенной подпиской. Это Basic tenant query
ссылка
Имеет отличие от Basic query
, необходимо передать массив subscribeIds.
Я попробовал ваш запрос с помощью Search-AzQuery, но он по-прежнему возвращает 0 записей.