Esercitazione: Creare un runbook di PowerShell di Automazione usando l'identità gestita
Questa esercitazione illustra come creare un runbook di PowerShell in Automazione di Azure che usa un'identità gestita, anziché l'account RunAs per interagire con le risorse. I runbook di PowerShell sono basati su Windows PowerShell. Un'identità gestita da Microsoft Entra ID consente al runbook di accedere facilmente ad altre risorse protette da Microsoft Entra.
In questa esercitazione apprenderai a:
- Assegnare le autorizzazioni alle identità gestite
- Creare un runbook di PowerShell
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Prerequisiti
- Un account Automazione di Azure con almeno un'identità gestita assegnata all'utente. Per altre informazioni, vedere Uso di un'identità gestita assegnata dall'utente per un account Automazione di Azure.
- Moduli Az:
Az.Accounts
,Az.Automation
,Az.ManagedServiceIdentity
eAz.Compute
importati nell'account di Automazione. Per altre informazioni, vedere Importazione di moduli Az. - Il modulo Azure Az PowerShell installato nel computer. Installare o aggiornare, vedere Come installare il modulo Azure Az PowerShell.
Az.ManagedServiceIdentity
è un modulo di anteprima e non è installato come parte del modulo Az. Per installarlo, eseguireInstall-Module -Name Az.ManagedServiceIdentity
. - Una macchina virtuale di Azure. Poiché la macchina virtuale viene arrestata e avviata, non deve essere una macchina virtuale di produzione.
- Familiarità generale con i runbook di automazione.
Assegnare le autorizzazioni alle identità gestite
Assegnare autorizzazioni alle identità gestite per consentire l'arresto e l'avvio di una macchina virtuale.
Accedere ad Azure in modo interattivo usando il cmdlet Connect-AzAccount e seguire le istruzioni:
# 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>
Specificare un valore appropriato per le variabili seguenti e quindi eseguire lo script.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"
Usare il cmdlet di PowerShell New-AzRoleAssignment per assegnare un ruolo all’identità gestita assegnata dal sistema.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
La stessa assegnazione di ruolo è necessaria per l'identità gestita assegnata dall'utente
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Per eseguire i
Get-AzUserAssignedIdentity
cmdlet eGet-AzAutomationAccount
come usato in questa esercitazione sono necessarie autorizzazioni aggiuntive per l'identità gestita assegnata dal sistema.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
Creare un runbook PowerShell
Creare un runbook che consentirà l'esecuzione da una delle due identità gestite. Il runbook avvia una macchina virtuale arrestata o arresta una macchina virtuale in esecuzione.
Accedere al portale di Azure e passare all'account di Automazione.
In Automazione processi selezionare Runbook.
Selezionare Crea un runbook.
- Assegnare un nome al runbook
miTesting
. - Nell'elenco a discesa Tipo di runbook selezionare PowerShell.
- Nell'elenco a discesa Versione di runtime selezionare 7.1 (anteprima) o 5.1.
- Immettere una descrizione applicabile.
- Assegnare un nome al runbook
Fare clic su Crea per creare il runbook.
Nell'editor dei runbook incollare il codice seguente:
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
Nell'editor, alla riga 8, rivedere il valore per la variabile in base alle
$automationAccount
esigenze.Selezionare Salva e quindi Riquadro di test.
Popolare i
RESOURCEGROUP
parametri eVMNAME
con i valori appropriati. ImmettereSA
per ilMETHOD
parametro exUAMI
per ilUAMI
parametro . Il runbook tenterà di modificare lo stato di alimentazione della macchina virtuale usando l'identità gestita assegnata dal sistema.Selezionare Inizio. Al termine del runbook, l'output dovrebbe essere simile al seguente:
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
Modificare il valore per il
METHOD
parametro inUA
.Selezionare Inizio. Il runbook tenterà di modificare lo stato di alimentazione della macchina virtuale usando l'identità gestita assegnata dall'utente denominata. Al termine del runbook, l'output dovrebbe essere simile al seguente:
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
Eseguire la pulizia delle risorse
Per rimuovere le risorse non più necessarie, eseguire il runbook seguente.
#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
Passaggi successivi
In questa esercitazione è stato creato un runbook di PowerShell in Automazione di Azure che ha usato un'identità gestita, anziché l'account RunAs per interagire con le risorse. Per un'analisi dei runbook del flusso di lavoro PowerShell, vedere: