Tutoriel : Créer un runbook PowerShell Automation avec une identité managée
Ce tutoriel vous guide dans la création d’un runbook PowerShell dans Azure Automation qui utilise une identité managée, plutôt que le compte d’identification, pour interagir avec les ressources. Les Runbooks PowerShell sont basés sur Windows PowerShell. Une identité managée depuis Microsoft Entra ID permettant à votre runbook d’accéder facilement à d’autres ressources protégées par Microsoft Entra.
Dans ce tutoriel, vous allez apprendre à :
- Attribuer des autorisations aux identités managées
- Créer un runbook PowerShell
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Prérequis
- Un compte Azure Automation avec au moins une identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Utilisation d’une identité managée affectée par l’utilisateur pour un compte Azure Automation.
- Modules Az :
Az.Accounts
,Az.Automation
,Az.ManagedServiceIdentity
etAz.Compute
importés dans le compte Automation. Pour plus d’informations, consultez Importer des modules Az. - Le module PowerShell Azure Az installé sur votre ordinateur. Pour plus d'informations sur son installation ou sa mise à niveau, consultez Installer le module PowerShell Azure Az.
Az.ManagedServiceIdentity
est un module en préversion qui n’est pas installé dans le cadre du module Az. Pour l’installer, exécutezInstall-Module -Name Az.ManagedServiceIdentity
. - Une machine virtuelle Azure. Comme vous allez devoir l’arrêter et la démarrer, il ne doit pas s’agir d’une machine virtuelle de production.
- Une connaissance générale des runbooks Automation.
Attribuer des autorisations aux identités managées
Affectez des autorisations aux identités managées pour leur permettre d’arrêter et de démarrer une machine virtuelle.
Connectez-vous à Azure de manière interactive à l’aide de la cmdlet Connect-AzAccount et suivez les instructions.
# 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>
Fournissez une valeur appropriée pour les variables ci-dessous, puis exécutez le script.
$resourceGroup = "resourceGroupName" # These values are used in this tutorial $automationAccount = "xAutomationAccount" $userAssignedManagedIdentity = "xUAMI"
Utilisez la cmdlet PowerShell New-AzRoleAssignment pour affecter un rôle à l’identité managée affectée par le système.
$role1 = "DevTest Labs User" $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
La même attribution de rôle est nécessaire pour l’identité managée affectée par l’utilisateur
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity).PrincipalId New-AzRoleAssignment ` -ObjectId $UAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role1
Des autorisations supplémentaires pour l’identité gérée affectée par le système sont nécessaires pour exécuter les cmdlets
Get-AzUserAssignedIdentity
etGet-AzAutomationAccount
comme dans ce tutoriel.$role2 = "Reader" New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName $role2
Mon premier Runbook PowerShell
Créez un runbook qui autorise l’exécution par l’une des identités managées. Le runbook démarre une machine virtuelle arrêtée ou arrête une machine virtuelle en cours d’exécution.
Connectez-vous au portail Azure et accédez à votre compte Automation.
Sous Automatisation de processus, sélectionnez Runbooks.
Sélectionnez Créer un runbook.
- Nommez le runbook
miTesting
. - Dans la liste déroulante Type de runbook, sélectionnez PowerShell.
- Dans la liste déroulante Version du runtime, sélectionnez 7.1 (préversion) ou 5.1.
- Entrez une Description applicable.
- Nommez le runbook
Cliquez sur Créer pour créer le runbook.
Dans l’éditeur de runbook, collez le code suivant :
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
Dans l’éditeur, sur la ligne 8, modifiez la valeur de la variable
$automationAccount
si nécessaire.Sélectionnez Enregistrer, puis volet Test.
Renseignez les paramètres
RESOURCEGROUP
etVMNAME
avec les valeurs appropriées. EntrezSA
pour le paramètreMETHOD
, etxUAMI
pour le paramètreUAMI
. Le runbook va tenter de modifier l’état d’alimentation de votre machine virtuelle à l’aide de l’identité managée affectée par le système.Sélectionnez Démarrer. Une fois le runbook terminé, la sortie doit ressembler à ce qui suit :
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
Modifiez la valeur du paramètre
METHOD
enUA
.Sélectionnez Démarrer. Le runbook va tenter de modifier l’état d’alimentation de votre machine virtuelle à l’aide de l’identité managée affectée par l’utilisateur. Une fois le runbook terminé, la sortie doit ressembler à ce qui suit :
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
Suppression des ressources
Pour supprimer toutes les ressources qui ne sont plus nécessaires, exécutez le runbook suivant.
#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
Étapes suivantes
Dans ce tutoriel, vous avez créé un runbook PowerShell dans Azure Automation qui utilise une identité managée, plutôt que le compte d’identification, pour interagir avec les ressources. Pour obtenir un aperçu des runbooks PowerShell Workflow, consultez :