Zelfstudie: Automation PowerShell-runbook maken met beheerde identiteit

In deze zelfstudie wordt u door het maken van een PowerShell-runbook in Azure Automation geleid dat gebruikmaakt van een beheerde identiteit inplaats van het Uitvoeren als-account voor interactie met resources. PowerShell-runbooks zijn gebaseerd op Windows PowerShell. Met een beheerde identiteit van Azure Active Directory (Azure AD) heeft uw runbook eenvoudig toegang tot andere met Azure AD beveiligde resources.

In deze zelfstudie leert u het volgende:

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

Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

Vereisten

  • Een Azure Automation account met ten minste één door de gebruiker toegewezen beheerde identiteit. Zie Using a user-assigned managed identity for an Azure Automation account (Een doorde gebruiker toegewezen beheerde identiteit gebruiken voor een Azure Automation-account) voor meer informatie.
  • Az-modules: Az.Accounts , , en geïmporteerd in het Az.Automation Az.ManagedServiceIdentity Az.Compute Automation-account. Zie Az-modules importeren voor meer informatie.
  • De Azure Az PowerShell-module die op uw computer is geïnstalleerd. Zie De Azure Az PowerShell-moduleinstalleren als u wilt installeren of upgraden. Az.ManagedServiceIdentity is een preview-module en niet geïnstalleerd als onderdeel van de Az-module. Voer uit om deze te Install-Module -Name Az.ManagedServiceIdentity installeren.
  • Een virtuele Azure-machine. Aangezien u deze machine stopt en start, mag dit geen productie-VM zijn.
  • Een algemene bekendheid met Automation-runbooks.

Machtigingen toewijzen aan beheerde identiteiten

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

  1. Meld u interactief aan bij Azure met de cmdlet Verbinding maken-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. Geef een geschikte waarde op 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. Er zijn aanvullende machtigingen voor de door het systeem toegewezen beheerde identiteit nodig om cmdlets uit te voeren Get-AzUserAssignedIdentity en zoals in deze Get-AzAutomationAccount zelfstudie wordt gebruikt.

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

PowerShell-runbook maken

Maak een runbook dat uitvoering door een van beide beheerde identiteiten toestaat. Het runbook start een gestopte VM of stopt een VM die wordt uitgevoerd.

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

  2. Selecteer onder Procesautomatisering de optie Runbooks.

  3. Selecteer Een runbook maken.

    1. Noem het runbook miTesting .
    2. Selecteer PowerShell in de vervolgkeuzelijst Runbooktype.
    3. Selecteer 7.1 (preview) of 5.1 in de vervolgkeuzerij Runtime-versie.
    4. Voer een toepasselijke beschrijving in.
  4. Klik op Maken om het runbook te maken.

  5. 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
    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
    
  6. Wijzig in de editor op regel 8 de waarde voor de $automationAccount variabele naar behoefte.

  7. Selecteer Opslaan en vervolgens Testvenster.

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

  9. Selecteer Starten. Zodra het runbook is voltooid, moet de uitvoer er ongeveer als volgt uitzien:

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

  11. Selecteer Starten. Het runbook probeert de energietoestand van uw VM te wijzigen met behulp van de benoemde door de gebruiker toegewezen beheerde identiteit. Zodra het runbook is voltooid, moet de uitvoer er ongeveer als volgt uitzien:

    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 ops schonen

Als u resources wilt verwijderen die u niet meer nodig hebt, moet u het volgende runbook uitvoeren.

#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 waarin een beheerde identiteit is gebruikt in plaats van het Uitvoeren als-account voor interactie met resources. Zie voor een kijkje in PowerShell Workflow-runbooks: