Недостаточно прав для назначения разрешений Azure Active Directory для функции Azure с поддержкой MSI? - PullRequest
0 голосов
/ 19 сентября 2018

У нас есть два ресурса Azure в одном каталоге.Набор API-интерфейсов webAPI для управления API Azure и функции Azure.Мы хотим, чтобы функция Azure могла вызывать API.Мы включили MSI для функции Azure, как описано в Как использовать управляемые удостоверения для службы приложений и функций Azure .Мы создали регистрацию приложения в AAD для API, создали разрешение на доступ к роли.После При вызове ваших API-интерфейсов с использованием идентификатора управляемой службы Azure AD с использованием разрешений приложения мы сталкиваемся с ошибками при попытке назначить разрешение / роль для функции Azure: в powershell:

New-AzureADServiceAppRoleAssignment -ObjectId 8XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -Id 3XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -PrincipalId 8XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -ResourceId 9XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

New-AzureADServiceAppRoleAssignment : Error occurred while executing NewServicePrincipalAppRoleAssignment
Code: Authorization_RequestDenied
Message: Insufficient privileges to complete the operation.
HttpStatusCode: Forbidden
HttpStatusDescription: Forbidden
HttpResponseStatus: Completed
At line:1 char:1
+ New-AzureADServiceAppRoleAssignment -ObjectId 8XXXXXX-XXXX-XXXX-XXXX ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzureADServiceAppRoleAssignment], ApiException
    + FullyQualifiedErrorId : Microsoft.Open.AzureAD16.Client.ApiException,Microsoft.Open.AzureAD16.PowerShell.NewServ
   icePrincipalAppRoleAssignment

дает намошибка разрешения, даже когда AAD Admin (член Администратора AAD DC, я думаю) запускает его.Кто-нибудь сталкивался с этим раньше?Почему это вызывает ошибку разрешений?Мы убедились, что идентификаторы верны для 3 разных людей.

1 Ответ

0 голосов
/ 20 сентября 2018

Проблема, с которой вы, вероятно, сталкиваетесь, заключается в том, что, несмотря на то, что регистрация вашего приложения именуется тем же, что и ваше приложение с поддержкой MSI, эти два в конечном итоге представляют разные субъекты службы в AAD. Использование регистрации приложений в MSI в настоящее время не поддерживается.

Попробуйте выполнить команды powershell, используя вместо этого идентификатор объекта идентификатора MSI.Я смог заставить это работать, и предоставил моему приложению с поддержкой MSI доступ к Graph Api.

Вот PS, который я использовал для назначения ролей GraphApi, необходимых для моего функционального приложения:

$functionAppName = "My-FANCY-FUNC"

$context = Get-AzureRmContext -ErrorAction SilentlyContinue #this lets you search AAD for func

if(!$context){
    $login = Connect-AzureRmAccount  | Out-Null
    Connect-AzureAD #needed this for Graph API
    $context = $login
} else { Write-Host "Login session already established for " $context.Subscription.SubscriptionName }

#get the SP associated with the MSI
$MSIPrincipal = Get-AzureRmADServicePrincipal -SearchString $functionAppName | Where-Object DisplayName -eq $functionAppName

#get the SP associatesd with the MS Graph
$graph = Get-AzureADServicePrincipal -All $true | ? { $_.DisplayName -match "Microsoft Graph" }

#find the target app roles in the graph
$targetRoles = $graph.AppRoles | Where-Object Value -in "Group.ReadWrite.All", "Directory.ReadWrite.All"

#iterate throgh the known roles and add the MSI SP to them
$targetRoles | ForEach-Object {New-AzureADServiceAppRoleAssignment -Id $_.Id -PrincipalId $MSIPrincipal.Id -ObjectId $MSIPrincipal.Id -ResourceId $graph.ObjectId}

Я подозреваю, что, основываясь на вашем вопросе, эта строка вернет более чем одну сущность:

Get-AzureRmADServicePrincipal -SearchString $functionAppName | Where-Object DisplayName -eq $functionAppName

Удаление регистрации посторонних приложений должно очистить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...