Oktatóanyag: Automation PowerShell-runbook létrehozása felügyelt identitással

Ez az oktatóanyag bemutatja, hogyan hozhat létre PowerShell-runbookot az Azure Automationben, amely felügyelt identitást használ a futtató fiók helyett az erőforrások használatához. PowerShell runbooks are based on Windows PowerShell. A Microsoft Entra-azonosítóból származó felügyelt identitás lehetővé teszi a runbook számára, hogy könnyen hozzáférjen a Microsoft Entra által védett egyéb erőforrásokhoz.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Engedélyek hozzárendelése felügyelt identitásokhoz
  • PowerShell-runbook létrehozása

Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

Előfeltételek

Engedélyek hozzárendelése felügyelt identitásokhoz

Engedélyek hozzárendelése a felügyelt identitásokhoz, hogy lehetővé tegyék számukra a virtuális gép leállítását és elindítását.

  1. Jelentkezzen be interaktívan az Azure-ba az Csatlakozás-AzAccount parancsmaggal, és kövesse az utasításokat.

    # 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. Adjon meg egy megfelelő értéket az alábbi változókhoz, majd hajtsa végre a szkriptet.

    $resourceGroup = "resourceGroupName"
    
    # These values are used in this tutorial
    $automationAccount = "xAutomationAccount"
    $userAssignedManagedIdentity = "xUAMI"
    
  3. A New-AzRoleAssignment PowerShell-parancsmaggal szerepkört rendelhet a rendszer által hozzárendelt felügyelt identitáshoz.

    $role1 = "DevTest Labs User"
    
    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName $role1
    
  4. Ugyanez a szerepkör-hozzárendelés szükséges a felhasználó által hozzárendelt felügyelt identitáshoz

    $UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId
    New-AzRoleAssignment `
        -ObjectId $UAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName $role1
    
  5. A rendszer által hozzárendelt felügyelt identitáshoz további engedélyekre van szükség a parancsmagok Get-AzUserAssignedIdentity végrehajtásához és Get-AzAutomationAccount az oktatóanyagban használt módon.

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

PowerShell-alapú runbook létrehozása

Hozzon létre egy runbookot, amely lehetővé teszi a végrehajtást bármelyik felügyelt identitással. A runbook elindít egy leállított virtuális gépet, vagy leállítja a futó virtuális gépet.

  1. Jelentkezzen be az Azure Portalra, és lépjen az Automation-fiókjához.

  2. A Folyamatautomatizálás területen válassza a Runbookok lehetőséget.

  3. Válassza a Runbook létrehozása lehetőséget.

    1. Nevezze el a runbookot miTesting.
    2. A Runbook típusa legördülő listában válassza a PowerShellt.
    3. A Futtatókörnyezet verzió legördülő menüjében válassza a 7.1 -es (előzetes verzió) vagy az 5.1-es verziót.
    4. Adjon meg egy vonatkozó leírást.
  4. A forgatókönyv létrehozásához kattintson a Létrehozás gombra.

  5. A runbook-szerkesztőben illessze be a következő kódot:

    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. A szerkesztő 8. sorában szükség szerint módosítsa a $automationAccount változó értékét.

  7. Válassza a Mentés , majd a Tesztelés panelt.

  8. Töltse ki a paramétereket RESOURCEGROUP és VMNAME a megfelelő értékeket. Adja meg SA a METHOD paramétert és xUAMI a paramétert UAMI . A runbook megkísérli módosítani a virtuális gép energiaállapotát a rendszer által hozzárendelt felügyelt identitás használatával.

  9. Select Start. A runbook befejeződése után a kimenetnek a következőhöz hasonlóan kell kinéznie:

     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. Módosítsa a paraméter értékét a METHOD következőre UA: .

  11. Select Start. A runbook megkísérli módosítani a virtuális gép energiaállapotát a felhasználó által hozzárendelt felügyelt identitás használatával. A runbook befejeződése után a kimenetnek a következőhöz hasonlóan kell kinéznie:

    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
    

Erőforrások törlése

A már nem szükséges erőforrások eltávolításához futtassa az alábbi runbookot.

#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

Következő lépések

Ebben az oktatóanyagban létrehozott egy PowerShell-runbookot az Azure Automationben, amely felügyelt identitást használt a futtató fiók helyett az erőforrások használatához. A PowerShell-munkafolyamat-forgatókönyvek megtekintéséhez tekintse meg a következőt: