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
разрешения и разрешения приложения и делегированные разрешения, а затем нажмите кнопку Предоставить разрешения). Вот мой результат теста:
Надеюсь это поможет!