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 firmy Microsoft Entra ID umożliwia elementowi Runbook łatwe uzyskiwanie dostępu do innych chronionych zasobów firmy Microsoft.

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.ManagedServiceIdentityi Az.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 polecenie Install-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.

  1. Zaloguj się interaktywnie na platformie Azure przy użyciu polecenia cmdlet Połączenie-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>
    
  2. 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"
    
  3. 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
    
  4. 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
    
  5. Do wykonywania poleceń cmdlet i Get-AzAutomationAccount używanych Get-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ą.

  1. Zaloguj się do witryny Azure Portal i przejdź do swojego konta usługi Automation.

  2. W obszarze Automatyzacja procesów wybierz pozycję Elementy Runbook.

  3. Wybierz pozycję Utwórz element Runbook.

    1. Nadaj elementowi runbook miTestingnazwę .
    2. Z listy rozwijanej Typ elementu Runbook wybierz pozycję PowerShell.
    3. Z listy rozwijanej Wersja środowiska uruchomieniowego wybierz pozycję 7.1 (wersja zapoznawcza) lub 5.1.
    4. Wprowadź odpowiedni opis.
  4. Kliknij przycisk Utwórz, aby utworzyć element Runbook.

  5. 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
    
  6. W edytorze w wierszu 8 popraw wartość zmiennej $automationAccount zgodnie z potrzebami.

  7. Wybierz pozycję Zapisz , a następnie okienko Testuj.

  8. Wypełnij parametry RESOURCEGROUP i VMNAME odpowiednimi wartościami. Wprowadź SA dla parametru METHOD i xUAMI parametru UAMI . Element Runbook podejmie próbę zmiany stanu zasilania maszyny wirtualnej przy użyciu przypisanej przez system tożsamości zarządzanej.

  9. 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
    
  10. Zmień wartość parametru na METHODUA.

  11. 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: