Wenn ihr Exchange Online per Azure Automation steuern wollt, dann ist Managed Identities was ihr benutzen solltet (diese Aussage wurde zuletzt geprüft im Juni 2024).
Legacy Ansatz
Früher wurden dafür auch gerne RunAs Accounts oder Plaintext Credentials (🤢) verwendet, aber das gilt mittlerweile als veraltet. RunAs Accounts sind zum Herbst 2023 abgekündigt und zu Klartext-Kennwörtern muss ich nix sagen, oder? Eventuell bieten sich noch App Registrierungen in Entra ID an, aber wenn ihr wirklich einfach nur per Azure Automation ein paar Exchange Online Einstellungen automatisieren wollt, ist das eigentlich nicht notwendig.
Managed Identities + Exchange Online PowerShell
Eine System Assigned Managed Identity weist einer Azure Resource eine Identität zu. Dieser Identität können Rechte zugewiesen werden, z.B. für die Administration von Exchange Online oder bestimmten Azure Ressourcen. Die Verwaltung der Identität erfolgt automatisch, es muss also kein Passwort regelmäßig geändert werden oder ähnliches. Und wenn die dazugehörige Ressource (in dem Fall das Azure Automation Konto) gelöscht wird, wird die System Assigned Managed Identity automatisch mitgelöscht. Das Exchange Online PowerShell Modul unterstützt ab Version 3 Managed Identities für die Authentifizierung.
Theoretisch sollte das ganze auch mit einer User Assigned Managed Identities funktionieren. Dabei wird die Managed Identity selbst erzeugt und kann dann mehreren Azure Ressourcen zugewiesen werden. Für manche Szenarien sicher auch praktisch.
Managed Identity aktivieren
Ich bevorzuge es System Assigned Managed Identities zu verwenden, da so effektiv nur eine Ressource die Rechte erhält. Ihr könnt im Automation Account unter “Account Settings” -> “Identity” prüfen, ob eine Managed Identity verwendet wird. Hier ein Beispiel-Screenshot mit einer vorhandenen Managed Identity: Der Status steht auf “On” und es wird eine Object ID aufgeführt.
Die Zuweisung der “Exchange Administrator”-Rolle an die Managed Identity erfolgt dann anschließend per PowerShell/Graph API.
Konfiguration per PowerShell
In diesem Abschnitt wird beschrieben, wie ihr die Konfiguration per PowerShell durchführen könnt. Die Zuweisung der “Exchange Administrator”-Rolle an eine Managed Identity erfolgt einmalig per lokaler PowerShell - der nachfolgende Code wird also nicht in Azure Automation als Runbook ausgeführt.
Voraussetzungen:
- Das Microsoft.Graph PowerShell Modul
- Ein Benutzeraccount mit der Admin-Rolle “Privileged Role Administrator” oder “Globaler Administrator”
Falls ihr das Modul noch nicht installiert habt, könnt ihr es wie folgt installieren (mehr Infos hier):
|
|
Anschließend könnt ihr den nachfolgenden Code verwenden. Der Code ist inline kommentiert, also erkläre ich jetzt hier nichts weiter.
|
|
Modul hinzufügen
Egal ob ihr bereits “Runtime Environments” verwendet, oder noch die “Old experience”, ihr müsst das ExchangeOnlineManagement PowerShell Modul hinzufügen. Im Falle der “Old experience” zum gesamten Automation Account. Wenn ihr Runtime Environments verwendet, dann fügt das Modul stattdessen zu einem Runtime Environment hinzu bzw. legt ein neues Runtime Environment an. Das Modul wird sowohl von Windows PowerShell, als auch PowerShell 7 unterstützt.
Exchange Online PowerShell verwenden
Folgender Beispiel Code für ein Runbook verbindet sich als System Managed Managed Identity mit der Exchange Online Verwaltung, führt einen Exchange Online PowerShell Befehl aus und trennt dann die Verbindung zu Exchange Online wieder.
|
|
How-to Video
Ich habe auch ein Video erstellt, in dem zeige wie Exchange Online per Azure Automation gesteuert werden kann. Dabei wird eine System Assigned Managed Identity für das Azure Automation Konto verwendet und dieser Identität die Rechte zur Exchange Verwaltung zugewiesen.
Weiterführende Links
Die offizielle Microsoft Dokumentation dazu ist hier zu finden: https://learn.microsoft.com/en-us/powershell/exchange/connect-exo-powershell-managed-identity?view=exchange-ps