Självstudie: Skapa Automation PowerShell-runbook med hanterad identitet
Den här självstudien beskriver hur du skapar en PowerShell-runbook i Azure Automation som använder en hanterad identitet i stället för Kör som-kontot för att interagera med resurser. PowerShell-runbooks baseras på Windows PowerShell. Med en hanterad identitet från Microsoft Entra ID kan din runbook enkelt komma åt andra Microsoft Entra-skyddade resurser.
I den här självstudien lär du dig att:
- Tilldela behörigheter till hanterade identiteter
- Skapa en PowerShell-runbook
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Förutsättningar
- Ett Azure Automation-konto med minst en användartilldelad hanterad identitet. Mer information finns i Använda en användartilldelad hanterad identitet för ett Azure Automation-konto.
- Az-moduler:
Az.Accounts
,Az.Automation
,Az.ManagedServiceIdentity
ochAz.Compute
importerade till Automation-kontot. Mer information finns i Importera Az-moduler. - Azure Az PowerShell-modulen som är installerad på datorn. Information om hur du installerar eller uppgraderar finns i Installera Azure Az PowerShell-modulen.
Az.ManagedServiceIdentity
är en förhandsgranskningsmodul och inte installerad som en del av Az-modulen. Installera det genom att köraInstall-Module -Name Az.ManagedServiceIdentity
. - En virtuell Azure-dator. Eftersom du stoppar och startar den här datorn bör det inte vara en virtuell produktionsdator.
- En allmän förtrogenhet med Automation-runbooks.
Tilldela behörigheter till hanterade identiteter
Tilldela behörigheter till de hanterade identiteterna så att de kan stoppa och starta en virtuell dator.
Logga in på Azure interaktivt med hjälp av cmdleten Connect-AzAccount och följ anvisningarna.
# Sign in to your Azure subscription $sub = Get-AzSubscription -ErrorAction SilentlyContinue if(-not ($sub)) { Connect-AzAccount } # If you have multiple subscriptions, set the one to use # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
Ange ett lämpligt värde för variablerna nedan och kör sedan skriptet.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"
Använd PowerShell-cmdleten New-AzRoleAssignment för att tilldela en roll till den systemtilldelade hanterade identiteten.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Samma rolltilldelning krävs för den användartilldelade hanterade identiteten
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Ytterligare behörigheter för den systemtilldelade hanterade identiteten krävs för att köra cmdletar
Get-AzUserAssignedIdentity
ochGet-AzAutomationAccount
som används i den här självstudien.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
Skapa PowerShell-runbook
Skapa en runbook som tillåter körning av antingen hanterad identitet. Runbooken startar en stoppad virtuell dator eller stoppar en virtuell dator som körs.
Under Processautomatisering väljer du Runbooks.
Välj Skapa en runbook.
- Ge runbooken
miTesting
namnet . - I listrutan Runbook-typ väljer du PowerShell.
- I listrutan Körningsversion väljer du antingen 7.1 (förhandsversion) eller 5.1.
- Ange en tillämplig beskrivning.
- Ge runbooken
Skapa runbooken genom att klicka på Skapa.
I Runbook-redigeraren klistrar du in följande kod:
Param( [string]$ResourceGroup, [string]$VMName, [string]$Method, [string]$UAMI ) $automationAccount = "xAutomationAccount" # Ensures you do not inherit an AzContext in your runbook $null = Disable-AzContextAutosave -Scope Process # Connect using a Managed Service Identity try { $AzureConnection = (Connect-AzAccount -Identity).context } catch { Write-Output "There is no system-assigned user identity. Aborting." exit } # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureConnection.Subscription -DefaultProfile $AzureConnection if ($Method -eq "SA") { Write-Output "Using system-assigned managed identity" } elseif ($Method -eq "UA") { Write-Output "Using user-assigned managed identity" # Connects using the Managed Service Identity of the named user-assigned managed identity $identity = Get-AzUserAssignedIdentity -ResourceGroupName $ResourceGroup -Name $UAMI -DefaultProfile $AzureContext # validates assignment only, not perms $AzAutomationAccount = Get-AzAutomationAccount -ResourceGroupName $ResourceGroup -Name $automationAccount -DefaultProfile $AzureContext if ($AzAutomationAccount.Identity.UserAssignedIdentities.Values.PrincipalId.Contains($identity.PrincipalId)) { $AzureConnection = (Connect-AzAccount -Identity -AccountId $identity.ClientId).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureConnection.Subscription -DefaultProfile $AzureConnection } else { Write-Output "Invalid or unassigned user-assigned managed identity" exit } } else { Write-Output "Invalid method. Choose UA or SA." exit } # Get current state of VM $status = (Get-AzVM -ResourceGroupName $ResourceGroup -Name $VMName -Status -DefaultProfile $AzureContext).Statuses[1].Code Write-Output "`r`n Beginning VM status: $status `r`n" # Start or stop VM based on current state if ($status -eq "Powerstate/deallocated") { Start-AzVM -Name $VMName -ResourceGroupName $ResourceGroup -DefaultProfile $AzureContext } elseif ($status -eq "Powerstate/running") { Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroup -DefaultProfile $AzureContext -Force } # Get new state of VM $status = (Get-AzVM -ResourceGroupName $ResourceGroup -Name $VMName -Status -DefaultProfile $AzureContext).Statuses[1].Code Write-Output "`r`n Ending VM status: $status `r`n `r`n" Write-Output "Account ID of current context: " $AzureContext.Account.Id
I redigeraren, på rad 8, ändrar du värdet för variabeln
$automationAccount
efter behov.Välj Spara och sedan testfönstret.
Fyll i parametrarna
RESOURCEGROUP
ochVMNAME
med lämpliga värden. AngeSA
för parameternMETHOD
ochxUAMI
för parameternUAMI
. Runbooken försöker ändra energitillståndet för den virtuella datorn med hjälp av den systemtilldelade hanterade identiteten.Välj start. När runbooken är klar bör utdata se ut ungefär så här:
Beginning VM status: PowerState/deallocated OperationId : 5b707401-f415-4268-9b43-be1f73ddc54b Status : Succeeded StartTime : 8/3/2021 10:52:09 PM EndTime : 8/3/2021 10:52:50 PM Error : Name : Ending VM status: PowerState/running Account ID of current context: MSI@50342
Ändra värdet för parametern
METHOD
tillUA
.Välj start. Runbooken försöker ändra energitillståndet för den virtuella datorn med hjälp av den namngivna användartilldelade hanterade identiteten. När runbooken är klar bör utdata se ut ungefär så här:
Using user-assigned managed identity Beginning VM status: PowerState/running OperationId : 679fcadf-d0b9-406a-9282-66bc211a9fbf Status : Succeeded StartTime : 8/3/2021 11:06:03 PM EndTime : 8/3/2021 11:06:49 PM Error : Name : Ending VM status: PowerState/deallocated Account ID of current context: 9034f5d3-c46d-44d4-afd6-c78aeab837ea
Rensa resurser
Om du vill ta bort resurser som inte längre behövs kör du följande runbook.
#Remove runbook
Remove-AzAutomationRunbook `
-ResourceGroupName $resourceGroup `
-AutomationAccountName $automationAccount `
-Name "miTesting" `
-Force
# Remove role assignments
Remove-AzRoleAssignment `
-ObjectId $UAMI `
-ResourceGroupName $resourceGroup `
-RoleDefinitionName $role1
Remove-AzRoleAssignment `
-ObjectId $SAMI `
-ResourceGroupName $resourceGroup `
-RoleDefinitionName $role2
Remove-AzRoleAssignment `
-ObjectId $SAMI `
-ResourceGroupName $resourceGroup `
-RoleDefinitionName $role1
Nästa steg
I den här självstudien skapade du en PowerShell-runbook i Azure Automation som använde en hanterad identitet i stället för Kör som-kontot för att interagera med resurser. En titt på PowerShell Workflow-runbooks finns i: