Разрешения 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.
Connect-AzureAD
подключить PS к Azure Ad. Введите ваши права администратора.$graph = Get-AzureADServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
найти принципала службы, представляющего Microsoft Graph, и назначить его переменной. Принципал службы для Microsoft Graph в настоящее время создается как раз вовремя при первом доступе, поэтому существует вероятность, что он не существует. Это можно создать, позвонивNew-AzureADServicePrincipal -AppId "00000003-0000-0000-c000-000000000000"
,$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
- Найдите objectId вашего MSI (при условии, что вы его не знаете, но знаете его clientId/appId):
$msi = Get-AzureADServicePrincipal -Filter "AppId eq '{Your_MSI_appId}'"
- Для каждого из разрешений, необходимых вашему 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 теперь заблокировано.