Samouczek: tworzenie elementu Runbook programu PowerShell usługi Automation przy użyciu tożsamości zarządzanej
Ten samouczek przeprowadzi Cię przez proces tworzenia elementu Runbook programu PowerShell w usłudze Azure Automation, który używa tożsamości zarządzanej, a nie konta Uruchom jako do interakcji z zasobami. Elementy Runbook programu PowerShell są oparte na programie Windows PowerShell. Tożsamość zarządzana Microsoft Entra umożliwia aplikacji łatwy dostęp usługi Runbook do innych zasobów chronionych przez tożsamość Microsoft Entra.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Przypisywanie uprawnień do tożsamości zarządzanych
- Tworzenie elementu runbook programu PowerShell
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wymagania wstępne
- Konto usługi Azure Automation z co najmniej jedną tożsamością zarządzaną przypisaną przez użytkownika. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanej przypisanej przez użytkownika dla konta usługi Azure Automation.
- Moduły Az:
Az.Accounts
,Az.Automation
,Az.ManagedServiceIdentity
iAz.Compute
zaimportowane na konto usługi Automation. Aby uzyskać więcej informacji, zobacz Importuj moduły platformy Azure. - Moduł Azure Az programu PowerShell zainstalowany na maszynie. Aby zainstalować lub uaktualnić, zobacz Jak zainstalować moduł Azure Az programu PowerShell.
Az.ManagedServiceIdentity
jest modułem w wersji zapoznawczej i nie jest zainstalowany w ramach modułu Az. Aby go zainstalować, uruchom polecenieInstall-Module -Name Az.ManagedServiceIdentity
. - Maszyna wirtualna platformy Azure. Ponieważ zatrzymasz i uruchomisz tę maszynę, nie powinna być to produkcyjna maszyna wirtualna.
- Ogólna znajomość elementów Runbook usługi Automation.
Przypisywanie uprawnień do tożsamości zarządzanych
Przypisz uprawnienia do tożsamości zarządzanych, aby umożliwić im zatrzymywanie i uruchamianie maszyny wirtualnej.
Zaloguj się interaktywnie na platformie Azure przy użyciu polecenia cmdlet Connect-AzAccount i postępuj zgodnie z instrukcjami.
# 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>
Podaj odpowiednią wartość dla poniższych zmiennych, a następnie wykonaj skrypt.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"
Użyj polecenia cmdlet programu PowerShell New-AzRoleAssignment , aby przypisać rolę do przypisanej przez system tożsamości zarządzanej.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
To samo przypisanie roli jest wymagane w przypadku tożsamości zarządzanej przypisanej przez użytkownika
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Do wykonywania poleceń cmdlet i
Get-AzAutomationAccount
używanychGet-AzUserAssignedIdentity
w tym samouczku są potrzebne dodatkowe uprawnienia do tożsamości zarządzanej przypisanej przez system.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
Tworzenie elementu Runbook programu PowerShell
Utwórz element Runbook, który umożliwi wykonywanie przez jedną z tożsamości zarządzanych. Element Runbook uruchomi zatrzymaną maszynę wirtualną lub zatrzyma uruchomioną maszynę wirtualną.
Zaloguj się do witryny Azure Portal i przejdź do swojego konta usługi Automation.
W obszarze Automatyzacja procesów wybierz pozycję Elementy Runbook.
Wybierz pozycję Utwórz element Runbook.
- Nadaj elementowi runbook
miTesting
nazwę . - Z listy rozwijanej Typ elementu Runbook wybierz pozycję PowerShell.
- Z listy rozwijanej Wersja środowiska uruchomieniowego wybierz pozycję 7.1 (wersja zapoznawcza) lub 5.1.
- Wprowadź odpowiedni opis.
- Nadaj elementowi runbook
Kliknij przycisk Utwórz, aby utworzyć element Runbook.
W edytorze elementów Runbook wklej następujący kod:
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
W edytorze w wierszu 8 popraw wartość zmiennej
$automationAccount
zgodnie z potrzebami.Wybierz pozycję Zapisz , a następnie okienko Testuj.
Wypełnij parametry
RESOURCEGROUP
iVMNAME
odpowiednimi wartościami. WprowadźSA
dla parametruMETHOD
ixUAMI
parametruUAMI
. Element Runbook podejmie próbę zmiany stanu zasilania maszyny wirtualnej przy użyciu przypisanej przez system tożsamości zarządzanej.Wybierz Start. Po zakończeniu działania elementu Runbook dane wyjściowe powinny wyglądać podobnie do następujących:
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
Zmień wartość parametru na
METHOD
UA
.Wybierz Start. Element Runbook podejmie próbę zmiany stanu zasilania maszyny wirtualnej przy użyciu nazwanej tożsamości zarządzanej przypisanej przez użytkownika. Po zakończeniu działania elementu Runbook dane wyjściowe powinny wyglądać podobnie do następujących:
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
Czyszczenie zasobów
Aby usunąć wszystkie zasoby, które nie są już potrzebne, uruchom następujący element 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
Następne kroki
W tym samouczku utworzono element Runbook programu PowerShell w usłudze Azure Automation, który używał tożsamości zarządzanej, a nie konta Uruchom jako do interakcji z zasobami. Aby zapoznać się z elementami Runbook przepływu pracy programu PowerShell, zobacz: