Skicka ett e-postmeddelande från en Automation-runbook
Du kan skicka ett e-postmeddelande från en runbook med SendGrid med hjälp av PowerShell.
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Förutsättningar
Verifiering av SendGrid-avsändare. Antingen domän eller enskild avsändare
Din SendGrid API-nyckel.
Ett Azure Automation-konto med minst en användartilldelad hanterad identitet. Mer information finns i Aktivera hanterade identiteter.
Az-moduler:
Az.Accounts
ochAz.KeyVault
importeras till Automation-kontot. Mer information finns i Importera Az-moduler.Azure Az PowerShell-modulen som är installerad på datorn. Information om hur du installerar eller uppgraderar finns i Installera Azure Az PowerShell-modulen.
Skapa ett Azure Key Vault
Skapa en Azure Key Vault- och Key Vault-åtkomstprincip som gör att autentiseringsuppgifterna kan hämta och ange nyckelvalvshemligheter i det angivna nyckelvalvet.
Logga in på Azure interaktivt med hjälp av cmdleten Connect-AzAccount och följ anvisningarna.
# 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>
Ange ett lämpligt värde för variablerna nedan och kör sedan skriptet.
$resourceGroup = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
Skapa Key Vault och tilldela behörigheter
# 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
Andra sätt att skapa ett Azure Key Vault och lagra en hemlighet finns i Key Vault-snabbstarter.
Tilldela behörigheter till hanterade identiteter
Tilldela behörigheter till lämplig hanterad identitet. Runbooken kan använda antingen den systemtilldelade hanterade identiteten för Automation-kontot eller en användartilldelad hanterad identitet. Steg tillhandahålls för att tilldela behörigheter till varje identitet. Stegen nedan använder PowerShell. Om du föredrar att använda portalen kan du läsa Tilldela Azure-roller med hjälp av Azure Portal.
Använd PowerShell-cmdleten New-AzRoleAssignment för att tilldela en roll till den systemtilldelade hanterade identiteten.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Tilldela en roll till en användartilldelad hanterad identitet.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
För den systemtilldelade hanterade identiteten visar
ClientId
och registrerar du värdet för senare användning.$UAMI.ClientId
Skapa runbooken för att skicka ett e-postmeddelande
När du har skapat ett nyckelvalv och lagrat din SendGrid
API-nyckel är det dags att skapa runbooken som hämtar API-nyckeln och skickar ett e-postmeddelande. Nu ska vi använda en runbook som använder den systemtilldelade hanterade identiteten för att autentisera med Azure för att hämta hemligheten från Azure Key Vault. Vi anropar runbooken Send-GridMailMessage. Du kan ändra PowerShell-skriptet som används för olika scenarier.
Logga in på Azure Portal och gå till ditt Automation-konto.
På sidan för ditt öppna Automation-konto går du till ProcessAutomatisering och väljer Runbooks
Välj + Skapa en runbook.
- Ge runbooken
Send-GridMailMessage
namnet . - I listrutan Runbook-typ väljer du PowerShell.
- Välj Skapa.
- Ge runbooken
Runbooken skapas och sidan Redigera PowerShell-runbook öppnas.
Kopiera följande PowerShell-exempel till sidan Redigera. Kontrollera att anger det
VaultName
namn som du har valt för ditt Key Vault.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
Om du vill att runbooken ska köras med den systemtilldelade hanterade identiteten lämnar du koden som den är. Om du föredrar att använda en användartilldelad hanterad identitet:
- Från rad 18 tar du bort
$AzureContext = (Connect-AzAccount -Identity).context
, - Ersätt den med
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
, och - Ange det klient-ID som du hämtade tidigare.
- Från rad 18 tar du bort
Välj Spara, Publicera och sedan Ja när du uppmanas att göra det.
Du kan kontrollera att runbooken körs korrekt genom att följa stegen under Testa en runbook eller Starta en runbook.
Om du inte ser din test-e-post från början kontrollerar du skräppostmapparna.
Rensa resurser
När runbooken inte längre behövs väljer du den i runbook-listan och väljer Ta bort.
Ta bort Nyckelvalvet med cmdleten Remove-AzKeyVault .
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
Nästa steg
- Information om hur du skickar runbook-jobbdata till Log Analytics-arbetsytan finns i Vidarebefordra Azure Automation-jobbdata till Azure Monitor-loggar.
- Information om hur du övervakar mått och loggar på basnivå finns i Använda en avisering för att utlösa en Azure Automation-runbook.