Tutorial: Criar um runbook de Automação do PowerShell usando uma identidade gerenciada
Este tutorial explica como criar um runbook do PowerShell na Automação do Azure que usa uma identidade gerenciada em vez da conta Executar como para interagir com recursos. Os runbooks do PowerShell se baseiam no Windows PowerShell. Uma identidade gerenciada do Microsoft Entra ID permite que seu runbook acesse facilmente outros recursos protegidos pelo Microsoft Entra.
Neste tutorial, você aprenderá a:
- Atribuir permissões a identidades gerenciadas
- Criar runbook do PowerShell
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
- Uma conta da Automação do Azure com pelo menos uma identidade gerenciada atribuída pelo usuário. Para obter mais informações, confira Como usar uma identidade gerenciada atribuída pelo usuário para uma conta da Automação do Azure.
- Módulos Az:
Az.Accounts
,Az.Automation
,Az.ManagedServiceIdentity
eAz.Compute
importados para a conta da Automação. Para obter mais informações, confira Importar módulos Az. - O módulo Azure Az do PowerShell instalado em seu computador. Para instalar ou atualizar, confira Como instalar o módulo Azure Az do PowerShell.
Az.ManagedServiceIdentity
é um módulo de visualização e não é instalado como parte do módulo AZ. Para instalar, executeInstall-Module -Name Az.ManagedServiceIdentity
. - Uma máquina virtual do Azure. Já que você para e inicia essa máquina, portanto, ela não deve ser uma VM de produção.
- Uma familiaridade geral com runbooks de Automação.
Atribuir permissões a identidades gerenciadas
Atribua permissões às identidades gerenciadas para permitir que elas parem e iniciem uma máquina virtual.
Entre no Azure de modo interativo usando o cmdlet Connect-AzAccount e siga as instruções.
# 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>
Forneça um valor apropriado para as variáveis abaixo e, em seguida, execute o script.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"
Use o cmdlet do PowerShell New-AzRoleAssignment para atribuir uma função à identidade gerenciada atribuída pelo sistema.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
A mesma atribuição de função é necessária para a identidade gerenciada atribuída pelo usuário
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Permissões adicionais para a identidade gerenciada atribuída pelo sistema são necessárias para executar cmdlets
Get-AzUserAssignedIdentity
eGet-AzAutomationAccount
, conforme usado neste tutorial.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
Criar runbook do PowerShell
Crie um runbook que permitirá a execução por uma das identidades gerenciadas. O runbook iniciará uma VM parada ou interromperá uma VM em execução.
Entre no portal do Azure e navegue até sua conta da Automação.
Em Automação de Processo, selecione Runbooks.
Selecione Criar um runbook.
- Nomeie o runbook
miTesting
. - Na lista suspensa Tipo de runbook, selecione PowerShell.
- Na lista suspensa Versão do runtime, selecione 7.1 (versão prévia) ou 5.1.
- Insira uma Descrição aplicável.
- Nomeie o runbook
Clique em Criar para criar o runbook.
No editor de runbook, cole o seguinte código:
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
No editor, na linha 8, revise o valor da variável
$automationAccount
conforme necessário.Selecione Salvar e Testar painel.
Preencha os parâmetros
RESOURCEGROUP
eVMNAME
com os valores apropriados. InsiraSA
para o parâmetroMETHOD
exUAMI
para o parâmetroUAMI
. O runbook tentará alterar o estado de energia da VM usando a identidade gerenciada atribuída pelo sistema.Selecione Iniciar. Após a conclusão do runbook, a saída deverá ser semelhante à seguinte:
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
Altere o valor do parâmetro
METHOD
paraUA
.Selecione Iniciar. O runbook tentará alterar o estado de energia da VM usando a identidade gerenciada nomeada atribuída pelo usuário. Após a conclusão do runbook, a saída deverá ser semelhante à seguinte:
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
Limpar recursos
Para remover os recursos que não são mais necessários, execute o runbook a seguir.
#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
Próximas etapas
Neste tutorial, você criou um runbook do PowerShell na Automação do Azure que usou uma identidade gerenciada em vez de “Executar como conta” para interagir com recursos. Para ver os runbooks de fluxo de trabalho do PowerShell, confira: