Dit artikel gaat dieper in op hoe u de laatste inloggegevens en aanmeldactiviteit van Azure AD-gebruikers kunt ophalen. Soms is het raadplegen van de Azure-portal voldoende: ga naar Azure-portal, vervolgens naar Azure AD > Gebruikers > selecteer een gebruiker > Aanmeldlogboeken. Snel en eenvoudig, en u kunt informatie zien zoals de laatste aanmelding, apparaatdetails, locatie, user-agent, enzovoort. U kunt zelfs filteren wat u wilt zien of de gegevens exporteren als CSV. Maar als u meerdere gebruikers wilt analyseren of rapporten over een langere periode wilt genereren, is PowerShell de aangewezen methode. Het is iets complexer, maar het biedt veel meer mogelijkheden om aanmeldactiviteiten in uw tenant te analyseren.
Hoe krijg ik de aanmeldingsgeschiedenis van gebruikers in Azure AD met behulp van de Microsoft Graph API?
Verbinding maken met de Microsoft Graph API en daadwerkelijk de logboeken ophalen.
Een populaire aanpak is om verbinding te maken met de Microsoft Graph API. Het is misschien wat vreemd, maar op die manier kun je scripts schrijven om logboeken op te halen voor honderden of duizenden gebruikers tegelijk – veel meer dan de portal toelaat. De sleutel is om je app de juiste API-machtigingen te geven: AuditLog. Read. All en Directory. Read. All. Als die niet zijn verleend, zit je vast.
Nadat je de machtigingen hebt ingesteld, begin je met een aantal PowerShell-opdrachten. Vraag eerst een toegangstoken aan. Dat ziet er meestal zo uit:
$ApplicationID = "your-application-id" $TenantDomainName = "your-tenant.onmicrosoft.com" $AccessSecret = "your-secret" $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/$TenantDomainName/oauth2/v2.0/token" -Method POST -Body $Body $token = $ConnectGraph.access_token
Ja, deze stap heeft me geholpen om authenticatiefouten door ontbrekende tokens te verhelpen. Zodra je je token hebt, kun je verzoeken indienen zoals:
$GraphSignInLogsUrl = "https://graph.microsoft.com/v1.0/auditLogs/signIns" $signIns = Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GraphSignInLogsUrl -Method Get $signIns.value
Het is belangrijk om te weten dat de Graph API maximaal 1000 objecten tegelijk retourneert. Om een volledig overzicht te krijgen, moet je paginering implementeren, meestal met een @odata.nextLinklink, en vervolgens een lus gebruiken om alle items op te halen. In sommige configuraties kan dit wat geduld vergen – de API lijkt soms traag of kort de resultaten af, vooral als je tenant veel gebruikers heeft.
Wilt u meer controle? Gebruik dan de Azure Graph Explorer ( Graph Explorer ).Deze is erg handig voor het selecteren van specifieke kolommen zoals userDisplayName, userPrincipalName, appDisplayName, location, ipAddress, clientAppUsed, deviceDetail, en createdDateTime. Op die manier kunt u de rapporten aanpassen en alleen de relevante gegevens ophalen.
Hier is een voorbeeld van hoe je een rapport voor de afgelopen 90 dagen kunt opvragen – het is een beetje omslachtig, maar het werkt:
$SetDate = (Get-Date).AddDays(-90) $SetDateFormatted = Get-Date $SetDate -format yyyy-MM-dd $signInLogs = Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri "https://graph.microsoft.com/v1.0/auditLogs/signIns" -Method Get $result = $signInLogs.value | Select-Object userDisplayName, userPrincipalName, appDisplayName, ipAddress, clientAppUsed, deviceDetail, location, createdDateTime | Where-Object {$_.createdDateTime -gt $SetDate} $allHistory = @() foreach ($entry in $result){ $userHistory = [PSCustomObject]@{ User = $entry.userDisplayName UPN = $entry.userPrincipalName App = $entry.appDisplayName IP = $entry.ipAddress Browser = $entry.clientAppUsed OS = $entry.deviceDetail. OperatingSystem Location = $entry.location.city + ", " + $entry.location.countryOrRegion Date = $entry.createdDateTime } $allHistory += $userHistory } $allHistory | Export-Csv "C:\Path\To\Your\Folder\AzureSignInLogs.csv" -NoTypeInformation
Dit exporteert een CSV-bestand met een flinke hoeveelheid informatie: wie heeft ingelogd, vanaf waar, met welk apparaat en wanneer. Je kunt indien nodig meer velden toevoegen. Om te achterhalen wanneer elke gebruiker voor het laatst heeft ingelogd, voer je het volgende commando uit:
$allHistory | Group-Object UPN | ForEach-Object { $_. Group | Select UPN, Date -First 1 }
Als u inactieve gebruikers wilt identificeren, kunt u een volledige lijst met UPN’s opvragen via de API en deze vergelijken met uw aanmeldlogboeken. Zo kunt u gemakkelijker zien wie recent niet heeft ingelogd en mogelijk geen licentie meer nodig heeft.
Methode 2: Gebruik de AzureADPreview-module
Als je de voorkeur geeft aan een meer directe aanpak, AzureADPreviewhelpt het installeren van de module. Het is wat gemakkelijker in gebruik, vooral als je bekend bent met PowerShell. Zo stel je het in:
Install-Module AzureADPreview -AllowClobber Connect-AzureAD
Na het verbinden ziet het uitvoeren van `get sign-in logs` er als volgt uit:
Get-AzureADAuditSignInLogs -Top 10 | select CreatedDateTime, UserPrincipalName, IsInteractive, AppDisplayName, IpAddress, TokenIssuerType, @{Name='DeviceOS'; Expression={$_. DeviceDetail. OperatingSystem}} | ft
Deze aanpak is handig voor snelle controles of het automatiseren van veelvoorkomende taken, zoals het exporteren van recente logbestanden naar een CSV-bestand:
$SetDate = (Get-Date).AddDays(-3) $SetDateFormatted = Get-Date $SetDate -format yyyy-MM-dd Get-AzureADAuditSignInLogs -Filter "createdDateTime gt $SetDateFormatted" | Select-Object userDisplayName, userPrincipalName, appDisplayName, ipAddress, clientAppUsed, @{Name='DeviceOS'; Expression={$_. DeviceDetail. OperatingSystem}} | Export-Csv "C:\Path\To\Your\Folder\AzureSignInLogs.csv" -NoTypeInformation
In principe is het een heel eenvoudige manier om recente aanmeldingen te verzamelen. Het enige nadeel is dat je met bovenstaande methode beperkt bent tot 10 logboeken, maar je kunt dit aanpassen met filters als je meer gegevens nodig hebt. Je kunt ook gegevens uit de beveiligingslogboeken van je domeincontrollers halen voor on-premises Active Directory, maar dat is een onderwerp voor een andere keer.
Uiteindelijk bieden beide methoden goede opties, afhankelijk van of je de flexibiliteit van de Graph API of de eenvoud van PowerShell-modules zoals AzureADPreview prefereert. Wat ook het beste bij je workflow past, ze kunnen je helpen om gebruikersactiviteit te analyseren en inzicht te krijgen in aanmeldpatronen, sessies en mogelijk inactieve accounts. Houd er wel rekening mee dat deze scripts soms wat aanpassingen nodig hebben, vooral bij grotere tenants of als de machtigingen niet helemaal kloppen.