In diesem Beitrag möchte ich euch zeigen, wie man einer Managed Identity granulare Berechtigungen in Exchange Online vergeben kann.
Managed Identities sind eine super Sache und sicherheitstechnisch auch eine Weiterentwicklung zu einer App Registration, weil dort weder ein Zertifikat noch ein geheimer Schlüssel benötigt wird.
Viele Beispiele im Internet zeigen, wie man in Azure Automation eine Verbindung zu Exchange Online herstellen kann. Allerdings nutzen diese Beispiele immer die Rolle Exchange Administrator
, was in den meisten Fällen eine viel zu hohe Berechtigung darstellt und hoffentlich nicht genutzt wird.
In diesem Beispiel haben wir eine Azure Function App, die zum Lesen der Exchange Mailboxen (Konfiguration, nicht der Inhalt) genutzt werden soll.
Natürlich müssen wir noch die notwendigen Module in unserer Function App hinzufügen.
Und auch noch die profile.ps1
Datei anpassen.
Für dieses Beispiel nehmen wir an, dass die Exchange Berechtigung View-Only Recipients
ausreichend ist.
Wir legen also im Exchange Admin Center eine neue Rolle dafür an.
Wir vergeben einen Namen und optional eine Beschreibung für die Rolle.
Dann vergeben wir die genannte Berechtigung für unsere neue Rolle.
Admins müssen wir an der Stelle nicht unbedingt angeben, deshalb lassen wir diese erstmal leer.
Danach können wir die Rolle erstellen und finden sie auch in der Übersicht.
Nun müssen wir „nur“ noch unsere Managed Identity in die neue Rolle aufnehmen, damit wir mit unserer Function App auf Exchange Online zugreifen können.
Am einfachsten geht das über ein kleines PowerShell Skript, auch weil es für die Aktionen keine grafische Oberfläche gibt.
# Name der Azure Function App bzw. der Managed Identity $managedIdentityDisplayName = 'fei-exchangetest' # Exchange Rolle $exchangerole = 'View-Only Recipients' # Name des Tenant $organizationName = '<tenant>.onmicrosoft.com' # Notwendige Module validieren bzw. installieren if(-not (Get-Module Az -ListAvailable)){ Install-Module Az -Scope CurrentUser -Force } if(-not (Get-Module Microsoft.Graph -ListAvailable)){ Install-Module Microsoft.Graph -Scope CurrentUser -Force } if(-not (Get-Module ExchangeOnlineManagement -ListAvailable)){ Install-Module ExchangeOnlineManagement -Scope CurrentUser -Force } Connect-AzAccount $adServicePrincipal = Get-AzADServicePrincipal -Filter "displayName eq '$($managedIdentityDisplayName)'" Connect-MgGraph -Scopes AppRoleAssignment.ReadWrite.All, Application.Read.All, RoleManagement.ReadWrite.Directory $resourceId = (Get-MgServicePrincipal -Filter "AppId eq '00000002-0000-0ff1-ce00-000000000000'").Id # Exchange.ManageAsApp (die GUID ist in allen Tenants gleich) $appRoleId = "dc50a0fb-09a3-484d-be87-e023b12c6440" # Exchange.ManageAsApp Berechtigung hinzufügen New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $adServicePrincipal.Id -PrincipalId $adServicePrincipal.Id -AppRoleId $appRoleId -ResourceId $resourceId Connect-ExchangeOnline -Organization $organizationName $exoServicePrincipalDisplayName = "Service Principal $managedIdentityDisplayName" # Neuen Service Principal erstellen New-ServicePrincipal -AppId $adServicePrincipal.AppId -ObjectId $adServicePrincipal.Id -DisplayName $exoServicePrincipalDisplayName # Service Principal der Rolle hinzufügen Add-RoleGroupMember -Identity $exchangerole -Member $appServicePrincipal.AppId
In den Zeilen 1 bis 6 müssen nur die Variablen für eure Managed Identity, Exchange Online Rolle und Tenant-Name angepasst werden. Den Rest erledigt das Skript für euch. 🙂
Das Ergebnis kann man dann auch über die Web Oberfläche vom Exchange Online Admin Center kontrollieren. Dort sollte unser neu angelegter Service Principal nun in den Berechtigungen der Rolle erscheinen.
Wenn wir jetzt unsere Function App ausführen, können nun alle Postfächer gelesen werden.
Somit habt ihr eine wesentlich granulare Möglichkeit, Berechtigungen für Managed Identities in Exchange Online zu vergeben und müsst nicht immer Administrator-Rechte vergeben.
[…] Dieser Post ist auch auf Deutsch verfügbar […]
[…] Principal zu nutzen. Wie das für Exchange Online funktioniert, habe ich bereits in einem anderen Beitrag beschrieben. Das Vorgehen dazu ist analog, nur eben für Security & […]