Envoyer un e-mail à partir d’un runbook Automation
Vous pouvez envoyer un e-mail à partir d’un runbook avec SendGrid à l’aide de PowerShell.
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Prérequis
Vérification de l’expéditeur SendGrid. Domain (Domaine) ou Single Sender (Expéditeur unique)
Votre clé d’API SendGrid.
Un compte Azure Automation avec au moins une identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Activer les identités managées.
Modules Az :
Az.Accounts
etAz.KeyVault
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.
Créer un Azure Key Vault
Créez une instance Azure Key Vault et stratégie d’accès Key Vault qui permet aux informations d’identification d’accéder et de définir les secrets de coffre de clés dans le coffre de clés spécifié.
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 = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
Créer une instance Key Vault et assigner des autorisations
# Create the new key vault $newKeyVault = New-AzKeyVault ` -VaultName $VaultName ` -ResourceGroupName $resourceGroup ` -Location $region $resourceId = $newKeyVault.ResourceId # Convert the SendGrid API key into a SecureString $Secret = ConvertTo-SecureString -String $SendGridAPIKey ` -AsPlainText -Force Set-AzKeyVaultSecret -VaultName $VaultName ` -Name 'SendGridAPIKey' ` -SecretValue $Secret # Grant Key Vault access to the Automation account's system-assigned managed identity. $SA_PrincipalId = (Get-AzAutomationAccount ` -ResourceGroupName $resourceGroup ` -Name $automationAccount).Identity.PrincipalId Set-AzKeyVaultAccessPolicy ` -VaultName $vaultName ` -ObjectId $SA_PrincipalId ` -PermissionsToSecrets Set, Get # Grant Key Vault access to the user-assigned managed identity. $UAMI = Get-AzUserAssignedIdentity ` -ResourceGroupName $resourceGroup ` -Name $userAssignedManagedIdentity Set-AzKeyVaultAccessPolicy ` -VaultName $vaultName ` -ObjectId $UAMI.PrincipalId ` -PermissionsToSecrets Set, Get
Pour découvrir d’autres méthodes de création d’un coffre de clés Azure et de stockage d’un secret, consultez Démarrages rapides Key Vault.
Attribuer des autorisations aux identités managées
Affectez des autorisations à l’identité managée appropriée. Le runbook peut utiliser l’identité managée affectée par le système du compte Automation ou une identité managée affectée par l’utilisateur. Des étapes sont fournies pour affecter des autorisations à chaque identité. Les étapes ci-dessous utilisent PowerShell. Si vous préférez utiliser le portail, consultez Attribuer des rôles Azure à l’aide du portail Azure.
Utilisez la cmdlet PowerShell New-AzRoleAssignment pour affecter un rôle à l’identité managée affectée par le système.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Attribuer un rôle à une identité managée affectée par l'utilisateur.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Pour l’identité managée affectée par le système, affichez
ClientId
et enregistrez la valeur pour une utilisation ultérieure.$UAMI.ClientId
Créer le runbook pour envoyer un e-mail
Une fois que vous avez créé un coffre de clés et stocké votre clé API SendGrid
, il est temps de créer le runbook qui récupère la clé API et envoie un e-mail. Utilisons un runbook qui utilise l'Identité managée affectée par le système pour s'authentifier auprès d'Azure et extraire le secret d'Azure Key Vault. Nous allons appeler le runbook Send-GridMailMessage. Vous pouvez modifier le script PowerShell utilisé pour différents scénarios.
Connectez-vous au portail Azure et accédez à votre compte Automation.
Dans la page de votre compte Automation ouvert, sous Automatisation de processus, sélectionnez Runbooks
Sélectionnez + Créer un runbook.
- Nommez le runbook
Send-GridMailMessage
. - Dans la liste déroulante Type de runbook, sélectionnez PowerShell.
- Sélectionnez Créer.
- Nommez le runbook
Le runbook est créé et la page Modifier un runbook PowerShell s’ouvre.
Copiez l’exemple PowerShell suivant dans la page Modifier. Vérifiez que le
VaultName
spécifie le nom que vous avez choisi pour votre coffre de clés.Param( [Parameter(Mandatory=$True)] [String] $destEmailAddress, [Parameter(Mandatory=$True)] [String] $fromEmailAddress, [Parameter(Mandatory=$True)] [String] $subject, [Parameter(Mandatory=$True)] [String] $content, [Parameter(Mandatory=$True)] [String] $ResourceGroupName ) # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity $AzureContext = (Connect-AzAccount -Identity).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext $VaultName = "<Enter your vault name>" $SENDGRID_API_KEY = Get-AzKeyVaultSecret ` -VaultName $VaultName ` -Name "SendGridAPIKey" ` -AsPlainText -DefaultProfile $AzureContext $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("Authorization", "Bearer " + $SENDGRID_API_KEY) $headers.Add("Content-Type", "application/json") $body = @{ personalizations = @( @{ to = @( @{ email = $destEmailAddress } ) } ) from = @{ email = $fromEmailAddress } subject = $subject content = @( @{ type = "text/plain" value = $content } ) } $bodyJson = $body | ConvertTo-Json -Depth 4 $response = Invoke-RestMethod -Uri https://api.sendgrid.com/v3/mail/send -Method Post -Headers $headers -Body $bodyJson
Si vous souhaitez que le runbook s’exécute avec l’identité managée affectée par le système, laissez le code tel quel. Si vous préférez utiliser une identité managée affectée par l’utilisateur, procédez comme suit :
- À la ligne 18, supprimez
$AzureContext = (Connect-AzAccount -Identity).context
, - Remplacez-la par
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
et - Entrez l’ID client que vous avez obtenu précédemment.
- À la ligne 18, supprimez
Sélectionnez Enregistrer, Publier, puis Oui lorsque vous y êtes invité.
Pour vérifier que le runbook s’exécute correctement, vous pouvez suivre les étapes décrites dans Tester un runbook ou Démarrer un runbook.
Si vous ne voyez pas votre e-mail de test, vérifiez vos dossiers de courrier indésirable et de spam.
Nettoyer les ressources
Quand le runbook n’est plus nécessaire, sélectionnez-le dans la liste de runbooks et sélectionnez Supprimer.
Supprimez le coffre de clés à l’aide de l’applet de commande Remove-AzKeyVault.
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
Étapes suivantes
- Pour envoyer des données de travaux de runbook à votre espace de travail Log Analytics, consultez Transférer des données de travaux Azure Automation aux journaux Azure Monitor.
- Pour superviser les journaux et les métriques de base, consultez Utiliser une alerte pour déclencher un runbook Azure Automation.