Как найти группу ресурсов, связанную с субъектом службы?

Проблема

У меня есть YAML-файл лазурного конвейера. Он может работать через служебное соединение, которое обращается к субъекту службы со всеми надлежащими полномочиями и т. Д.

Но сейчас я пытаюсь очистить код; у нас есть несколько субъектов-служб, работающих в нескольких подписках и группах ресурсов. Им необходимо создать учетные записи хранения, которые должны быть уникальными.

Поэтому я пытаюсь создать учетную запись хранения, частично построенную из связанной подписки и группы ресурсов субъекта-службы, создающего учетную запись хранения.

Пример решения

Для подписки это довольно просто. Я могу сделать что-то вроде этого из сценария PowerShell, вызываемого внутри конвейера:

$subscriptionId = $(az account show --query 'id' -o tsv)
Write-Output "##vso[task.setvariable variable=AZURE_SUBSCRIPTION_ID;isoutput=true;issecret=true]$subscriptionId"

Теперь у меня установлены переменные $subscription ID и AZURE_SUBSCRIPTION_ID, и я могу получить доступ к информации о подписке в самом конвейере.

Вопрос

Но как я могу сделать что-то подобное с группами ресурсов?

Нет эквивалента az account show с группами ресурсов без знания самого имени группы ресурсов. (Например, мне нужно ввести az group show -name <RG-name>, но я пытаюсь получить именно это имя.)

Опять же, для ясности, я работаю внутри определенной группы ресурсов и подписки, это те, которые связаны с подключением к службе. Теперь я просто хочу, чтобы эта информация была доступна конвейеру.


person Mike Williamson    schedule 18.01.2021    source источник
comment
Я не уверен, что вы имеете в виду под am running inside of a particular resource group Подключение службы с использованием SP ограничено только подпиской или группой управления   -  person silent    schedule 18.01.2021
comment
Имеет ли список групп az Команда соответствует вашим потребностям?   -  person Walter    schedule 19.01.2021
comment
Нет, @ WalterQian-MSFT, я выполняю всю эту работу в рамках конвейера. (1) az group list дает мне список, и я не уверен, что список детерминирован (например, группа, которую я хочу, всегда находится под номером 2 в списке), и (2) это кажется очень хрупким способом построения конвейер: этот номер в списке каждый раз будет отличаться.   -  person Mike Williamson    schedule 19.01.2021
comment
@silent Приносим извинения за недоразумения: подключение к службе предоставляет принципала службы, который может быть в рамках группы ресурсов, я хочу узнать имя этой группы ресурсов из внутри трубопровода.   -  person Mike Williamson    schedule 19.01.2021
comment
@MikeWilliamson, который не ограничивается. Это просто дает SP доступ к одной RG. Но он всегда может иметь доступ к нескольким группам RG.   -  person silent    schedule 19.01.2021


Ответы (1)


Я не уверен, что полностью понимаю, чего вы пытаетесь достичь. Но я подозреваю, что приведенные ниже варианты могут помочь.

Получить назначение ролей

Если вы создали отдельные подключения службы для каждой отдельной группы ресурсов, вы можете просто проверить назначения ролей для SPN и определить область подключения службы.

Если вы, например, используете задачу Azure PowerShell, вы настроили ее с помощью подключения к службе. Итак, когда задача запускается, у нее есть контекст субъекта-службы. Затем вы можете сделать Get-AzRoleAssignment, который должен вывести группы ресурсов, для которых он авторизован. Опять же, это полезно только в том случае, если вы используете соединение службы для каждой группы RG, иначе вы получите результаты для нескольких групп RG. (Или для подписок и групп управления, если вы также назначили роль этим областям действия)

Используйте Azure DevOps API

Вы можете использовать Get Конечная точка службы API Azure DevOps для получения подключений службы. Выходные данные JSON будут содержать информацию о масштабах подключения службы.

Если вам сложно работать с API напрямую, вы можете попробовать PSDevOps PowerShell для взаимодействия с Azure DevOps API. В нем есть команда Get-ADOServiceEndpoint, которая позволяет получить доступные конечные точки службы.

person Richard Waal    schedule 18.01.2021
comment
Я попробую Get-AzRoleAssignment, похоже, он делает то, что пытаюсь я. Если получится, приму ответ. - person Mike Williamson; 19.01.2021
comment
Да, я смог получить то, что хотел. Это было сложнее, чем я ожидал, но если я наберу Get-AzRoleAssignment -ObjectId <my service principal's ObjectId>, я получу Scope, в котором есть группа ресурсов с полным путем к идентификатору ресурса. - person Mike Williamson; 21.01.2021