Я изучаю Azure и хотел использовать субъект-службу при входе в систему через интерфейс командной строки Azure вместо аутентификации через метод веб-входа. Я создал субъекта-службы с az ad sp create-for-rbac
с областью действия в корне моей подписки и ролью «Владелец». Я могу успешно войти в систему с помощью субъекта-службы, но когда я пытаюсь сделать az ad sp list
, Я получаю сообщение об ошибке, что у меня недостаточно прав: azure.graphrbac.models.graph_error.GraphErrorException: Insufficient privileges to complete the operation.
Когда я смотрю на вкладку Контроль доступа (IAM) в колонке подписки на портале, я вижу, что субъект-служба является владельцем, а моя собственная учетная запись является одновременно владельцем и администратором службы.
Есть ли способ предоставить Принципалу службы точно такие же права, как и у моей учетной записи?
Очевидно, что наделения ИП роли «владельца» недостаточно. Вы можете назначить ему роль «Читатели каталога». Однако это невозможно с помощью Azure CLI или портала. Вы должны использовать API-интерфейс Azure AD Graph, самый простой способ сделать это - использовать https://graphexplorer.azurewebsites.net/.
Второе предостережение: вы не можете использовать сайт graphexplorer, используя свою собственную учетную запись Azure (в моем случае у меня была простая личная настройка Azure, и только я был администратором), но вам необходимо создать пользователя в своем Azure AD. Я дал ему роль глобального администратора, чтобы быть уверенным, я не уверен, какая минимальная роль будет иметь возможность использовать Graph API.
Теперь, шаги по добавлению для SP роли читателей каталогов немного длинны, чтобы объяснять здесь, я нашел их здесь: https://lnx.azurewebsites.net/directory-roles-for-azure-ad-service-principal/
Не уверен, почему это должно быть так запутано и почему этого нет в документации.
Если у вашего СП есть Owner
роль, команда az ad sp list
может перечислить ваши sps.
Я предлагаю вам закрыть текущую оболочку и повторно открыть новую оболочку, используя следующую команду для входа в свою подписку.
az login --service-principal -u <client id> -p <client secret> --tenant <tenant id>