Automatisch toegang verlenen tot een Enterprise Application via Azure Automation
Dit blog beschrijft hoe je automatisch toegang kunt verlenen aan gebruikers tot een Enterprise Application, zoals die wordt gebruikt voor awareness-trainingen en phishing-tests.
De Enterprise Application is een online applicatie of website. In de instellingen is Single Sign-On geconfigureerd op basis van SAML (Security Assertion Markup Language), gekoppeld aan de Azure-omgeving.
In Azure wordt hiervoor een zogenaamde Enterprise Application ingericht. Je kunt hiervoor een eigen applicatie registreren via App registrations, of een bestaande kiezen uit de lijst met Enterprise Applications. De registratie creëert een application object in Azure AD, en daarnaast een uniek Service Principal Object, waarmee je toegang tot resources configureert.
Toegang beheren: gebruikers en groepen
Aan een Enterprise Application kunnen gebruikers of groepen worden gekoppeld, afhankelijk van je Azure AD-licentieplan. De beschikbare plannen zijn: Free, Office 365 Apps, Premium P1 en Premium P2. Met een Free-plan krijg je een foutmelding bij het toevoegen van groepen; je kunt dan alleen individuele gebruikers toevoegen.
Dat is onpraktisch: groepslidmaatschap maakt het mogelijk om toegang
automatisch te regelen. Zonder deze optie moet je telkens handmatig
gebruikers toevoegen aan de Enterprise Application — foutgevoelig en
bewerkelijk. Gelukkig is er een alternatief: Azure Runbooks.
Azure Runbooks als oplossing
Een Azure Runbook is een script dat draait in de Azure-cloud via een Azure Automation Account. Het Automation Account heeft toegang tot resources binnen de tenant, via rollen en modules. PowerShell en Python worden beide ondersteund. Na configuratie en planning wordt het script automatisch uitgevoerd op een Hybrid Worker.
Benodigdheden
Voor deze aanpak heb je het volgende nodig:
-
Een actief Azure-abonnement
-
Een Azure Automation Account
-
Een resource group (voor opslag en gebruiksminuten)
-
Een script dat je wilt uitvoeren
De eerste 500 minuten per maand zijn inbegrepen bij je abonnement.
Doe het volgende:
1.
Login op https://portal.azure.com
2.
Zoek “Automation accounts” op.
3.
Maak een Automation Account aan.
a.
Geef een passende naam op.
b.
Kies je abbonement.
c.
Maak een resource group aan.
d.
Wacht even tot hij is aangemaakt.
4. - Open het Azure Automation Account.
- Selecteer “Modules” om de nodige
Powershell modules toe te voegen. Klik “Browse gallery”.
- Installeer de “AzureAD” module.
Het Azure Automation Account is nu klaar voor
gebruik.
Authenticatie: het Run As-account rechten geven
Azure maakt bij het aanmaken van een Automation Account automatisch een Run As-account aan. Dit is een Service Principal, en moet over de juiste rechten beschikken.
Noteer het Service Principal Object ID van het Run As-account (te vinden onderaan de accountpagina). Je geeft deze service principal de rol User Administrator via PowerShell.
Verbind eerst met Azure AD:
Connect-AzureAD
Sla vervolgens het Object ID van het Run As-account op:
$servicePrincipalObjectId = "f1d4a7b7-1111-4cf6-xxxx-xxxxxxxxxxxx"
Ken vervolgens de juiste rol toe:
Add-AzureADDirectoryRoleMember
-ObjectId (Get-AzureADDirectoryRole | Where-Object {$_.DisplayName -eq
"User Administrator"}).ObjectId -RefObjectId $servicePrincipalObjectId
Users
toekennen aan de Azure AD application met Powershell
We beginnen hier ook met het het ophalen van
de Service Principal, maar dan van de Enterprise Application waar we users aan
willen toekennen.
# Connect to Azure AD
Connect-AzureAD
# Get the service principal for the app you want to assign the user to
$servicePrincipal = Get-AzureADServicePrincipal -Filter
"Displayname eq ' KnowBe4 Security Awareness Training"
Gebruikers automatisch toevoegen via PowerShell
Verbind met Azure AD:
Connect-AzureAD
Haal de service principal op van de applicatie:
$servicePrincipal = Get-AzureADServicePrincipal -Filter "Displayname eq 'KnowBe4 Security Awareness Training'"
Vraag vervolgens op welke gebruikers al zijn gekoppeld aan deze applicatie:
$existingUsers = Get-AzureADServiceAppRoleAssignment -All $true -ObjectId $servicePrincipal.ObjectId | Select -ExpandProperty PrincipalId
Verzamel alle gebruikers met een Office 365-licentie:
$licensedUsers = Get-AzureADUser -All $true | Where-Object {$_.AssignedLicenses} | Select DisplayName, ObjectId
Vergelijk beide lijsten om nieuwe gebruikers te bepalen:
$newUsers = $licensedUsers | Where-Object { $_.ObjectId -notin $existingUsers }
Maak een lijst van uit te sluiten accounts (zoals serviceaccounts):
[System.Collections.ArrayList]$ExcludedUsers = @()
Definieer de te negeren Object IDs:
$ExcludedObjectIDs = @( "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "...", "...")
Vul de lijst:
foreach ($obj in $ExcludedObjectIDs) { $val = [pscustomobject]@{'ObjectId'=$obj}; $ExcludedUsers.add($val) | Out-Null; $val=$null }
Filter deze uit de nieuwe gebruikers:
$RestUsers = $newUsers | Where-Object { $_.ObjectId -notin $ExcludedUsers.ObjectId }
Voeg vervolgens de gefilterde gebruikers toe aan de Enterprise Application:
Nu ga ik de users in de variable $newUsers
ontdoen van die in de variabele $ExcludedUsers.
#
Filter out excludedusers
$RestUsers = $newUsers | Where-Object { $_.ObjectId -notin
$ExcludedUsers.ObjectId }
In de variable $RestUsers zitten de nieuwe
users die ik wil toevoegen aan de Enterprise Application. Dat doe ik met
onderstaande
ForEach ($user in $RestUsers) {
Try {
New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId $user.ObjectId -ResourceId $servicePrincipal.ObjectId -Id $servicePrincipal.AppRoles[0].Id -ErrorAction Stop
[PSCustomObject]@{UserPrincipalName = $user.DisplayName; ApplicationAssigned = $true}
}
Catch {
[PSCustomObject]@{UserPrincipalName = $user.DisplayName; ApplicationAssigned = $false}
}
}
De losse stappen voegen we samen tot 1 script
en dit kunnen we in het runbook plaatsen.
Runbook, run!
Het script plaatsen in een Runbook
Ga naar je Automation Account en navigeer naar Runbooks. Volg deze stappen:
-
Klik op Create Runbook
-
Geef het een duidelijke naam
-
Kies PowerShell als type
-
Selecteer versie 5.1 (andere versies zijn experimenteel)
-
Klik op Create
In de editor kun je nu het volledige script plakken. Onder Cmdlets zie je de beschikbare commando’s. Onder Assets staan herbruikbare elementen zoals credentials en variabelen.
Testen, opslaan en plannen
Klik op Test pane om een testuitvoering te starten. Als het script correct werkt, klik je op Save. Daarna publiceer je het via Publish.
Wil je het script periodiek draaien? Voeg dan een schema toe via Schedules. Kies bijvoorbeeld donderdag om 05:00 uur in de ochtend. Geef het een logische naam, zoals Weekly Schedule.
Tot slot
Je hebt nu een werkend, geautomatiseerd proces om gebruikers toe te voegen aan je Enterprise Application via een Azure Runbook.
Een veilige manier om gebruikers per e-mail te rapporteren (zonder SendGrid) ontbreekt voorlopig nog — daar kom ik in een toekomstige post op terug.
Laat het weten als je dit als document, scriptbestand of markdown-export nodig hebt!