API остальных приложений Azure Application Insights, вызов сводки возвращается пустым - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь использовать вызов API REST Azure Application Insights для получения сводной информации с помощью Powershell. (https://docs.microsoft.com/en-us/rest/api/monitor/alertsmanagement/alerts/getsummary)

Итак, я создал приложение регистрации в Azure AD (называется AppInsightsRESTTest), назначил ему разрешение (App Insights -> Data -> Read) с помощью параметра делегирования. ,Я сгенерировал Секретный Ключ также для этого. А теперь я скопировал идентификатор приложения и секрет для этого приложения и использовал его в PowerShell ниже. Я также добавил это приложение, которое я зарегистрировал в Azure AD, в свой экземпляр App Insights в качестве роли CONTRIBUTOR.

#SPN ClientId and Secret
$ClientID       =   "25325f5d-XXXXXXXXXXXXX26fef568d" #Key from Azure AD App ID Created
$ClientSecret   = "uX[CNk[XXXXXXXXXXXXgGcN4" #Secret key from Azure AD
$tennantid      = "fa061982-XXXXXXXXXXX1ce727"  #Directory ID for THREE PROJECt
$SubscriptionID = "d2e4beXXXXXXXXXXXXXXX686542c"

$TokenEndpoint = {https://login.microsoftonline.com/{0}/oauth2/token} -f $tennantid 
$ARMResource = "https://management.core.windows.net/";

$Body = @{
        'resource'= $ARMResource
        'client_id' = $ClientID
        'grant_type' = 'client_credentials'
        'client_secret' = $ClientSecret
}

$params = @{
    ContentType = 'application/x-www-form-urlencoded'
    Headers = @{'accept'='application/json'}
    Body = $Body
    Method = 'Post'
    URI = $TokenEndpoint
}

$token = Invoke-RestMethod @params

$token | select access_token, @{L='Expires';E={[timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($_.expires_on))}} | fl *


$SubscriptionURI = "https://management.azure.com/subscriptions/$SubscriptionID" +'/providers/Microsoft.AlertsManagement/alertsSummary?groupby=alertRule&api-version=2018-05-05'

$params = @{
    ContentType = 'application/x-www-form-urlencoded'
    Headers = @{
    'authorization'="Bearer $($Token.access_token)"
    }
    Method = 'Get'
    URI = $SubscriptionURI
}

Invoke-RestMethod @params

Приведенный выше код возвращает мне токен, но метод Invoke возвращает пустое значение, а не Json. Если я попробую то же самое из браузера, используя AUTHO BEARER TOKEN, он вернет мне правильный Json с соответствующими данными. Может ли кто-нибудь помочь мне с тем, что я мог упустить здесь из-за того, что мой PowerShell ничего мне не возвращает?

Есть ли какая-нибудь помощь по этому поводу?

1 Ответ

0 голосов
/ 12 октября 2019

Я получил это решение, и выяснилось, что мне нужно было сделать 2 вещи: - После регистрации приложения в Azure AD я должен перейти на страницу ПОДПИСКА и предоставить зарегистрированному выше приложению разрешение READER для LOG ANALYTICS. Как только это было сделано выше, PowerShell начал работать и возвращать результаты. Таким образом, вы должны сделать следующее: 1. Назначьте разрешение READER приложения (через IAM на странице подписки) для
Log Analytics Reader.

Нет необходимости назначать доступ Application Insights READER.

...