Script för synkning av användare via Azure Runbook Automation
1. Konfigurera Azure Automation Account Runbook
Azure Runbooks är en del av Azure Automation-tjänsten som gör att du kan automatisera frekventa, tidskrävande och felbenägna molnhanteringsuppgifter. En av flera typer av runbooks är PowerShell, vilket är vad vi använder för vår användarsynkronisering. Skriptet i runbooken kan redigeras direkt i runbooken från Azure Portal eller importeras från en textredigerare till Azure Automation Runbook.
För att kunna börja använda PowerShell Runbook måste ett Azure Automation-konto skapas enligt guiden: Snabbstart - Skapa ett Azure Automation-konto med hjälp av portalen | Microsoft Learn
2. Aktivera hanterad identitet för Azure Automation-kontot
Om du redan har skapat Automation-kontot följer du nästa steg för att aktivera Managed Identity när du går till din Azure Automation-resurs:
- Klicka på Identity i den vänstra rutan.
- Se till att fliken System assigned är markerad
- Växla status från "av" till "på
- Kopiera objektets (huvudmannens) ID till ett anteckningsblock. Detta kommer att användas senare.
- Klicka på Spara.
3. Ge behörigheter till den hanterade identiteten
När en hanterad identitet skapas börjar den med ett oskrivet blad och utan behörigheter. Det innebär att du måste ge behörigheter till de resurser som den behöver interagera med. I vårt fall måste vi ge den hanterade identiteten från vårt Automation-konto åtkomst till att läsa samt köra jobb från Azure Automation Runbook. Ännu viktigare är att vi måste veta hur vi ger den hanterade identiteten behörigheter till Graph API. Eftersom Azure Automation Runbooks inte kräver en hemlighet eller ett certifikat för att ansluta till Graph API är detta idealiskt och det säkraste sättet eftersom vi låter Azure hantera hela autentiseringsprocessen i molnet. När du är på fliken Identity:
- Öppna cloud shell-terminalen
- Kör följande kommandon
Connect-AzureAD
$ServicePrincipalId = '041faf65-xxxx-xxxx-xxxx-xxxxxxxxxxxx' #fill the Object principal ID that you copied before
$GraphResource = Get-AzureADServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
- Kör
$Permission1 = $GraphResource.AppRoles | Where-Object {$_.value -eq 'User.Read.All'} New-AzureADServiceAppRoleAssignment -ObjectId $ServicePrincipalId -PrincipalId $ServicePrincipalId -Id $Permission1.Id -ResourceId $GraphResource.ObjectId
- Kör
$Permission2 = $GraphResource.AppRoles | Where-Object {$_.value -eq 'Group.Read.All'} New-AzureADServiceAppRoleAssignment -ObjectId $ServicePrincipalId -PrincipalId $ServicePrincipalId -Id $Permission2.Id -ResourceId $GraphResource.ObjectId
- Kör
$Permission3 = $GraphResource.AppRoles | Where-Object {$_.value -eq 'GroupMember.Read.All'} New-AzureADServiceAppRoleAssignment -ObjectId $ServicePrincipalId -PrincipalId $ServicePrincipalId -Id $Permission3.Id -ResourceId $GraphResource.ObjectId
När du har kört kommandona kan du se vilka behörigheter som har beviljats för Service Principal
- Azure AD
- Företagsapplikationer
- Applikationsnamnet ska vara namnet på det skapade Automation-kontot
- Välj Behörigheter i rullgardinsmenyn till vänster
4. Installera de moduler som krävs för Runbook
För att skriptet ska kunna köras korrekt måste ett par nödvändiga moduler installeras för Runbook.
Modulen finns i Automation Account:
- Klicka på Moduler i den vänstra rutan
- Klicka på Bläddra i galleri
- Sök och välj följande moduler
- BrightBookingAnvändarAdminVerktyg - Taggar: GoBright BrightBooking aktiv-direktory azuread PSModule
- Microsoft.Graph.Applications
- Microsoft.Graph.Authentication
- Microsoft.Graph.Groups
- Microsoft.Graph.Identity.DirectoryManagement
- Microsoft.Graph.Användare
- Microsoft.Graph - Gör det här sist
- Valde Runtime-versionen 7.2
- Klicka på Importera
5. Skapa Runbook och Script
I detta avsnitt kommer Runbook att skapas och User Sync Script och Schedule konfigureras
- Välj Runbooks i den vänstra panelen på Automation Account
- Skapa en Runbook
- Skriv namnet på din Runbook
- Välj Powershell-typ
- Välj 7.2-version
- Skapa
När den skapade Runbooken är markerad trycker du på Edit, Edit in Portal.
Lägg till följande skript och ändra detaljerna i parenteserna och publicera det när du är klar.
Du kan också välja testfönstret och starta testet av skriptet för att se om det fungerar som det ska.
#Get the token using a managed identity and connect to graph using that token Connect-AzAccount -Identity -ErrorAction Stop | Out-Null $AccessToken = Get-AzAccessToken -ResourceTypeName MSGraph -ErrorAction Stop | select -ExpandProperty Token | ConvertTo-SecureString -AsPlainText -Force Connect-Graph -AccessToken $AccessToken -ErrorAction Stop | Out-Null $includedGroups = @() $includedGroups += '[your AzureAD groupname here]' # get the list of userid's in the group $groups = Get-MgGroup -All | Where-Object { $includedGroups -contains $_.DisplayName } $users_in_groups_userids = @(); Foreach ($group in $groups) { $groupMembers = Get-MgGroupMember -All -GroupID $group.id Foreach ($groupMember in $groupMembers) { $users_in_groups_userids += $groupMember.Id } } # get the required details of those users $users_full_list = Get-MgUser -All -Select Id,DisplayName,Mail,UserPrincipalName,AccountEnabled,MobilePhone,AssignedLicenses $users = $users_full_list | Where-Object { $users_in_groups_userids-contains $_.Id } Write-Output "Loaded from AzureAD: $(($users | Measure-Object).Count) users" # define the mapping of groups to roles $groupToRoleMapping = @() $groupToRoleMapping += @ # match specific users that belong to a group for Meet-Work-Visit $users | Push-AzureADUsersToBB -DeactivateExistingUsersInSameIntegrationThatAreNotLoaded -GroupUserRoleMapping $groupToRoleMapping -BrightBookingApiUrl '[API url]' -BrightBookingApiKey '[API key]' -BrightBookingIntegrationName '[name of integration as created in Admin center > Integrations]'
6. Skapa en schemalagd aktivitet för Runbook
I den skapade Runbook på den vänstra panelen väljer du Schedules
- Lägg till ett schema
- Schema - Koppla ett schema till din Runbook
- Lägg till ett schema
- Namn på schemat
- Beskrivning
- Startdatum/tid för schemat
- Lägg till Recurrence
- Förfallodag
- Skapa
Gå tillbaka till Runbook och på den övre panelen väljer du Link to Schedule och väljer det skapade schemat.
7. Skapa en Metric Alert för att få ett meddelande när Runbook-jobbet misslyckas
Azure Automation har möjlighet att kontrollera om ett Runbook Job/Schedule har misslyckats med att köras och du kan skapa en anpassad varning för en grupp som ska meddelas när det händer. Du kan hitta hur du gör det i följande artikel: Azure Automation Metric Alert