Просмотр и анализ логов входа (аутентфикации) пользователей в Microsoft 365/Azure AD

Просмотр и анализ логов входа (аутентфикации) пользователей в Microsoft 365/Azure AD

В этой статье мы покажем, как узнать время последнего входа пользователей в Azure AD, и сгенерировать другие отчеты об активности пользователей в вашем тенанте Microsoft с помощью PowerShell (через модуль AzureADPreview и Microsoft Graph API).

Самый простой способ посмотреть логи активности пользователя Azure – воспользоваться порталом. Перейдите на https://portal.azure.com -> Azure AD -> Users -> выберите пользователя -> Sign-in logs. В открывшейся таблице появится вся история по входам пользователя.

portal azure логи входа пользователей

Можно узнать время входа, операционную систему на устройстве пользователя, местоположение, User agent и т.д. В таблице можно натсроить фильтры по разным параметрам, добавлять/удалять столбцы и выгрузить данные в CSV файл.

Однако, если вам нужно получить информацию по последнему входу для нескольких или всех пользователей, придется использовать PowerShell. Есть два способа получения доступа к журналам входа пользователей в Azure:

Получение истории аутентификации пользователей в Azure через Microsoft Graph API

Попробуем получить логи входа пользователей через Microsoft Graph API. Подключитесь к своему тенанту Azure через Microsoft Graph API (подробная инструкции по настройке доступа здесь):

В настройках приложения, через которое вы подключаетесь к Azure Graph API нужно предоставить следующие права: AuditLog.Read.All и Directory.Read.All.
права AuditLog.Read.All и Directory.Read.All для приложения Azure

$ApplicationID = "46692ad-f8a0-123f-8cca-432102de3bcf"
$TenatDomainName = "26216542-465a-407e-a17d-2bb4c3e3313b"
$AccessSecret = "d-8jM3ZUG87du-syZd32k01q.gkssa3mH3v"
$Body = @{

Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
client_Id = $ApplicationID
Client_Secret = $AccessSecret
}
$ConnectGraph = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenatDomainName/oauth2/v2.0/token" -Method POST -Body $Body
$token = $ConnectGraph.access_token

После получения токена можно подключиться REST API, хранящей информацию о входах пользователей:

$GraphSignInLogs = "https://graph.microsoft.com/v1.0/auditLogs/signIns"
(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GraphSignInLogs  -Method Get).value

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

получение логов входов пользователей в azure через graph api

Обратите внимание, что Microsoft Graph API может вернуть не более 1000 объектов за раз. Вы можете с помощью пагинации разбить результаты на страницы и обработать большее количество объектов в цикле через
@odata.nextLink
.

Теперь с помощью Azure Graph Explorer (https://developer.microsoft.com/en-us/graph/graph-explorer) можно выбрать название полей, которые вы хотите видеть в отчете об истории входа пользователей. Например, я хочу видеть в отчете информацию о пользователе, операционной системе, приложении Azure/Microsoft 365 которое использовал пользователь и его местоположение (поля userDisplayName, userPrincipalName, appDisplayName, location, ipAddress, clientAppUsed, deviceDetail, createdDateTime).

В этом примере я хочу получить отчет по активности пользователей Azure за последние 90 дней:

$SetDate = (Get-Date).AddDays(-90)
$SetDate = Get-Date($SetDate) -format yyyy-MM-dd
$GraphSignInLogs  = "https://graph.microsoft.com/v1.0/auditLogs/signIns"
$result = (Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GraphSignInLogs  -Method Get).value | Select-Object userDisplayName, userPrincipalName, appDisplayName, ipAddress, clientAppUsed, deviceDetail, location,createdDateTime | Where-Object {$_.createdDateTime -gt $SetDate }
$alluserhistory = @()
foreach ($resitem in $result){
$userhistory = New-Object PSObject -Property @{
User=$resitem.userDisplayName
UPN=$resitem.userPrincipalName
AzureAppUsed =$resitem.appDisplayName
UserApp =$resitem.clientAppUsed
IP=$resitem.ipAddress
Date=$resitem.createdDateTime
OS=($resitem.deviceDetail).operatingSystem
browser=($resitem.deviceDetail).browser
City=($resitem.location).city
Country=($resitem.location).countryOrRegion
}
$alluserhistory += $userhistory
}

Чтобы выгрузить результат в CSV файл, выполните:

$alluserhistory| Export-Csv "C:PSazure_login_logs.csv" –NoTypeInformation

В полученном CSV файле есть информацию о всей активности пользователя: с каких устройств и местоположений он логинился, какими приложениям Microsoft 365 пользовался. При необходимости вы можете добавить любые другие поля.

excel отчет по входу пользователей и использованию приложений azure/office 365

Чтобы получить время последнего входа для каждого пользователя из полученного списка, выполните команду:

$alluserhistory| Group-Object UPN |%{ $_.Group | Select UPN,Date -First 1}

время последнего входа пользователя в azure и microsoft 365

Можно найти всех неактивных пользователей за указанный период. Для этого нужно получить полный список UPN пользователей в Azure через Graph API и сравнить его с ранее полученным список пользователей, которые аутентифицировались в Azure в течении последних 90 дней.

$GrapUserUrl = 'https://graph.microsoft.com/v1.0/users'
$allusers=(Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GrapUserUrl -Method Get).value
$allusers = $allusers | Select-Object @{Name="UPN"; Expression = {$_.userprincipalname.ToLower()}}
$activeusers = $alluserhistory|select UPN –Unique

Осталось сравнить два списка. Таким образом с помощью PowerShell скрипта вы сможете найти неактивных пользователей в Microsoft 365 и освободить лицензии.

Обработка логов входа пользователей с помощью командлета Get-AzureADAuditSignInLogs из AzureADPreview

В модуле AzureADPreview есть отдельный командлет Get-AzureADAuditSignInLogs для получения информации о входах пользователей в Microsoft 365. По какой-то причине этот командлет отсутствует в продуктивном PowerShell модуле AzureAD (видимо Microsoft считает, что для нас достаточно Graph API).

Установите модуль AzureADPreview на свой компьютер:

Install-Module AzureADPreview –AllowClobber

Подключитесь к своему тенанту Azure через AzureADPreview:

AzureADPreviewConnect-AzureAD

Следующая команда вернет информацию о 10 последних входах пользователя в приложения Azure и Microsoft 365

Get-AzureADAuditSignInLogs -Filter "UserPrincipalName eq '[email protected]'" -Top 10 | select CreatedDateTime, UserPrincipalName, IsInteractive, AppDisplayName, IpAddress, TokenIssuerType, @{Name = 'DeviceOS'; Expression = {$_.DeviceDetail.OperatingSystem}}|ft

статистика входа пользователя в azure через powershell

Можно вывести статистику по входам пользователей в Azure за последние 3 дня и экспортировать ее в CSV файл:

$SetDate = (Get-Date).AddDays(-3);
$SetDate = Get-Date($SetDate) -format yyyy-MM-dd
$array = Get-AzureADAuditSignInLogs -Filter "createdDateTime gt $SetDate" | select userDisplayName, userPrincipalName, appDisplayName, ipAddress, clientAppUsed, @{Name = 'DeviceOS'; Expression = {$_.DeviceDetail.OperatingSystem}},@{Name = 'Location'; Expression = {$_.Location.City}}
$array | Export-Csv "C:PSazurepreview_login_logs.csv" –NoTypeInformation

список логов входа пользователей в office 365

Microsoft 365
Просмотр и анализ логов входа (аутентфикации) пользователей в Microsoft 365/Azure AD