Kurz: Vytvoření runbooku PowerShellu pro automatizaci pomocí spravované identity
Tento kurz vás provede vytvořením runbooku PowerShellu ve službě Azure Automation, která používá spravovanou identitu místo účtu Spustit jako k interakci s prostředky. Runbooky PowerShellu jsou založené na Windows PowerShellu. Spravovaná identita ze služby Microsoft Entra ID umožňuje vašemu runbooku snadný přístup k dalším prostředkům chráněným službou Microsoft Entra.
V tomto kurzu se naučíte:
- Přiřazení oprávnění ke spravovaným identitám
- Vytvoření runbooku v PowerShellu
Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Požadavky
- Účet Azure Automation s alespoň jednou spravovanou identitou přiřazenou uživatelem. Další informace najdete v tématu Použití spravované identity přiřazené uživatelem pro účet Azure Automation.
- Az modules:
Az.Accounts
,Az.Automation
,Az.ManagedServiceIdentity
aAz.Compute
import do účtu Automation. Další informace najdete v tématu Import modulů Az. - Modul Azure Az PowerShell nainstalovaný na vašem počítači. Pokud chcete nainstalovat nebo upgradovat, přečtěte si, jak nainstalovat modul Azure Az PowerShell.
Az.ManagedServiceIdentity
je modul Preview a není nainstalovaný jako součást modulu Az. Pokud ho chcete nainstalovat, spusťteInstall-Module -Name Az.ManagedServiceIdentity
příkaz . - Virtuální počítač Azure. Vzhledem k tomu, že tento počítač zastavíte a spustíte, neměl by to být produkční virtuální počítač.
- Obecná znalost runbooků Automation
Přiřazení oprávnění ke spravovaným identitám
Přiřaďte oprávnění spravovaným identitám, abyste jim umožnili zastavit a spustit virtuální počítač.
Přihlaste se k Azure interaktivně pomocí rutiny Connect-AzAccount a postupujte podle pokynů.
# 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>
Zadejte odpovídající hodnotu pro níže uvedené proměnné a spusťte skript.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"
Pomocí rutiny PowerShellu New-AzRoleAssignment přiřaďte roli spravované identitě přiřazené systémem.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Stejné přiřazení role je potřeba pro spravovanou identitu přiřazenou uživatelem.
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
K provádění rutin
Get-AzUserAssignedIdentity
aGet-AzAutomationAccount
použití v tomto kurzu jsou potřeba další oprávnění pro spravovanou identitu přiřazenou systémem.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
Vytvoření powershellového runbooku
Vytvořte runbook, který umožní spuštění pomocí spravované identity. Runbook spustí zastavený virtuální počítač nebo zastaví spuštěný virtuální počítač.
Přihlaste se k webu Azure Portal a přejděte ke svému účtu Automation.
V části Automatizace procesů vyberte Runbooky.
Vyberte Vytvořit runbook.
- Pojmenujte runbook
miTesting
. - V rozevíracím seznamu Typ runbooku vyberte PowerShell.
- V rozevíracím seznamu verze modulu runtime vyberte 7.1 (Preview) nebo 5.1.
- Zadejte příslušný popis.
- Pojmenujte runbook
Kliknutím na Vytvořit runbook vytvořte.
V editoru runbooku vložte následující kód:
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
V editoru na řádku 8 upravte hodnotu
$automationAccount
proměnné podle potřeby.Vyberte Uložit a potom podokno Test.
Naplňte parametry
RESOURCEGROUP
aVMNAME
odpovídajícími hodnotami. ZadejteSA
parametrMETHOD
axUAMI
parametrUAMI
. Runbook se pokusí změnit stav napájení vašeho virtuálního počítače pomocí spravované identity přiřazené systémem.Vyberte Spustit. Po dokončení runbooku by měl výstup vypadat nějak takto:
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
Změňte hodnotu parametru
METHOD
naUA
.Vyberte Spustit. Runbook se pokusí změnit stav napájení vašeho virtuálního počítače pomocí pojmenované spravované identity přiřazené uživatelem. Po dokončení runbooku by měl výstup vypadat nějak takto:
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
Vyčištění prostředků
Pokud chcete odebrat prostředky, které už nepotřebujete, spusťte následující 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
Další kroky
V tomto kurzu jste vytvořili runbook PowerShellu ve službě Azure Automation, který používal spravovanou identitu, a ne účet Spustit jako pro interakci s prostředky. Informace o runboocích pracovního postupu PowerShellu najdete tady: