Разрешения MSI для Graph API

У меня вопрос: есть ли у нас какой-либо документированный способ предоставления разрешений на управление удостоверениями служб для API Graph, как это было бы при регистрации приложений Azure на портале? Мне не удалось найти какие-либо параметры Powershell или возможность управления разрешениями для субъекта службы MSI на портале Azure или в документации. Я нашел похожий вопрос на форумах MSDN, но хотел убедиться, что нет никаких дальнейших обновлений или обходных путей, о которых кто-либо знал?

Сообщение на форуме MSDN: https://social.msdn.microsoft.com/Forums/azure/en-US/dae34534-f193-4444-b52e-ba9cfa4a1fda/does-azure-msi-support-accessing-graph-api?forum=WindowsAzureAD

1 ответ

Решение

Отказ от ответственности - я не слишком знаком с MSI, но так как они смоделированы как принципалы обслуживания, это должно работать. Также я не могу проверить эти шаги.

Эти шаги требуют, чтобы вы использовали Azure AD PowerShell (v2) для назначения разрешений приложений вашему MSI (для доступа к Microsoft Graph), а также чтобы вы были администратором или администратором приложения в своем клиенте. Для Microsoft Graph задокументированные разрешения можно найти здесь. Те же инструкции можно использовать и для других ресурсов, защищенных Azure AD. Я предполагаю, что вы уже установили модуль PowerShell.

  1. Connect-AzureAD подключить PS к Azure Ad. Введите ваши права администратора.
  2. $graph = Get-AzureADServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'" найти принципала службы, представляющего Microsoft Graph, и назначить его переменной. Принципал службы для Microsoft Graph в настоящее время создается как раз вовремя при первом доступе, поэтому существует вероятность, что он не существует. Это можно создать, позвонив New-AzureADServicePrincipal -AppId "00000003-0000-0000-c000-000000000000",
  3. $graph.AppRoles - это покажет вам все доступные разрешения приложений, которые вы можете выбрать, которые предоставляются Microsoft Graph. Например, если вашему MSI необходимо прочитать информацию о группе, найдите в списке разрешение "Group.Read.All" и запишите его идентификатор доступа (это GUID). Например, вот одна из записей из списка AppRoles:AllowedMemberTypes : {Application} Description : Allows the app to read events of all calendars without a signed-in user. DisplayName : Read calendars in all mailboxes Id : 798ee544-9d2d-430c-a058-570e29e34338 IsEnabled : True Value : Calendars.Read
  4. Найдите objectId вашего MSI (при условии, что вы его не знаете, но знаете его clientId/appId):$msi = Get-AzureADServicePrincipal -Filter "AppId eq '{Your_MSI_appId}'"
  5. Для каждого из разрешений, необходимых вашему MSI, запустите следующий командлет PS, чтобы назначить разрешение вашему MSI:New-AzureADServiceAppRoleAssignment -Id {permissionId} -PrincipalId $msi.ObjectId -ResourceId $graph.ObjectId

И это должно сделать это. Теперь у вас должна быть возможность получить токен доступа для MSI для вызова Microsoft Graph, а токен доступа должен содержать roles заявка, которая соответствует разрешениям (идентификаторам), которые вы назначили выше. Затем вы можете использовать этот токен доступа для вызова Microsoft Graph. Это похоже на шаги 6 и 7 в https://docs.microsoft.com/en-us/azure/active-directory/msi-overview.

Надеюсь это поможет,

Ожидается сообщение RequestDenied. Произошло изменение в том, что обновление System MSI SP теперь заблокировано.

Другие вопросы по тегам