Ameer - stock.adobe.com

Microsoft 365: Aufgaben mit Azure Functions automatisieren

Azure Functions automatisiert Microsoft-365-Aufgaben wie Benutzerbereitstellung, Gruppenverwaltung und Massen-Updates und ermöglicht flexible, skalierbare Workflows.

Microsoft 365 bietet effiziente Verwaltungsfunktionen für die meisten administrativen Anforderungen, aber bestimmte komplexe Szenarien erfordern fortschrittlichere Automatisierungs- und Anpassungsansätze. Azure Functions ist eine Option, mit der die Verwaltungsfunktionen von Microsoft 365 über herkömmliche Grenzen hinaus erweitert werden können.

Die Verwaltung von Benutzerattributen wie Berufsbezeichnungen, Abteilungen oder Kontaktinformationen in großen Unternehmen kann schwierig sein. Azure Functions ist ein serverloser Computerdienst von Microsoft, den Microsoft-365-Administratoren für eine Vielzahl von Verwaltungsaufgaben im Zusammenhang mit Benutzern und Gruppen auf der Cloud-Collaboration-Plattform verwenden können. Mit seiner vielseitigen Triggerfunktionalität bietet Azure Functions eine Flexibilität, die native Microsoft 365 Tools nicht bieten können. Sie können damit Benutzerkonten dynamisch bereitstellen, den Gruppenzugriff mit differenzierten Steuerungsoptionen verwalten oder Massenattributaktualisierungen ausführen. In diesem Artikel wird erläutert, wie Sie erweiterte Automatisierungsroutinen für mehr Effizienz und Anpassungsmöglichkeiten bei der Verwaltung von Benutzern und Gruppen bereitstellen können.

Microsoft-365-Benutzer- und Gruppenaufgaben mit Azure Functions automatisieren

Durch die Automatisierung des Hinzufügens und Entfernens von Benutzern in Microsoft 365 kann die Arbeitslast von Administratoren erheblich reduziert werden. Indem Sie Azure Functions so konfigurieren, dass es auf Ereignisse wie Aktualisierungen aus dem HR-System oder bestimmte E-Mail-Anfragen reagiert, können Sie die Erstellung oder Löschung von Benutzerkonten automatisieren. Dadurch wird sichergestellt, dass Benutzer bei Bedarf Zugriff haben und die Sicherheit dieser Konten während ihres gesamten Lebenszyklus gewährleistet ist.

Azure Functions ist in der Lage, Gruppenmitgliedschaften und Zugriffskontrollen dynamisch zu verwalten. Es kann Gruppenmitgliedschaften basierend auf Faktoren wie Benutzerrollen, Projekt oder Standort anpassen, um Zugriffsebenen an Unternehmensrichtlinien und Änderungen anzupassen.

Integration mit Produkten und Diensten von Drittanbietern

Ein weiterer Vorteil von Azure Functions ist die Möglichkeit, die Verwaltung von Microsoft 365 in Produkte und Dienste von Drittanbietern zu integrieren. Azure Functions interagiert mit externen APIs und Diensten, um umfassende Verwaltungs-Workflows zu erstellen, die externe Identitätsanbieter, Sicherheits-Tools oder Produktivitätsanwendungen umfassen.

Azure Functions für die Verwaltung von Microsoft 365 bereitstellen

Das vielseitige serverlose Computing-Framework Azure Functions bietet Microsoft-365-Administratoren ein erweitertes Toolkit zum Automatisieren und Anpassen von Benutzer- und Gruppenverwaltungsaufgaben. In diesem Abschnitt werden praktische Anwendungen von Azure Functions zur Optimierung der Verwaltung von Microsoft-365-Umgebungen behandelt, wobei der Schwerpunkt auf dynamischer Bereitstellung, angepasster Gruppenverwaltung, Massenaktualisierungen von Benutzerattributen und erweiterter Überwachung liegt.

Dynamische Bereitstellung und Aufhebung der Bereitstellung

Die dynamische Bereitstellung und Aufhebung der Bereitstellung umfasst das automatische Erstellen oder Entfernen von Benutzerkonten basierend auf den Anforderungen der Organisation, wodurch manuelle Arbeit reduziert wird und das Betriebsteam effizienter arbeiten kann. Diese Automatisierung passt die Zugriffsrechte der Benutzer an ihren Status an, beispielsweise bei Änderungen der Beschäftigungsverhältnisse, und gewährleistet so Sicherheit und Compliance.

