Dieser Artikel beschreibt, wie Sie die letzten Anmeldedaten und Anmeldeaktivitäten von Azure AD-Benutzern abrufen. Manchmal genügt ein Blick ins Azure-Portal: Gehen Sie einfach zu Azure AD > Benutzer > Benutzer auswählen > Anmeldeprotokolle. Schnell und einfach erhalten Sie Informationen wie die letzte Anmeldung, Gerätedetails, Standort, User-Agent usw. Sie können die angezeigten Daten filtern oder als CSV-Datei exportieren. Wenn Sie jedoch mehrere Benutzer analysieren oder Berichte über einen längeren Zeitraum erstellen möchten, ist PowerShell die richtige Wahl. Die Vorgehensweise ist etwas komplexer, bietet aber deutlich mehr Möglichkeiten, die Anmeldeaktivitäten in Ihrem Tenant zu untersuchen.
So rufen Sie den Benutzeranmeldeverlauf in Azure AD mithilfe der Microsoft Graph-API ab
Verbindung zur Microsoft Graph API herstellen und tatsächlich die Protokolle abrufen
Ein gängiger Ansatz ist die Anbindung an die Microsoft Graph API. Das mag etwas ungewöhnlich klingen, ermöglicht aber das automatisierende Abrufen von Protokollen für Hunderte oder Tausende von Benutzern gleichzeitig – deutlich mehr, als das Portal zulässt. Entscheidend ist, Ihrer Anwendung die korrekten API-Berechtigungen zu erteilen: `AuditLog. Read. All` und `Directory. Read. All`. Andernfalls ist die Anwendung nicht nutzbar.
Nachdem Sie die Berechtigungen festgelegt haben, können Sie mit einigen PowerShell-Befehlen beginnen. Zuerst benötigen Sie ein Zugriffstoken. Dieses sieht üblicherweise so aus:
$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, dieser Schritt hat mir geholfen, einige Authentifizierungsfehler aufgrund fehlender Token zu beheben. Sobald Sie Ihr Token haben, können Sie Anfragen wie die folgenden stellen:
$GraphSignInLogsUrl = "https://graph.microsoft.com/v1.0/auditLogs/signIns" $signIns = Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"} -Uri $GraphSignInLogsUrl -Method Get $signIns.value
Es ist wichtig zu wissen, dass die Graph-API maximal 1.000 Objekte gleichzeitig zurückgibt. Um alle Daten zu erhalten, ist daher eine Paginierung erforderlich, üblicherweise mithilfe eines @odata.nextLinkLinks, und anschließend eine Schleife, um alle Einträge abzurufen. In manchen Konfigurationen kann dies etwas Geduld erfordern – die API reagiert mitunter träge oder schneidet Daten ab, insbesondere bei vielen Anmeldungen im Mandanten.
Sie möchten mehr Kontrolle? Nutzen Sie den Azure Graph Explorer ( Graph Explorer ).Er ist äußerst praktisch, um bestimmte Spalten wie z. B., , , , , , , und auszuwählen userDisplayName.userPrincipalNameSo appDisplayNamekönnen locationSie ipAddressdie clientAppUsedBerichte deviceDetailindividuell createdDateTimeanpassen und nur die relevanten Daten erfassen.
Hier ein Beispiel für das Erstellen eines Berichts für die letzten 90 Tage – etwas umständlich, aber es funktioniert:
$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
Dies exportiert eine CSV-Datei mit vielen Informationen – wer sich wann, von wo und mit welchem Gerät angemeldet hat. Bei Bedarf können Sie weitere Felder hinzufügen. Um herauszufinden, wann sich die einzelnen Benutzer zuletzt angemeldet haben, führen Sie einfach folgenden Befehl aus:
$allHistory | Group-Object UPN | ForEach-Object { $_. Group | Select UPN, Date -First 1 }
Um inaktive Nutzer zu identifizieren, rufen Sie einfach eine vollständige Liste der UPNs über die API ab und gleichen Sie diese mit Ihren Anmeldeprotokollen ab. So erkennen Sie leichter, wer sich in letzter Zeit nicht angemeldet hat und möglicherweise seine Lizenz nicht mehr benötigt.
Methode 2: Verwenden Sie das AzureADPreview-Modul
Wenn Sie eine unkompliziertere Lösung bevorzugen, AzureADPreviewhilft die Installation des Moduls. Es ist etwas einfacher zu handhaben, insbesondere wenn Sie mit PowerShell vertraut sind. So richten Sie es ein:
Install-Module AzureADPreview -AllowClobber Connect-AzureAD
Nach der Verbindungsherstellung sieht die Ausführung von „Anmeldeprotokolle abrufen“ folgendermaßen aus:
Get-AzureADAuditSignInLogs -Top 10 | select CreatedDateTime, UserPrincipalName, IsInteractive, AppDisplayName, IpAddress, TokenIssuerType, @{Name='DeviceOS'; Expression={$_. DeviceDetail. OperatingSystem}} | ft
Diese Vorgehensweise ist praktisch für schnelle Überprüfungen oder die Skripterstellung für häufige Aufgaben – wie beispielsweise den Export der letzten Protokolle in eine CSV-Datei:
$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
Im Prinzip ist es eine kinderleichte Methode, die letzten Anmeldungen zu erfassen. Der einzige Haken: Sie sind mit der oben beschriebenen Methode auf 10 Protokolleinträge beschränkt. Bei Bedarf können Sie jedoch Filter verwenden, um mehr Daten zu erhalten. Sie können auch Daten aus den Sicherheitsprotokollen Ihrer Domänencontroller für lokale Active Directory-Umgebungen abrufen, aber das ist ein Thema für sich, das wir ein anderes Mal behandeln.
Letztendlich bieten beide Methoden solide Optionen, je nachdem, ob Sie die Flexibilität der Graph-API oder die Einfachheit von PowerShell-Modulen wie AzureADPreview bevorzugen. Unabhängig davon, welche Methode am besten zu Ihrem Workflow passt, helfen sie Ihnen, Benutzeraktivitäten zu analysieren und Anmeldemuster, Sitzungen und potenziell inaktive Konten zu verstehen. Beachten Sie jedoch, dass diese Skripte mitunter angepasst werden müssen, insbesondere bei größeren Mandanten oder wenn die Berechtigungen nicht optimal sind.