Azure Graph 403 Authorization_Request Отклонено с использованием принципала службы из VSTS

У меня есть субъект службы, который используется VSTS для запуска сценария Azure Powershell. Команда, которую я пытаюсь вызвать, Get-AzureRmRoleAssignment, Я получаю следующее сообщение об ошибке

  "Exception": {
     "Request": {
       "Method": "POST",
       "RequestUri": "https://graph.windows.net/********/getObjectsByObjectIds?api-version=1.6",
       "Properties": "System.Collections.Generic.Dictionary`2[System.String,System.Object]",
       "Headers": "System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.IEnumerable`1[System.String]]"
     },
     "Response": {
       "StatusCode": 403,
       "ReasonPhrase": "Forbidden",
       "Content": {
         "odata.error": {
           "code": "Authorization_RequestDenied",
           "message": {
             "lang": "en",
             "value": "Insufficient privileges to complete the operation."
           }
         }
       },
       "Headers": "System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.IEnumerable`1[System.String]]"
}
}

Я проверил, что у участника службы есть доступ на чтение для назначения роли.

1 ответ

Решение

На самом деле, этот скрипт PowerShell Get-AzureRmRoleAssignment не только требуется доступ на чтение для назначения роли с разрешением API Azure REST, но также требуется разрешение на чтение данных каталога с помощью API-интерфейса Azure AD Graph.

Мы можем использовать Fiddler, чтобы узнать, какой API выполняет эта команда:

Это означает, что Get-AzureRmRoleAssignment Для завершения операции необходимо вызвать 3 API. Два из них - API-интерфейс Azure REST, один из них - API-интерфейс Azure AD Graph:

POST https://graph.windows.net/<tenantID>/getObjectsByObjectIds?api-version=1.6

Решение:

Итак, проверьте, есть ли у вашего sp разрешения на чтение данных каталога. (Вы бы лучше добавить Read directory data разрешения и разрешения приложения и делегированные разрешения, а затем нажмите кнопку Предоставить разрешения). Вот мой результат теста:

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

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