Доступ к API Azure PIM в лазурных конвейерах через субъект-службу

Я пытаюсь вызвать api управления привилегированными идентификационными данными (https://api.azrbac.mspim.azure.com/api/v2/privilegedAccess) в лазурном конвейере. У меня есть следующий код для вызова метода register, но он не работает, но я не могу понять, что не так. Позвольте мне сначала показать код:

install-module azureadpreview -Force
import-module azureadpreview

$context = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext
$graphToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.microsoft.com").AccessToken
$pimToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "<what do i enter here?>").AccessToken
$aadToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, "https://graph.windows.net").AccessToken

Connect-AzureAD -AadAccessToken $aadToken -AccountId $context.Account.Id -TenantId $context.tenant.id -MsAccessToken $graphToken

Write-Output "Create PIM role"
$Group = New-AzureADMSGroup -DisplayName "TestPIMGroup" -Description "TestForPim" -MailEnabled $false -SecurityEnabled $true -MailNickName "NOTUSED" -IsAssignableToRole $true

Write-Output "Test api call"
$Headers = @{
  "Accept" = "*/*"
  "Accept-Language" = "en"
  "Authorization" = "Bearer {0}" -f $pimToken
  "Content-Type" = "application/json"
}
$Body = @{
  externalId = $Group.Id
} | ConvertTo-Json
$URL = 'https://api.azrbac.mspim.azure.com/api/v2/privilegedAccess/aadGroups/resources/register'

Write-Output "Body: $Body"

$HeaderJson = $Headers | ConvertTo-Json
Write-Output "Headers: $HeaderJson"

try {
  $QueryResponse = Invoke-RestMethod -Uri $URL -Headers $Headers -Method POST -Body $Body
}
catch {
  $_.Exception.Response
  $result = $_.Exception.Response.GetResponseStream()
  $reader = New-Object System.IO.StreamReader($result)
  $reader.BaseStream.Position = 0
  $reader.DiscardBufferedData()
  $responseBody = $reader.ReadToEnd();
  $responseBody
  exit 1
}
$QueryResponse.value

Итак, я пытаюсь создать группу PIM и разрешить ей привилегированный доступ. Модуль azureadpreview имеет функции для создания группы PIM, поэтому я использую ее. Это прекрасно работает. Метод получения токена для субъекта-службы, который я получил от этот пост.

Теперь, чтобы включить привилегированный доступ к нему, мне нужно напрямую вызвать API, потому что, похоже, для него нет какой-либо команды powershell. Здесь все усложняется. Вызов API возвращает внутреннюю ошибку сервера 500, единственная ошибка в теле - an error has occurred. Так что на самом деле это мне ни о чем не говорит. Итак, я начал расследование:

  • Когда я не передаю токен, я получаю несанкционированное исключение
  • Когда я передаю чушь в качестве токена, я получаю внутреннюю ошибку сервера. Это указывало мне на то, что с токеном что-то не так. Я думаю, что что-то не так с тегом аудитории в токене.
  • Я перепробовал все типы URL-адресов в токене, и все они показывают мне 500 в качестве ответа.
  • Я записал вызов api, который браузер сделал на лазурном портале при выполнении того же вызова. Я прочитал токен из этого запроса, и он дал мне какое-то руководство как aud. Когда я использую этот гид, он дал мне Unauthorized ответ

Может ли кто-нибудь помочь мне в моей ситуации?

ограничение ответа:

Мне нужно получить доступ к pim api, повторно используя принципала службы, который я уже использую в своем конвейере Azure, через мое подключение к службе. Поэтому я не ищу ответов о создании сертификатов в лазурном и аутентификации с его помощью.

Изменить: некоторая справочная информация:


person PaulVrugt    schedule 10.02.2021    source источник


Ответы (1)


guid, который вы получаете из токена в браузере на лазурном портале, должен быть правильным.

Но похоже, что эта конечная точка API не доступна для внешнего использования.

В настоящее время мы не можем сгенерировать токен приложения для этого ресурса.

Как видите, эта функция требуется для нескольких голосовых сообщений пользователей.

Продолжайте голосовать, посты будут полезны.

person Allen Wu    schedule 11.02.2021