Website-Suche

Verwenden von RBAC für Anwendungen mit Azure Automation Managed Identities


Ausweitung von RBAC für Anwendungen auf verwaltete Identitäten

RBAC für Anwendungen ist ein Vorschaumechanismus zur Steuerung des Zugriffs von Azure AD-Apps auf Exchange Online-Postfächer. V3.0 des Exchange Online-Verwaltungs-PowerShell-Moduls unterstützt die Authentifizierung mithilfe von Azure Automation verwalteter Identitäten. Ich verwende gerne verwaltete Identitäten, um geplante Exchange Online-Skripts auszuführen, und es erscheint mir selbstverständlich, RBAC für Anwendungen zu verwenden, um sicherzustellen, dass die für verwaltete Identitäten verwendeten Azure AD-Apps ordnungsgemäß für den Zugriff auf Postfächer autorisiert sind.

Als Beispiel für die Verwendung von RBAC für Anwendungen zur Steuerung einer Azure AD-App, die eine verwaltete Identität zum Ausführen von Skripts verwendet, habe ich beschlossen, das Skript für den Raumpostfach-Nutzungsbericht anzupassen. Das Skript verwendet die Graph-Berechtigung Calendars.Read, um Kalenderinformationen zu extrahieren. Dies ist eine der von RBAC für Anwendungen unterstützten Berechtigungen, daher schien es eine gute und praktische Wahl zu sein, das Prinzip zu demonstrieren. Die Anpassung eines Skripts, das interaktiv für Azure Automation ausgeführt wird, ist nicht schwierig, erfordert jedoch einige Sorgfalt (hier einige Hinweise).

Die Authentifizierung mit Azure ist ein wesentlicher Unterschied. So erhält der angepasste Code ein Zugriffstoken für die verwaltete Identität und verwendet es, um eine Verbindung zu Exchange Online herzustellen:

# Connect to Microsoft Graph in Azure Automation
Connect-AzAccount -Identity
$AccessToken = Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com"

Connect-ExchangeOnline -ManagedIdentity -Organization office365itpros.onmicrosoft.com

Vorbereitung auf die Automatisierung

Verwaltete Identitäten werden im Kontext eines Azure Automation-Kontos ausgeführt. Allen meinen vorhandenen Azure Automation-Konten sind Graph-Berechtigungen zugewiesen, die zum Ausführen verschiedener Vorgänge erforderlich sind. Der Punkt bei RBAC für Anwendungen besteht darin, dass Exchange Online anhand eines Filters (des Verwaltungsbereichs) bewertet, ob eine App die Berechtigung zum Zugriff auf Postfächer erhalten soll. Um Probleme mit Berechtigungen zu vermeiden, die anderen Konten zugewiesen wurden, habe ich beschlossen, mit einer leeren Tafel zu beginnen und ein neues Azure Automation-Konto namens RBACforApps zu erstellen.

In den meisten Fällen verwenden Skripts, die mit Exchange Online interagieren, Cmdlets im Exchange Online-Verwaltungsmodul. Das ist hier nicht der Fall, da das von mir ausgewählte Skript Daten mit einer Mischung aus Standard-PowerShell-Cmdlets und Graph-API-Anfragen verarbeitet. Allerdings ist ein Skript, das Exchange-Daten umfasst und einige Exchange Online-Cmdlets nicht ausführt, eine Seltenheit. Deshalb füge ich hier Einzelheiten zur Konfiguration des Azure Automation-Kontos hinzu, damit es Exchange Online-Cmdlets ausführen kann.

Zunächst müssen Sie das Exchange Online-Verwaltungs-PowerShell-Modul in das Automatisierungskonto importieren. Wenn Sie das Modul nicht importieren, kann das Konto keine Exchange Online-Cmdlets ausführen. Wenn Sie planen, das Konto zum Ausführen von Cmdlets von anderen Modulen zu verwenden, müssen Sie diese Module ebenfalls importieren.

Wenn das Automatisierungskonto anschließend Exchange Online-Cmdlets ausführen muss, müssen Sie dem Automatisierungskonto die Berechtigung zum Verwalten von Exchange als Administrator zuweisen. Tatsächlich erlauben Sie dem Konto, die Cmdlets so auszuführen, als ob sich ein Administrator bei einer interaktiven PowerShell-Sitzung angemeldet hätte. Um dem Azure Automation-Konto die Rolle Exchange als Anwendung verwalten zuzuweisen, führen Sie diesen PowerShell-Code aus, der Cmdlets aus dem Microsoft Graph PowerShell SDK verwendet:

Connect-MgGraph -Scopes Directory.ReadWrite.All

$ManagedIdentityApp = Get-MgServicePrincipal -Filter "displayName eq 'RBACforApps'"
$ExoApp = Get-MgServicePrincipal -Filter "AppId eq '00000002-0000-0ff1-ce00-000000000000'"
$AppPermission = $ExoApp.AppRoles | Where-Object {$_.DisplayName -eq "Manage Exchange As Application"}
$AppRoleAssignment = @{
"PrincipalId" = $ManagedIdentityApp.Id
"ResourceId" = $ExoApp.Id
"AppRoleId" = $AppPermission.Id
}
New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ManagedIdentityApp.Id -BodyParameter $AppRoleAssignment

Bevor ein Azure Automation-Konto schließlich Exchange Online-Cmdlets ausführen kann, müssen Sie der vom Azure Automation-Konto verwendeten App die Exchange-Administratorrolle zuweisen. Eine Checkliste mit Elementen, die befolgt werden müssen, um sicherzustellen, dass eine App Exchange Online-Cmdlets ausführen kann, finden Sie in diesem Artikel.

Führen Sie einen Basistest durch

Um festzustellen, dass sich das Azure Automation-Konto mit einer verwalteten Identität bei Exchange Online anmelden kann, erstellen Sie ein Test-Runbook, das ein Exchange Online-Cmdlet ausführt. Ein einfacher Get-EXOMailbox-Befehl zum Melden von Details zu einem Postfach reicht aus, um zu überprüfen, ob alles funktioniert.

Bevor wir RBAC für Anwendungen in die Gleichung einführen, sollten wir einen Basistest mit normalen Graph-Berechtigungen durchführen. Dazu weisen wir der RBACforApps-App die Graph-Berechtigungen zu, die für die im Skript ausgegebenen API-Anfragen erforderlich sind (Place.Read.All und Calendars.Read). Fügen Sie dann den Code aus dem Raumpostfach-Nutzungsskript hinzu und stellen Sie sicher, dass es wie gewohnt ausgeführt wird.

Bereiten Sie sich auf die Anwendung von RBAC für Anwendungseinschränkungen vor

Es ist einfach, Raumpostfächer zu finden, indem Sie das Cmdlet Get-EXOMailbox ausführen und den Wert RoomMailbox im Parameter RecipientTypeDetails übergeben. Zum Beispiel:

Get-ExoMailbox -RecipientTypeDetails RoomMailbox | Set-Mailbox -CustomAttribute1 'PublicRoom'

Bei Bedarf können wir später den Zugriff auf das Postfach entfernen, indem wir CustomAttribute1 aktualisieren, um einen anderen Wert zu speichern. Der Test des Skripts hat gezeigt, dass wir einen funktionierenden Code haben. Jetzt entfernen wir die Berechtigung Calendars.Read aus der App RBACforApps. Dadurch wird sichergestellt, dass die verwaltete Identität nur dann auf die Raumpostfächer zugreifen kann, wenn sie die Anforderungen von RBAC für Anwendungen erfüllt.

[Array]$SPPermissions = Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ManagedIdentityApp.Id
$GraphApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'" # Microsoft Graph
$Role = $GraphApp.AppRoles | Where-Object {$_.Value -eq "Calendars.Read"}
$Assignment = $SpPermissions | Where-Object {$_.AppRoleId -eq $Role.Id}
Remove-MgServicePrincipalAppRoleAssignment -AppRoleAssignmentId $Assignment.Id -ServicePrincipalId $ManagedIdentityApp.Id

Jetzt schaffen wir die Grundlage für die RBAC-Anwendungskontrolle über den Zugriff auf die Raumpostfachkalender. Dies geschieht durch die Erstellung von:

  • Ein Dienstprinzipalobjekt in Exchange Online, das auf den Dienstprinzipal der Unternehmens-App verweist, die von der verwalteten Identität verwendet wird.
  • Ein Verwaltungsbereich, der die Raumpostfächer findet.
  • Eine Verwaltungsrollenzuweisung zum Verknüpfen des Exchange Online-Dienstprinzipalobjekts, des Verwaltungsbereichs und der Berechtigung Application Calendars.Read.

Das Ergebnis ist, dass Exchange Online, wenn es einen Versuch der von der verwalteten Identität verwendeten App erkennt, auf Kalender in bestimmten Postfächern zuzugreifen, prüft, ob die Kalender zu den im Verwaltungsbereich definierten Postfächern gehören. Wenn dies zutrifft, erlaubt Exchange Online den Zugriff. Hier sind die Befehle, die ich verwendet habe:

# Grab the Application and Service Principal Identifiers for the app used by the
# managed identity
$SP = Get-MgServicePrincipal -All
$ServicePrincipalId = $SP | Where-Object {$_.displayName -eq "RBACforApps"} | Select-Object -ExpandProperty Id
$AppId = $SP | Where-Object {$_.displayName -eq "RBACforApps"} | Select-Object -ExpandProperty AppId

# Define the service principal object in Exchange Online
New-ServicePrincipal -AppId $AppId -ServiceId $ServicePrincipalId -DisplayName 'RBACforApps'

DisplayName                              ServiceId                                 AppId
-----------                              ---------                                 -----
RBACforApps                              2a492904-9d96-4ece-97e4-c55798a873f5      415e4ba8-635f-4689-b069-22dea1fcfdb3

# Define the management scope for room mailboxes
New-ManagementScope -Name "Room Mailboxes" -RecipientRestrictionFilter "CustomAttribute1 -eq 'PublicRoom'"

Name           ScopeRestrictionType Exclusive RecipientRoot RecipientFilter                   ServerFilter
----           -------------------- --------- ------------- ---------------                   ------------
Room Mailboxes RecipientScope       False                   CustomAttribute1 -eq 'PublicRoom'

# Create the management role assignment to link everything together
New-ManagementRoleAssignment -App $AppId -Role "Application Calendars.Read" -CustomResourceScope "Room Mailboxes"

Testen des selektiven Zugriffs

Da wir die Berechtigung Calendars.Read aus seiner App entfernt haben, ist das Azure Automation-Runbook jetzt auf RBAC für Anwendungen angewiesen, um Zugriff auf Raumpostfachkalender zu erhalten. Überprüfen Sie, ob noch alles funktioniert, indem Sie das Runbook über den Testbereich im Azure Admin Center ausführen. Abbildung 1 zeigt die Ergebnisse. Alles ist gut und wir stellen fest, dass der Vorstandskonferenzraum am stärksten genutzt wird.

Im nächsten Schritt wird der selektive Zugriff getestet. Entfernen Sie den Zugriff der App auf das Postfach „Board Conference Room“, indem Sie das benutzerdefinierte Attribut aktualisieren.

Set-Mailbox -Identity "Board Conference Room" -CustomAttribute1 $Null

Führen Sie das Runbook erneut aus. Dieses Mal gewährt RBAC for Applications keinen Zugriff auf das Postfach des Vorstandskonferenzraums, da es nicht in den für die Rollenzuweisung definierten Verwaltungsbereich fällt und der Raum daher nicht in der Nutzungsstatistik enthalten ist. Denken Sie daran, dass Exchange Online Verwaltungsbereiche für eine bessere Leistung zwischenspeichert. Warten Sie daher 30 Minuten, bevor Sie mit dem aktualisierten Bereich testen. Abbildung 2 zeigt das Ergebnis - wie erwartet ist vom Konferenzraum des Vorstands nichts zu sehen!

Sie können den Runbook-Code, den ich verwendet habe, von GitHub herunterladen.

Kontrolle ist wichtig

RBAC für Anwendungen ermöglicht den selektiven Zugriff für Azure AD-Apps auf Exchange Online-Postfächer. Viele Skripts, die große Mengen an Postfächern verarbeiten, werden als Hintergrund- oder geplante Jobs ausgeführt. Es ist großartig, dass RBAC for Applications mit Skripten funktioniert, die von Azure Automation mit verwalteten Identitäten ausgeführt werden. Die Möglichkeit, die Kontrolle über Benutzerdaten auszuüben, wird immer geschätzt. Es wäre einfach schön, wenn RBAC für Anwendungen SharePoint Online, Teams und andere potenzielle Repositorys mit vertraulichen Daten abdecken würde.

Verwandte Artikel