Um den Auslöser zu konfigurieren, richten Sie entweder einen HTTP-Auslöser oder einen geplanten Auslöser in Azure Functions ein. Der Auslöser überwacht Ereignisse, die eine Änderung des Benutzerstatus anzeigen, wie Aktualisierungen im HR-System. Als Nächstes erstellen Sie ein PowerShell-Skript, das eine Verbindung zur Microsoft Graph-API herstellt, um je nach Trigger Benutzerkonten in Microsoft 365 zu erstellen oder zu löschen. Das Skript sollte vielseitig genug sein, um verschiedene Szenarien wie Neueinstellungen oder Kündigungen zu bewältigen. Testen Sie das Skript nach der Entwicklung gründlich in einer Nicht-Produktionsumgebung, um sicherzustellen, dass es wie vorgesehen funktioniert. Sobald das Skript verifiziert ist, stellen Sie es bereit, um Benutzerkonten dynamisch zu verwalten. Microsoft aktualisiert seine Cloud-basierten Produkte ständig. Daher ist es wichtig, den Code regelmäßig zu überprüfen, um mit den Microsoft-365-APIs oder den Richtlinien Ihres Unternehmens auf dem neuesten Stand zu bleiben.

Angepasste Gruppenverwaltung und Zugriffskontrolle

Durch die Anpassung der Gruppenverwaltung und Zugriffskontrolle können Sie den Zugriff auf Ressourcen präzise steuern und sicherstellen, dass Benutzer über die erforderlichen Berechtigungen entsprechend ihrer Rollen und Verantwortlichkeiten verfügen. Dieser Grad an Anpassung verhindert unbefugten Zugriff und erhöht so die Sicherheit.

Sie können Azure Functions mit Triggern basierend auf Benutzeraktivitäten oder Administratoranforderungen verwenden, um den Benutzerzugriff durch Ändern von Gruppenmitgliedschaften und Zugriffsberechtigungen zu automatisieren. Darüber hinaus können Sie Skripte verwenden, um Gruppenmitgliedschaften und Zugriffsebenen in Microsoft 365 basierend auf Projektaufgaben, Abteilungsänderungen oder anderen Kriterien automatisch zu aktualisieren.

Massenverwaltung von Benutzerattributen

Die manuelle Verwaltung von Attributen für viele Benutzer kann eine mühsame und zeitaufwändige Aufgabe sein. Ohne Automatisierung können leicht Fehler auftreten. Mit der Massenverwaltung von Benutzerattributen über Azure Functions kann die Automatisierung jedoch Konsistenz und Genauigkeit für die gesamte Benutzerbasis gewährleisten. Das allgemeine Verfahren für diese Aufgabe umfasst die folgenden Schritte:

1. Mechanismus für Massenaktualisierungen: Erstellen Sie eine Azure-Funktion, die durch ein externes Ereignis, beispielsweise eine Datenbankaktualisierung oder einen vorab festgelegten Zeitplan, ausgelöst wird.

2. Skriptausführung: Die Funktion führt ein Skript aus, um Benutzerattribute über die Microsoft Graph-API in großen Mengen zu ändern. Dies kann die Aktualisierung von Berufsbezeichnungen, Abteilungsnamen oder Kontaktinformationen umfassen.

3. Validierung und Rollout: Implementieren Sie Validierungsprüfungen innerhalb des Skripts, um fehlerhafte Datenaktualisierungen zu verhindern. Nach gründlichen Tests stellen Sie die Funktion für die fortlaufende, automatisierte Verwaltung von Benutzerattributen bereit.

Erweiterte Überwachung und Berichterstellung

Für Sicherheit, Compliance und Betriebsüberwachung sind eine umfassende Überwachung und benutzerdefinierte Berichterstellung unerlässlich. Mit Azure Functions können Sie die Berichterstellung und Warnmeldungen automatisieren und so Echtzeitinformationen zu Benutzer- und Gruppenaktivitäten bereitstellen. Dies sind die Komponenten für diese Art von automatisierten Aufgaben:

  • Datenerfassung: Richten Sie Azure Functions so ein, dass Daten zu Benutzer- und Gruppenaktivitäten aus verschiedenen Quellen, darunter Microsoft 365, mit Triggern wie HTTP-Anforderungen oder Aktualisierungen von Protokolldateien erfasst werden.
  • Berichterstellung: Verwenden Sie Skripte in Azure Functions, um diese Daten zu verarbeiten und Berichte oder Dashboards mit wertvollen Einblicken in das Benutzerverhalten, Änderungen der Gruppenmitgliedschaft und Zugriffsmuster zu erstellen.
  • Warnmechanismus: Durch die Integration einer Logik zur Erkennung von Anomalien oder Compliance-Verletzungen können Azure Functions Echtzeitwarnungen an Administratoren oder Sicherheitsteams senden, damit diese umgehend Maßnahmen ergreifen können.

Beispiele für dynamische Bereitstellung und Deprovisioning

In diesem Beispiel müssen Sie zunächst die Functions-App erstellt und einen HTTP-Trigger hinzugefügt haben. Informationen dazu finden Sie in der folgenden Dokumentation.

Als Nächstes müssen Sie die App für Microsoft Graph mit den folgenden Berechtigungen registrieren:

  • Directory.ReadWrite.All
  • Group.ReadWrite.All
  • GroupMember.ReadWrite.All
  • Sites.FullControl.All
  • Sites.Manage.All
  • Sites.Read.All
  • Sites.ReadWrite.All
  • User.Read
  • User.ReadWrite.AII

Der folgende Code erteilt die Berechtigung zum Senden einer JSON-Anforderung an die Azure-Funktions-App:

{
"displayName": "John Doe",
"mailNickname": "johndoe",
"userPrincipalName": "[email protected]",
"passwordProfile": {
"password": "Pass@word!"
},
"groupName": " Mark 8 Project Team"
}

Der Code für den HTTP-Trigger lautet:

using namespace System.Net
param($Request, $TriggerMetadata)
 
# Nur zu Testzwecken
$clientId = „3dc8e6d6-e7f5-4e75“
$tenantId = „f5dba133-4a2b-40d4“
$clientSecret = „6328Q~em6eORoAMkQs1jFaDq~“
 
$securePassword = ConvertTo-SecureString $clientSecret `
-AsPlainText `
-Force
$credential = New-Object System.Management.Automation.PSCredential ($clientId, $securePassword)
 
Connect-MgGraph `
-TenantId $tenantId `
-ClientSecretCredential $credential `
-NoWelcome
 
$body = $Request.Body | ConvertFrom-Json | ConvertFrom-Json
 
# Projektgruppe abrufen
$groupName = „Mark 8 Project Team“
$group = Get-MgGroup -Filter „displayName eq ‚$groupName‘“
$groupId = $group.Id
 
try {
$newUser = New-MgUser -AccountEnabled `
-DisplayName $body.displayName `
-MailNickname $body.mailNickname `
-UserPrincipalName $body.userPrincipalName `
-PasswordProfile @{
ForceChangePasswordNextSignIn = $true;
Password = $body.passwordProfile.password
}
 
New-MgGroupMember -GroupId $groupId -DirectoryObjectId $newUser.Id
$result = @{
Id = $newUser.Id
Displayname = $newUser.Displayname
UserName = $newUser.UserPrincipalName
GroupName = $group.DisplayName
}
} catch {
$result = @{
Error = $_.Exception.Message
}
}
 
Disconnect-MgGraph
 
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $result
Headers = @{
„Content-Type” = „application/json”
}
})

Bei der Ausführung zu Testzwecken im Azure-Portal mit Test/Run werden die ID, der Anzeigename und der UserPrincipalName des neu erstellten Entra ID-Benutzerkontos zurückgegeben. Außerdem wird der erstellte Benutzer zur angegebenen Gruppe hinzugefügt. Die Funktion kann auch mit dem folgenden Ansatz aus PowerShell aufgerufen werden:

$uri = ‚https://func.azurewebsites.net/api/UserProvision?code=KQd1bEB6BlIu2zK-dDLYPNpzh72IGolua8lAzFuEl2A==‘
 
$userProperties = @{
displayName = „John Doe“
mailNickname = „johndoe“
userPrincipalName = „[email protected]“
passwordProfile = @{
password = „Pass@word!!“
}
groupName = „Mark 8 Project Team“
}
 
$jsonBody = $userProperties | ConvertTo-Json | ConvertTo-Json
 
$headers = @{
„Content-Type“ = „application/json“
}
 
$response = Invoke-RestMethod `
-Uri $uri `
-Method Post `
-Body $jsonBody `
-Headers $headers
 
Write-Output $response

So führen Sie die Verwaltung von Benutzerattributen in großen Mengen durch

Um Massenaktualisierungen durchzuführen, verwenden Sie die bereits im vorherigen Beispiel erstellte Functions-App, um einige Benutzer zu generieren. Zunächst werden die Benutzerkonten erstellt:

$userAccounts = @(
@{
displayName = „John Doe“
mailNickname = ‚johnd‘
userPrincipalName = „[email protected]“
passwordProfile = @{
password = „Pass@word1!!“
}
groupName = „Mark 8 Project Team“
},
@{
        displayName = „Jane Doe“
        mailNickname = ‚janed‘
        userPrincipalName = „[email protected]“
        
passwordProfile = @{
            password = „Pass@word2!!“
        }
        groupName = „Mark 8 Project Team“
    },
    @{
        displayName = „Alex Smith“
        mailNickname = ‚alexs‘
        userPrincipalName = „[email protected]“
passwordProfile = @{
            password = „Pass@word3!!“
        }
        groupName = „Mark 8 Project Team“
    },
    @{
       
displayName = „Maria Garcia“
        mailNickname = ‚mariag‘
        userPrincipalName = „[email protected]“
passwordProfile = @{
password = „Pass@word4!!“
}
groupName = „Mark 8 Project Team“
},
    @{
        displayName = „James Johnson“
        mailNickname = ‚jamesj‘
        userPrincipalName = „[email protected]“
passwordProfile = @{
password = „Pass@word5!!“
}
groupName = „Mark 8 Project Team“
}
)

Der folgende PowerShell-Code ruft den HTTP-Trigger auf:

using namespace System.Net
param($Request, $TriggerMetadata)
# Nur für Testzwecke
$clientId = "3dc8e6d6-e7f5-4e75"
$tenantId = "f5dba133-4a2b-40d4"
$clientSecret = "6328Q~em6eORoAMkQs1jFaDq~"
 
$securePassword = ConvertTo-SecureString $clientSecret -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($clientId, $securePassword)
 
Connect-MgGraph `
-TenantId $tenantId `
-ClientSecretCredential $credential `
-NoWelcome
 
$usersToUpdate = $Request.Body | ConvertFrom-Json | ConvertFrom-Json
 
foreach ($user in $usersToUpdate) {
    $userId = Get-MgUser `
-Filter "userprincipalname eq '$($user.userPrincipalName)'" | `
Select-Object Id
           Write-Output $userId
 
try {
                Update-MgUser -UserId $userId.Id `
                           -GivenName $user.firstName `
                           -Surname $user.lastName `
                           -JobTitle $user.jobTitle `
                           -Department $user.department `
                           -OfficeLocation $user.office
 
           Write-Output "Successfully updated user: $userId"
    } catch {
           Write-Error "Failed to update user: $userId"
    }
}
 
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [System.Net.HttpStatusCode]::OK
    Body = $userId
})

Nachdem die Konten hinzugefügt wurden, erstellen Sie einen neuen HTTP-Trigger und führen Sie mit dem folgenden Code eine Massenaktualisierung der Benutzereigenschaften durch:

using namespace System.Net
param($Request, $TriggerMetadata)
 
# Nur für Testzwecke
$clientId = "3dc8e6d6-e7f5-4e75"
$tenantId = "f5dba133-4a2b-40d4"
$clientSecret = "6328Q~em6eORoAMkQs1jFaDq~"
 
$securePassword = ConvertTo-SecureString $clientSecret -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($clientId, $securePassword)
 
Connect-MgGraph `
-TenantId $tenantId `
-ClientSecretCredential $credential `
-NoWelcome
 
$usersToUpdate = $Request.Body | ConvertFrom-Json | ConvertFrom-Json
 
foreach ($user in $usersToUpdate) {
    $userId = Get-MgUser `
-Filter "userprincipalname eq '$($user.userPrincipalName)'" | `
Select-Object Id
           Write-Output $userId
 
try {
                Update-MgUser -UserId $userId.Id `
                           -GivenName $user.firstName `
                           -Surname $user.lastName `
                           -JobTitle $user.jobTitle `
                           -Department $user.department `
                           -OfficeLocation $user.office
 
           Write-Output "Successfully updated user: $userId"
    } catch {
           Write-Error "Failed to update user: $userId"
    }
}
 
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [System.Net.HttpStatusCode]::OK
    Body = $userId
})

Dieser Code unterstützt sowohl die Arbeit mit einem einzelnen Konto als auch mit einer verschachtelten Struktur. Der folgende Code aktualisiert beispielsweise die Benutzerattribute aller im vorherigen Beispiel erstellten Konten:

$usersToUpdate = @"
[
    {
        "firstName": "John",
        "lastName": "Doe",
        "jobTitle": "Project Manager",
        "department": "Consulting",
        "office": "Chicago",
        "userPrincipalName": "[email protected]"
    },
    {
        "firstName": "Jane",
        "lastName": "Doe",
        "jobTitle": "Managing Director",
        "department": "Consulting",
        "office": "New York",
        "userPrincipalName": "[email protected]"
    }
]
"@
 
$uri = "https://func.azurewebsites.net/api/BulkAttributes?code=KQd1bEB6BlIu2zK-dDLYPNpzh72IGolua8lAzFuEl2A=="
 
$headers = @{
"Content-Type" = "application/json"
}
 
$jsonBody = $usersToUpdate | ConvertTo-Json
 
try {
$response = Invoke-RestMethod `
-Uri $uri `
-Method Post `
-Headers $headers `
-Body $jsonBody
Write-Host "Successfully updated user accounts."
     } catch {
Write-Error "Failed to update user accounts. Error: $_"
     }
}

Der Code aktualisiert die Attribute der im JSON-Objekt angegebenen Benutzer mit den entsprechenden Werten in Entra ID.

Erfahren Sie mehr über Cloud Computing