Löschung inaktiver Gastaccounts automatisieren
Die Verwaltung von Gastaccounts in Entra ID ist ein wichtiger Aspekt der Sicherheits- und Compliance-Richtlinien einer Organisation. Inaktive Gastaccounts stellen ein potenzielles Sicherheitsrisiko dar, da sie von unbefugten Benutzern missbraucht werden könnten. Um diese Risiken zu minimieren, ist es wichtig, inaktive Gastaccounts regelmäßig zu überprüfen und gegebenenfalls zu löschen.
Azure Automation Runbooks bieten eine automatisierte Lösung inaktiver Gastaccounts, um diese Aufgabe effizient und zuverlässig zu erledigen. In diesem Leitfaden richten wir ein Azure Automation Runbook ein, welches inaktive Gastaccounts nach 90 Tagen Inaktivität automatisch löscht.
Index
Vorteile der automatischen Löschung inaktiver Gastaccounts
Erhöhte Sicherheit: Entfernen inaktiver Konten reduziert die Angriffsfläche für potenzielle Sicherheitsbedrohungen.
Verbesserte Verzeichnisverwaltung: Ein aufgeräumtes Verzeichnis erleichtert die Verwaltung und reduziert administrative Aufwände.
Kosteneinsparungen: Vermeidung unnötiger Lizenzkosten und Optimierung der Ressourcennutzung.
Azure Automation Runbooks als Lösung
Azure Automation Runbooks ermöglichen die Automatisierung von Verwaltungsaufgaben in Azure. Sie bieten eine robuste Plattform, um wiederkehrende Aufgaben, wie die Überwachung und Löschung inaktiver Gastaccounts, effizient zu automatisieren. Mit Runbooks können komplexe Workflows erstellt werden, die regelmäßig ausgeführt werden, um sicherzustellen, dass Richtlinien durchgesetzt werden.
Anleitung zur Erstellung eines Azure Automation Runbooks
Erstellen eines Azure Automation Kontos
1. Am Azure-Portal anmelden unter https://portal.azure.com.
2. Über „Ressource erstellen“ eine neue Ressourcengruppe für die Dienste erstellen.
3. Im nächsten Schritt erstellen wir ein Automation Konto, welches unser PowerShell Skript ausführen soll. Dazu gehen wir wieder über „Ressource Erstellen“ und suchen nach „Automation Account“
4. Sicher stellen, dass bei der Erstellung des Automatisierungskontos die Option „Vom System zugewiesene verwaltete Identität“ aktiviert wurde. Hinweis: Ich empfehle dringend, diese Option anstelle der bald auslaufenden Option „Ausführen als Konto“ zu verwenden.
Erstellen eines Runbooks
1. Öffnen wir das eben erstellte Automatisierungskontos, um ein neues Runbook zu erstellen.
2. Haben wir unser Runbook erstellt, den unten stehenden Code mit dem Skript zur Identifizierung und Löschung inaktiver Gastaccounts einfügen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# Author: Dennis Rupp (dennis.rupp@firstattribute.com) # Description: Script monitors Azure Active Directory guest users last login and remove them # when login greather than x days # Version: 1.0 # Created on: 18.12.2023 # Last Change: 18.12.2023 # Changed by: Dennis Rupp # =========================================================================================== # Change History: # # Release: | Date: | Author: | Changes: # -----------+------------+---------------+------------------------------------------------- # 1.0 | 18.12.2023 | D. Rupp | Creation $inactiveDays = 90 $inactiveDate = (Get-Date).AddDays(-$inactiveDays) $body = "{0} has been inactive for over $($inactiveDays) days. {0} will be remove now, last logon on: {1}" $bodyNoLogin = "{0} has no login at now." Write-Output ("[info] Starting watch inactive entraID guest users...") Connect-MgGraph -Identity -NoWelcome $guestsEntraID = Get-MgUser -ConsistencyLevel eventual -Count userCount -Filter "UserType eq 'Guest'" -Property Id, DisplayName, UserPrincipalName, UserType, SignInActivity -top 10000 Write-Output ("[info] " + ($guestsEntraID.Count).ToString() + " active users found in AD.") foreach($guestEntraID in $guestsEntraID) { Write-Debug ("[debug] Checking " + $guestEntraID.UserPrincipalName + " last login date...") try { if ($null -eq $guestEntraID.SignInActivity.LastSignInDateTime) { Write-Warning -Message ("[warn] " + $bodyNoLogin -f $guestEntraID.DisplayName, $guestEntraID.SignInActivity.LastSignInDateTime) continue } if (($guestEntraID.SignInActivity.LastSignInDateTime -lt $inactiveDate) -and ($guestEntraID.SignInActivity.LastNonInteractiveSignInDateTime -lt $inactiveDate)) { Write-Output ("[info] " + $body -f $guestEntraID.DisplayName, $guestEntraID.SignInActivity.LastSignInDateTime) Remove-MgUser -UserId $guestEntraID.Id } } catch { Write-Error -Message ("[error] Error at remove entraID guest $($guestEntraID.DisplayName), message: $($_.Exception.Message)") } } |
3. Wurde der Code eingefügt, auf „Speichern“ und anschließend auf „Veröffentlichen“ klicken.
Berechtigungen zuweisen
Die verwaltete Identität benötigt Rechte, um, mit der Microsoft Graph API kommunizieren zu können. Hierfür gibt es keine GUI und die Befehle müssen mit PowerShell ausgeführt werden.
In dem PowerShell Schnipsel müssen die Variablen $TenantID, $DisplayNameOfMSI und $PermissionName mit den aktuellen Werten ergänzt werden, um anschließend die Berechtigungen für AuditLog.Read.All und User.ReadWrite.All hinzufügen zu können.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$TenantID="<your tenant id>" $GraphAppId = "00000003-0000-0000-c000-000000000000" $DisplayNameOfMSI="<name of managed identity>" $PermissionName = "User.ReadWrite.All" Install-Module AzureAD Connect-AzureAD -TenantId $TenantID $MSI = (Get-AzureADServicePrincipal -Filter "displayName eq '$DisplayNameOfMSI'") $GraphServicePrincipal = Get-AzureADServicePrincipal -Filter "appId eq '$GraphAppId'" $AppRole = $GraphServicePrincipal.AppRoles | Where-Object {$_.Value -eq $PermissionName -and $_.AllowedMemberTypes -contains "Application"} New-AzureAdServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $GraphServicePrincipal.ObjectId -Id $AppRole.Id |
Zusätzliche PowerShell Module installieren
Damit die verwendeten Module geladen werden, müssen wir diese in unserem Automation Account importieren.
- Navigieren zum Automatisierungskonto und unter dem Menüpunkt „Module“ auf „Ein Modul hinzufügen“ klicken.
Hier wählen wir folgende Module aus der PS Gallery aus:
- Microsoft.Graph.Authentication
- Microsoft.Graph.Users
Geplante Aufgabe einrichten und testen
Wenn alle Schritte durchgeführt sind, müssen wir noch einen Timer einstellen und das Runbook testen für die automatische Löschung inaktiver Gastaccounts.
Dazu wählen wir wieder unser Runbook aus und erstellen einen neuen Timer. In unserem Fall führen wir das Skript täglich aus.
Nachdem wir den Timer eingestellt haben, starten wir das Runbook in der Übersichtsseite, dort können wir auch die Logeinträge einsehen, die unser Skript erstellt hat.
Fazit
Die Automatisierung der Löschung inaktiver Gastaccounts mithilfe von Azure Automation Runbooks stellt sicher, dass unser Verzeichnis stets aktuell und sicher bleibt. Durch die regelmäßige Überprüfung und Bereinigung des Verzeichnisses können potenzielle Sicherheitslücken geschlossen und administrative Aufwände reduziert werden. Azure Automation bietet hierbei eine flexible und skalierbare Lösung, die sich nahtlos in unsere bestehenden Arbeitsabläufe integrieren lässt.
my-IAM RealIdentity zur Bereitstellung von Identitäten jeder Art
Unser Cloud-Service my-IAM RealIdentity ermöglicht ein verteiltes Identitätsmanagement:
RealIdentity sammelt die Identitätsdaten aus den verschiedensten Quellsystemen, sortiert, kombiniert, bereinigt und aktualisiert die Daten und
stellt sie für Anwendungen jeglicher Art zur Verfügung. Demzufolge nutzen Unternehmen RealIdentity als Hauptquelle für ihre Identitätsdaten, die sie in externen Anwendungen benötigen.
Sie können unser Team auch telefonisch erreichen, unter
+49 89 215 442 40.