Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tutorial orienta-o na criação de um runbook do PowerShell no Automatização do Azure que utiliza uma identidade gerida para interagir com recursos. Os runbooks do PowerShell são baseados no Windows PowerShell. Uma identidade gerida do Microsoft Entra ID permite que o seu runbook aceda facilmente a outros recursos protegidos pela Microsoft Entra.
Neste tutorial, irá aprender a:
- Atribuir permissões a identidades geridas
- Criar um runbook do PowerShell
Se não tiver uma subscrição Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
Antes de atribuir permissões a identidades gerenciadas, verifique se você atende a estes pré-requisitos:
- Uma conta Automatização do Azure com pelo menos uma identidade gerida atribuída pelo utilizador. Para mais informações, consulte Usar uma identidade gerida atribuída pelo utilizador para uma conta Automatização do Azure.
- Az modules:
Az.Accounts,Az.Automation,Az.ManagedServiceIdentity, eAz.Computeimportados para a conta de automação. Para obter mais informações, consulte Importar módulos Az. - O módulo PowerShell Azure Az PowerShell instalado na sua máquina. Para instalar ou atualizar, consulte Como instalar o módulo PowerShell Azure Arizona.
Az.ManagedServiceIdentityé um módulo de visualização e não está instalado como parte do módulo Az. Para instalá-lo, executeInstall-Module -Name Az.ManagedServiceIdentity. - Uma máquina virtual Azure. Como você para e inicia essa máquina, ela não deve ser uma VM de produção.
- Uma familiaridade geral com manuais de procedimento de automação.
Atribuir permissões a identidades geridas
Atribua permissões às identidades gerenciadas para permitir que elas parem e iniciem uma máquina virtual.
Para atribuir permissões a identidades gerenciadas, siga estas etapas:
Inicie sessão para Azure interativamente 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>Insira um valor apropriado para as variáveis abaixo e execute o script.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"Utilize o cmdlet do PowerShell New-AzRoleAssignment para atribuir uma função à identidade gerida atribuída ao sistema.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1A 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 $role1São necessárias permissões adicionais para a identidade gerenciada atribuída pelo sistema para executar cmdlets
Get-AzUserAssignedIdentityeGet-AzAutomationAccountconforme 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 qualquer identidade gerenciada. O runbook iniciará uma VM interrompida ou interromperá uma VM em execução.
Para criar um runbook do PowerShell, siga estas etapas:
Inicie sessão no portal Azure e aceda à sua conta de Automação.
Na página Visão geral, selecione Experimentar ambiente de execução, se ainda não estiver na nova experiência.
Em Automação de processos, selecione Runbooks.
Selecione Criar um runbook e execute as seguintes ações:
- Dar nome ao runbook
miTesting. - No menu suspenso do tipo Runbook, selecione PowerShell.
- Na lista suspensa Ambiente de Execução, Selecione existente ambiente de execução ou Crie novo com o PowerShell de Execução e a versão 7.4.
- Insira uma Descrição aplicável.
- Dar nome ao runbook
Selecione 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.IdNo editor, na linha 8, revise o valor da
$automationAccountvariável conforme necessário.Selecione Salvar e, em seguida, Painel de teste.
Preencha os parâmetros
RESOURCEGROUPeVMNAMEcom os valores apropriados. InsiraSApara oMETHODparâmetro exUAMIpara oUAMIparâmetro. O runbook tentará alterar o estado de energia da sua VM usando a identidade gerenciada atribuída ao sistema.Selecione Iniciar. Quando o runbook for concluído, 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@50342Altere o valor do
METHODparâmetro paraUA.Selecione Iniciar. O runbook tentará alterar o estado de energia da sua VM usando a identidade gerenciada atribuída pelo usuário nomeado. Quando o runbook for concluído, 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 quaisquer recursos que não sejam mais necessários, execute o seguinte 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
Próximos passos
Neste tutorial, criaste um runbook PowerShell em Automatização do Azure que usava uma identidade gerida, em vez da conta Run As para interagir com os recursos. Para ver os runbooks do Fluxo de Trabalho do PowerShell, consulte:
- Para solucionar problemas relacionados com identidade gerida durante a criação do runbook em PowerShell, consulte Resolução de problemas de identidade gerida do Automatização do Azure.