Hintergrund
Für einige Berechtigungen ist es hilfreich diese an die Mitgliedschaft in bestimmten Gruppen zu binden. Leider sind nicht alle Berechtigungen an eine Gruppe zu binden. Das bezieht sich zum Beispiel auf zugelassene Exchange Protokolle. Es könnte also sinnvoll sein eine AzureAD Gruppe zu verwenden dessen Mitglieder automatisch für die Nutzung von SMTP oder die Nutzung von IMAP/POP3 aktiviert werden ohne, dass man manuell in die Exchange Administration eintauchen muss. Diese Gruppe kann zum Beispiel auch aus dem OnPrem AD synchronisiert werden. Somit kann man dort auch direkt die Protokolle für einen Nutzer administrieren.
Ausblick
Es sind auch noch weitere Use-Cases denkbar so zum Beispiel die auomatische Verwaltung von delegierten Berechtigungen auf Shared Mailboxen. Wenn es für jede Shared Mailbox eine korrespondierende AzureAD Gruppe mit Self-Servie Group Membership Administration geben würde könnte man die Verwaltung der Zugriffe auf eine Shared Mailbox in die Hände des Owners dieser AzureAD Gruppe legen. Außerdem könnte man diese Berechtigungen durch die Access Review Funktion regemäßig prüfen.
Voraussetzungen
Um eine Automatiserung der Exchange Administration vorzunehmen gibt es verschiedene Wege. Dieser Artikel beschäftigt sich mit der Automatisierung durch die Nutzung von Azure Automate. Die Vorteile sind, dass man keine eigene Infrastruktur für das Ausführen von Runbooks betreiben muss und die übliche Azure Infrastruktur für das Monitoring verwenden kann. Weiterhin kann man innerhalb von Azure Automate sowohl OnPremise Runbooks als auch Runbooks die Online laufen sollen gemeinsam verwalten. Gegenüber den klassichen geplanten Tasks auf einem Service bietet Azure Automate außerdem den Vorteil die Protokoller aller Ausführungen einfach einzusehen. Ein weiterer Aspekt ist die Authentifierung von Zugriff des Skripts welches Dinge automatisieren soll auf die Resourcen die zur Anpassung von Konfigurationen erforderlich sind. Dies lässt sich OnPremise durch ein Zertifikat und ein Service Principal im AzureAD lösen. Im Fall von Azure Automate ist diese Identität durch Microsoft verwaltet. Ihr können direkt Berechtigungen die notwendig sind zugewiesen werden.
Azure Automate
Zunächst muss eine neue Azure Automate Instanz erstellt werden. Bei der Erstellung der Instanz wählen wir aus, dass eine System Assigned Identity verwendet werden soll. Diese werden wir später mit den notwendigen Berechtigungen ausstatten um Exchange Online Konfigurationen durchzuführen.
Berechtigungen
Die Zuweisung der notwendigen Berechtigungen geht nur teilweise per GUI. Die Zuweisung der API Berechtigungen lassen sich nur per Graph API erledigen. Um hier nicht zu viele Wege zu vermischen ist nachfolgend sowohl die Einrichtung der API-Berechtigungen als auch die Zuweisung der Azure AD Rolle per Graph API beschrieben.
Für einen einfachen Zugang zur Graph API bietet sich das Powershell Modul an. Wir gehen an dieser Stelle davon aus, dass dies bereits auf dem System installiert ist. Im ersten Schritt verbinden wir uns mit dem Graph API. Hier werden direkt die notwendigen Scopes angefragt. In diesem Fall möchten wir die folgenden Konfigurationen vornehmen:
- Zuweisung einer Approlle zu einem ServicePrincipal (Application.ReadWrite.All)
- Auslesen der vorhanden Azure AD Rollen (Directory.Read.All)
- Zuweisen der Exchange Administrator Rolle (RoleManagement.ReadWrite.Directory)
- Zuweisen der Graph Rolle (AppRoleAssignment.ReadWrite.All)
Mit dem nachfolgenden Befehl erfolgt die Anmeldung mit den notwendigen Berechtigungen:
|
|
Zuweisung der API-Berechtigungen EXO
Um der Identitiät unter der die Runbooks der Azure Automate Instanz laufen Berechtigungen zuzuweisen benöitgen wir zunächst deren Id. Diese lässt sich mit dem nachfolgenden Befehl abrufen. Dort ist der Name der Azure Automate Instanz einzutragen.
|
|
Mögliche Berechtiungen sind Rollen auf einer spezfisichen App die ebenfall im AzureAD als solche registriert ist. In unserem Fall geht es um die Exchange Online API. Diese ist unter dem Namen “Office 365 Exchange Online” zu finden. Der nachfolgende Befehl gibt deren Id aus:
|
|
Eine Anwendung kann mehr als eine Rolle zur Nutzung bereitstellen. In unserem Fall möchten wir unserer Runbook Identität die “Exchange.ManageAsApp” Berechtigun erteilen und wir interessieren uns für deren Id. Mit dem folgenden Befehl wird die Id ausgegeben:
|
|
Mit allen notwendigen Ids können wir nun die eigentliche Zuweisung erledigen. Der nachfolgende Befehl macht dies auf Basisd der vorher ermittelten Informationen:
|
|
Zuweisung der API-Berechtigungen Graph
Neben den Exchange Online Berechtigungen muss auch die Zustimmung zum auslesen der Mitgleider einer Gruppe gegeben werden.
|
|
Zuweisung AzureAD Rolle
Nachdem alle Berechtigungen gesetzt worden sind, benötigt die Identität der Automate Instanz die passende Azure Active Directory Rolle. Deren Id müssen wir zunächst ermitteln. Das passiert mit dem nachfolgenden Befehl:
|
|
Mit der Id der Rolle und der Id der Identität unseres Automation Accounts können wir die Zuweisung vornehmen:
|
|
Die erfolgreiche Zuweisung der Berechtigungen kann mit der ID im Azure Portal unter Enterprise-Apps nachverfolgt werden.
Installation benötigter Module in der Azure Automate Instanz
Damit unser Powershell-Script läuft, müssen wir zunächst alle erforderlichen Module installieren. Hierfür gehen wir in unsere Automate-Instanz und wählen auf der linken Seite den Tab Module. Anschließend können wir Module hinzufügen. Für die gruppenbasierte SMTP Aktivierung benötigen wir folgdende Module:
- Az.Accounts
- PackageManagement
- PowerShellGet
- ExchangeOnlineManagement
- Microsoft.Graph.Authentication
- Microsoft.Graph.Groups
Alle Module müssen in der Version 5.1 installiert werden.
Erstellung des Powershell Runbooks in Azure Automate
Nachdem unsere Module bereit stehen, können wir uns an die Erstellung des Powerautomate Scriptes setzen. Hierfür erstellen wir in unserer Instanz unter dem Tab Runbooks ein neues Runbook. Die Laufzeitversion beträgt 5.1, der Typ ist Powershell.
Anschließend klicken wir auf bearbeiten und erstellen unser Script. Bei den nachfolgenden Script muss der Tenantname und die ID der Gruppe aller SMTP Nutzenden ersetzt werden. Anschließend können wir unser Script im Berarbeitungsmenü unter der Auswahl Testbereich testen.
|
|
Liveschaltung des Scriptes
Zuletzt wird das Runbook veröffentlicht und eine stündliche Ausführung konfiguriert.