Tutorial: Criar manual powershell de automação utilizando identidade gerida
Este tutorial acompanha-o através da criação de um livro de administração powerShell em Automatização do Azure que usa uma identidade gerida, em vez da conta Run As para interagir com recursos. Os livros powerShell são baseados em Windows PowerShell. Uma identidade gerida do Azure Ative Directory (Azure AD) permite que o seu runbook aceda facilmente a outros recursos protegidos por Azure AD.
Neste tutorial, ficará a saber como:
- Atribuir permissões a identidades geridas
- Criar runbook do PowerShell
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
- Uma conta Automatização do Azure com pelo menos uma identidade gerida atribuída pelo utilizador. Para obter mais informações, consulte utilizar uma identidade gerida atribuída ao utilizador para uma conta Automatização do Azure.
- Módulos Az:
Az.Accounts
,Az.Automation
,Az.ManagedServiceIdentity
eAz.Compute
importados para a conta Automation. Para mais informações, consulte os módulos Import Az. - O módulo Azure Az PowerShell instalado na sua máquina. Para instalar ou atualizar, consulte Como instalar o módulo Azure Az PowerShell.
Az.ManagedServiceIdentity
é um módulo de pré-visualização e não instalado como parte do módulo Az. Para instalá-lo, corraInstall-Module -Name Az.ManagedServiceIdentity
. - Uma máquina virtual Azure. Uma vez que paras e começas esta máquina, não devia ser um VM de produção.
- Uma familiaridade geral com os runbooks da Automação.
Atribuir permissões a identidades geridas
Atribua permissões às identidades geridas para permitir que parem e liguem uma máquina virtual.
Inscreva-se no Azure interativamente utilizando 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>
Fornecer um valor adequado para as variáveis abaixo e, em seguida, executar o script.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"
Use a assinatura do Comandante PowerShell New-AzRole para atribuir uma função à identidade gerida 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 função é necessária para a identidade gerida atribuída pelo utilizador
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
São necessárias permissões adicionais para a identidade gerida atribuída ao sistema para executar cmdlets
Get-AzUserAssignedIdentity
eGet-AzAutomationAccount
como usado neste tutorial.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
Criar runbook do PowerShell
Crie um livro de execução que permita a execução por uma das identidades geridas. O livro de execução iniciará um VM parado ou impedirá um VM em funcionamento.
Inscreva-se no portal do Azure e navegue para a sua conta Demôm automação.
Em Automatização de Processos, selecione Runbooks.
Selecione Criar um livro de execução.
- Diga o nome do livro de bordo
miTesting
. - A partir do drop-down do tipo Runbook , selecione PowerShell.
- A partir da versão Runtime , selecione 7.1 (pré-visualização) ou 5.1.
- Introduza uma Descrição aplicável.
- Diga o nome do livro de bordo
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 Disable-AzContextAutosave -Scope Process | Out-Null # Connect using a Managed Service Identity try { $AzureContext = (Connect-AzAccount -Identity).context } catch{ Write-Output "There is no system-assigned user identity. Aborting."; exit } # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription ` -DefaultProfile $AzureContext 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 if ((Get-AzAutomationAccount -ResourceGroupName $resourceGroup ` -Name $automationAccount ` -DefaultProfile $AzureContext).Identity.UserAssignedIdentities.Values.PrincipalId.Contains($identity.PrincipalId)) { $AzureContext = (Connect-AzAccount -Identity -AccountId $identity.ClientId).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext } 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, revê o valor da
$automationAccount
variável conforme necessário.Selecione Guardar e, em seguida, testar o painel.
Povoar os parâmetros
RESOURCEGROUP
eVMNAME
com os valores apropriados. IntroduzaSA
para oMETHOD
parâmetro exUAMI
para oUAMI
parâmetro. O livro de bordo tentará alterar o estado de potência do seu VM utilizando a identidade gerida atribuída pelo sistema.Selecione Iniciar. Uma vez concluído o livro de execução, a saída deve 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
METHOD
parâmetro paraUA
.Selecione Iniciar. O livro de aplicação tentará alterar o estado de potência do seu VM utilizando a identidade gerida atribuída pelo utilizador. Uma vez concluído o livro de execução, a saída deve 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 já não são necessários, execute o seguinte livro de bordo.
#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
Passos seguintes
Neste tutorial, criou um livro de administração powerShell em Automatização do Azure que usou uma identidade gerida, em vez da conta Run As para interagir com recursos. Para ver os livros de fluxo de trabalho powerShell, consulte: