In diesem Artikel möchte ich euch zeigen, wie man sich mit dem Security & Compliance PowerShell Modul (Connect-IPPSSession
) und Managed Identity verbinden kann.
Die Dokumentation von Microsoft gibt zu dieser Möglichkeit leider keinen Hinweis, deshalb zeige ich das Vorgehen am Beispiel einer Function App in Azure.
Zuerst erstellen wir uns eine Function App in Azure.
Als ersten Schritt aktivieren wir die Managed Identity für unsere Function App.
Im zweiten Schritt müssen wir zuerst unserer Managed Identity noch die grundlegende Berechtigung Exchange.ManageAsApp
zuweisen. Das geht z.B. mit dem folgenden Skript.
# Name der Azure Function App bzw. der Managed Identity $managedIdentityDisplayName = 'fei-blog-seccomp' # 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
In Zeile 2 muss nur der Name der Function App angepasst werden, wenn diese (hoffentlich 😉 ) bei euch anders heißt.
Dann müssen wir der Managed Identity noch eine entsprechende Rolle für die Berechtigungen zuweisen. In diesem Beispiel nehmen wir zur Vereinfachung die Rolle Compliance Administrator
. Allerdings ist auch hier die Empfehlung, für produktive Umgebungen einen entsprechenden Service 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 & Compliance.
Als dritten Schritt der Vorbereitung müssen wir noch die notwendigen Module der Function App hinzufügen. Das funktioniert wie gewohnt über die requirements.psd1
.
Unsere Function App Funktion soll unsere bestehenden Aufbewahrungsrichtlinien zurück liefern. Folgende Richtlinien sind momentan definiert.
Nun erstellen wir uns eine Funktion mit dem Namen Get-CompliancePolicies
in der Function App, die uns genau diese Richtlinien zurück liefert.
Die Funktion hat folgenden Code.
using namespace System.Net # Input bindings are passed in via param block. param($Request, $TriggerMetadata) # Write to the Azure Functions log stream. Write-Host "PowerShell HTTP trigger function processed a request." try { Connect-AzAccount -Identity $accessToken= Get-AzAccessToken -ResourceUrl "https://ps.compliance.protection.outlook.com/" Connect-ExchangeOnline -AccessToken $accessToken.Token ` -Organization '<yourOrganization.onmicrosoft.com>' ` -ConnectionUri 'https://ps.compliance.protection.outlook.com/PowerShell-LiveId' ` -AzureADAuthorizationEndpointUri 'https://login.microsoftonline.com/organizations' $body = Get-RetentionCompliancePolicy | Select Name } catch { # Implement error handling here $body = "Error occured" throw $_ } finally { Disconnect-ExchangeOnline -Confirm:$false Get-PSSession | Remove-PSSession } # Associate values to output bindings by calling 'Push-OutputBinding'. Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::OK Body = $body })
In den Zeilen 10 bis 16 erfolgt die Authentifizierung Am Security & Compliance PowerShell Modul mit der Managed Identity unserer Function App. In Zeile 14 muss noch der Tenant-Name angepasst werden und in Zeile 18 lassen wir uns die Aufbewahrungsrichtlinien ausgeben und liefern diese im Body der Funktion zurück.
Wenn wir die Funktion testen, sehen wir, dass die Authentifizierung funktioniert und wir die Aufbewahrungsrichtlinien erhalten.
Durch die Nutzung von Managed Identities ist die Nutzung des Security & Compliance PowerShell Moduls wesentlich sicherer und auch einfacher, als mit einer App-Registrierung oder eines Service-Accounts.
[…] Dieser Post ist auch auf Deutsch verfügbar […]