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.ManagedServiceIdentitya Az.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ťte Install-Module -Name Az.ManagedServiceIdentitypří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č.

  1. 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>
    
  2. 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"
    
  3. 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
    
  4. 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
    
  5. K provádění rutin Get-AzUserAssignedIdentity a Get-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č.

  1. Přihlaste se k webu Azure Portal a přejděte ke svému účtu Automation.

  2. V části Automatizace procesů vyberte Runbooky.

  3. Vyberte Vytvořit runbook.

    1. Pojmenujte runbook miTesting.
    2. V rozevíracím seznamu Typ runbooku vyberte PowerShell.
    3. V rozevíracím seznamu verze modulu runtime vyberte 7.1 (Preview) nebo 5.1.
    4. Zadejte příslušný popis.
  4. Kliknutím na Vytvořit runbook vytvořte.

  5. 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
    
  6. V editoru na řádku 8 upravte hodnotu $automationAccount proměnné podle potřeby.

  7. Vyberte Uložit a potom podokno Test.

  8. Naplňte parametry RESOURCEGROUP a VMNAME odpovídajícími hodnotami. Zadejte SA parametr METHOD a xUAMI parametr UAMI . Runbook se pokusí změnit stav napájení vašeho virtuálního počítače pomocí spravované identity přiřazené systémem.

  9. 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
    
  10. Změňte hodnotu parametru METHOD na UA.

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