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. A PowerShell-runbookok a Windows PowerShellen alapulnak. A Microsoft Entra ID-ból származó felügyelt identitás révén a runbook egyszerűen hozzáférhet más, Microsoft Entra által védett 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
- Azure Automation-fiók, amely legalább egy, felhasználó által hozzárendelt felügyelt identitással rendelkezik. További információ: Felhasználó által hozzárendelt felügyelt identitás használata Azure Automation-fiókhoz.
- Az modules:
Az.Accounts
, ,Az.Automation
,Az.ManagedServiceIdentity
andAz.Compute
imported into the Automation account. További információ: Az-modulok importálása. - A számítógépre telepített Azure Az PowerShell-modul . A telepítéssel vagy frissítéssel kapcsolatban tekintse meg az Azure Az PowerShell-modul telepítését ismertető témakört.
Az.ManagedServiceIdentity
egy előzetes verziójú modul, és nem az Az modul részeként van telepítve. A telepítéshez futtassa a következőtInstall-Module -Name Az.ManagedServiceIdentity
: . - Egy Azure-beli virtuális gép. Mivel leállítja és elindítja ezt a gépet, nem lehet éles virtuális gép.
- Az Automation runbookok általános ismerete.
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.
Jelentkezzen be interaktívan az Azure-ba a Connect-AzAccount parancsmag használatával, é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>
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"
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
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
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 ésGet-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.
Jelentkezzen be az Azure Portalra, és lépjen az Automation-fiókjához.
A Folyamatautomatizálás területen válassza a Runbookok lehetőséget.
Válassza a Runbook létrehozása lehetőséget.
- Nevezze el a runbookot
miTesting
. - A Runbook típusa legördülő listában válassza a PowerShellt.
- 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.
- Adjon meg egy vonatkozó leírást.
- Nevezze el a runbookot
A forgatókönyv létrehozásához kattintson a Létrehozás gombra.
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
A szerkesztő 8. sorában szükség szerint módosítsa a
$automationAccount
változó értékét.Válassza a Mentés , majd a Tesztelés panelt.
Töltse ki a paramétereket
RESOURCEGROUP
ésVMNAME
a megfelelő értékeket. Adja megSA
aMETHOD
paramétert ésxUAMI
a paramétertUAMI
. 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.Válassza az Indítás lehetőséget . 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
Módosítsa a paraméter értékét a
METHOD
következőreUA
: .Válassza az Indítás lehetőséget . 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: