Script til brugersynkronisering via Azure Runbook Automation
1. Opsætning af Azure Automation Account Runbook
Azure Runbooks er en del af Azure Automation-tjenesten, der giver dig mulighed for at automatisere hyppige, tidskrævende og fejlbehæftede cloud management-opgaver. En af de mange typer af runbooks er PowerShell, som vi bruger til vores brugersynkronisering. Scriptet i Runbook'en kan redigeres direkte i Runbook'en fra Azure Portal eller importeres fra en teksteditor til Azure Automation Runbook'en.
For at komme i gang med at bruge PowerShell Runbook skal der oprettes en Azure Automation-konto ved at følge vejledningen: Quickstart - Opret en Azure Automation-konto ved hjælp af portalen | Microsoft Learn
2. Aktivér Managed Identity for Azure Automation-kontoen
Hvis du allerede har oprettet en Automation-konto, skal du følge de næste trin for at aktivere Managed Identity, når du går til din Azure Automation-ressource:
- Klik på Identitet i venstre rude.
- Sørg for, at fanen System tildelt er valgt
- Skift status fra 'fra' til 'til'
- Kopier objektets (principalens) ID til en notesblok. Det skal bruges senere.
- Klik på Gem.
3. Giv tilladelser til den administrerede identitet
Når en administreret identitet oprettes, starter den med en ren tavle og ingen tilladelser. Det betyder, at du bliver nødt til at give tilladelser til de ressourcer, den skal interagere med. I vores tilfælde skal vi give den administrerede identitet fra vores Automation-konto adgang til at læse og køre jobs fra Azure Automation Runbook. Endnu vigtigere er det, at vi skal vide, hvordan vi giver den administrerede identitet tilladelse til Graph API. Da Azure Automation Runbooks ikke kræver en hemmelighed eller et certifikat for at oprette forbindelse til Graph API, er dette ideelt og den mest sikre måde, da vi lader Azure håndtere hele godkendelsesprocessen i skyen. Mens du er på fanen Identity:
- Åbn cloud shell-terminalen
- Kør følgende kommandoer
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'"
- Løb
$Permission1 = $GraphResource.AppRoles | Where-Object {$_.value -eq 'User.Read.All'} New-AzureADServiceAppRoleAssignment -ObjectId $ServicePrincipalId -PrincipalId $ServicePrincipalId -Id $Permission1.Id -ResourceId $GraphResource.ObjectId
- Løb
$Permission2 = $GraphResource.AppRoles | Where-Object {$_.value -eq 'Group.Read.All'} New-AzureADServiceAppRoleAssignment -ObjectId $ServicePrincipalId -PrincipalId $ServicePrincipalId -Id $Permission2.Id -ResourceId $GraphResource.ObjectId
- Løb
$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 kommandoerne, kan du se de tilladelser, der er givet til serviceprincippet
- Azure AD
- Virksomhedsapplikationer
- Applikationsnavnet skal være navnet på den oprettede Automation Account
- Vælg Tilladelser i rullepanelet til venstre
4. Installer de nødvendige moduler til kørebogen
For at scriptet kan køre ordentligt, skal der installeres et par nødvendige moduler til Runbook.
Modulet kan findes i Automation Account:
- Klik på Moduler i venstre rude
- Klik på Gennemse galleri
- Søg og vælg følgende moduler
- BrightBookingUserAdminTools - Mærker: GoBright BrightBooking active-directory azuread PSModule
- Microsoft.Graph.Applications
- Microsoft.Graph.Authentication
- Microsoft.Graph.Groups
- Microsoft.Graph.Identity.DirectoryManagement
- Microsoft.Graph.Users
- Microsoft.Graph - Gør dette til sidst
- Vælg runtime-version 7.2
- Klik på Importer
5. Opret runbook og script
I dette afsnit oprettes Runbook, og User Sync Script og Schedule konfigureres.
- Vælg Runbooks i venstre panel af Automation Account
- Opret en kørebog
- Skriv navnet på din Runbook
- Vælg Powershell-type
- Vælg 7.2-version
- Opret
Når den oprettede Runbook er valgt, skal du trykke på Edit, Edit in Portal.
Tilføj følgende script, og ændr detaljerne i parenteserne, og udgiv det, når du er færdig.
Du kan også vælge testruden og starte testen af scriptet for at se, om det fungerer korrekt.
#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. Opret en planlagt opgave til kørebogen
I den oprettede Runbook i venstre panel skal du vælge Schedules
- Tilføj et skema
- Skema - Link et skema til din Runbook
- Tilføj et skema
- Navn på skemaet
- Beskrivelse
- Startdato/tidspunkt for skemaet
- Tilføj gentagelse
- Udløb
- Opret
Gå tilbage til Runbook, og vælg Link to Schedule på det øverste panel, og vælg den oprettede Schedule.
7. Opret en Metric Alert for at få besked, når Runbook-jobbet mislykkes
Azure Automation har mulighed for at kontrollere, om et Runbook-job/en tidsplan ikke er blevet kørt, og du kan oprette en brugerdefineret advarsel til en gruppe, der skal have besked, når det sker. Du kan finde ud af, hvordan du gør det i følgende artikel: Azure Automation Metric Alert