Delen via


Zelfstudie: Automation PowerShell-runbook maken met beheerde identiteit

In deze zelfstudie leert u hoe u een PowerShell-runbook maakt in Azure Automation dat gebruikmaakt van een beheerde identiteit om te communiceren met resources. PowerShell-runbooks zijn gebaseerd op Windows PowerShell. Met een beheerde identiteit van Microsoft Entra ID heeft uw app runbook toegang tot andere met Microsoft Entra beveiligde resources.

In deze zelfstudie leert u het volgende:

  • Machtigingen toewijzen aan beheerde identiteiten
  • Een PowerShell-runbook maken

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Vereisten

Voordat u machtigingen toewijst aan beheerde identiteiten, moet u ervoor zorgen dat u aan deze vereisten voldoet:

Machtigingen toewijzen aan beheerde identiteiten

Wijs machtigingen toe aan de beheerde identiteiten zodat ze een virtuele machine kunnen stoppen en starten.

Voer de volgende stappen uit om machtigingen toe te wijzen aan beheerde identiteiten:

  1. Meld u interactief aan bij Azure met behulp van de cmdlet Connect-AzAccount en volg de instructies:

    # 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. Voer een geschikte waarde in voor de onderstaande variabelen en voer vervolgens het script uit.

    $resourceGroup = "resourceGroupName"
    
    # These values are used in this tutorial
    $automationAccount = "xAutomationAccount"
    $userAssignedManagedIdentity = "xUAMI"
    
  3. Gebruik de PowerShell-cmdlet New-AzRoleAssignment om een rol toe te wijzen aan de door het systeem toegewezen beheerde identiteit.

    $role1 = "DevTest Labs User"
    
    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName $role1
    
  4. Dezelfde roltoewijzing is nodig voor de door de gebruiker toegewezen beheerde identiteit.

    $UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId
    New-AzRoleAssignment `
        -ObjectId $UAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName $role1
    
  5. Aanvullende machtigingen voor de door het systeem toegewezen beheerde identiteit zijn nodig om cmdlets Get-AzUserAssignedIdentity uit te voeren en Get-AzAutomationAccount zoals in deze zelfstudie wordt gebruikt.

    $role2 = "Reader"
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName $role2
    

PowerShell-runbook maken

Maak een runbook dat uitvoering door een beheerde identiteit toestaat. Het runbook start een gestopte VM of stopt een actieve VM.

Voer de volgende stappen uit om een PowerShell-runbook te maken:

  1. Meld u aan bij Azure Portal en navigeer naar uw Automation-account.

  2. Selecteer op de pagina Overzichtde optie Runtime-omgeving uitproberen, als deze nog niet in de nieuwe ervaring staat.

  3. Selecteer onder Procesautomatisering de optie Runbooks.

  4. Selecteer Een runbook maken en ga als volgt te werk:

    1. Geef het runbook miTestingeen naam.
    2. Selecteer PowerShell in de vervolgkeuzelijst Runbooktype.
    3. Selecteer in de vervolgkeuzelijst Runtime-omgevingde bestaande Runtime-omgeving of maak een nieuwe met Runtime PowerShell en versie 7.4.
    4. Voer een toepasselijke beschrijving in.
  5. Selecteer Maken om het runbook te maken.

  6. Plak de volgende code in de runbookeditor:

    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
    
  7. Wijzig in de editor op regel 8 de waarde voor de $automationAccount variabele indien nodig.

  8. Selecteer Opslaan en vervolgens het deelvenster Testen.

  9. Vul de parameters RESOURCEGROUP en VMNAME de juiste waarden in. Voer SA in voor de METHOD parameter en xUAMI voor de UAMI parameter. Het runbook probeert de energiestatus van uw VIRTUELE machine te wijzigen met behulp van de door het systeem toegewezen beheerde identiteit.

  10. Selecteer Starten. Zodra het runbook is voltooid, ziet de uitvoer er ongeveer als volgt uit:

     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
    
  11. Wijzig de waarde voor de METHOD parameter in UA.

  12. Selecteer Starten. Het runbook probeert de energiestatus van uw VIRTUELE machine te wijzigen met behulp van de door de gebruiker toegewezen beheerde identiteit. Zodra het runbook is voltooid, ziet de uitvoer er ongeveer als volgt uit:

    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
    

Resources opschonen

Voer het volgende runbook uit om resources te verwijderen die niet meer nodig zijn:

#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

Volgende stappen

In deze zelfstudie hebt u een PowerShell-runbook gemaakt in Azure Automation dat een beheerde identiteit heeft gebruikt in plaats van het Uitvoeren als-account om te communiceren met resources. Zie voor een overzicht van PowerShell Workflow-runbooks: