Een e-mailbericht verzenden vanuit een Automation-runbook
U kunt een e-mailbericht verzenden vanuit een runbook met SendGrid met behulp van PowerShell.
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Vereisten
SendGrid-afzenderverificatie. Domein of enkele afzender
Een Azure Automation-account met ten minste één door de gebruiker toegewezen beheerde identiteit. Zie Beheerde identiteiten inschakelen voor meer informatie.
Az-modules:
Az.Accounts
enAz.KeyVault
geïmporteerd in het Automation-account. Zie Az-modules importeren voor meer informatie.De Azure Az PowerShell-module die op uw computer is geïnstalleerd. Zie De Azure Az PowerShell-module installeren als u deze wilt installeren of upgraden.
Een Azure Key Vault maken
Maak een Azure Key Vault- en Key Vault-toegangsbeleid waarmee de referenties sleutelkluisgeheimen kunnen ophalen en instellen in de opgegeven sleutelkluis.
Meld u interactief aan bij Azure met behulp van de cmdlet Connect-AzAccount en volg de instructies.
# 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>
Geef een geschikte waarde op voor de onderstaande variabelen en voer vervolgens het script uit.
$resourceGroup = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
Key Vault maken en machtigingen toewijzen
# 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
Zie Key Vault-quickstarts voor andere manieren om een Azure Key Vault te maken en een geheim op te slaan.
Machtigingen toewijzen aan beheerde identiteiten
Wijs machtigingen toe aan de juiste beheerde identiteit. Het runbook kan de door het Automation-account toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit gebruiken. Er worden stappen gegeven om machtigingen toe te wijzen aan elke identiteit. In de onderstaande stappen wordt PowerShell gebruikt. Als u liever de portal gebruikt, raadpleegt u Azure-rollen toewijzen met behulp van Azure Portal.
Gebruik de PowerShell-cmdlet New-AzRoleAssignment om een rol toe te wijzen aan de door het systeem toegewezen beheerde identiteit.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Wijs een rol toe aan een door de gebruiker toegewezen beheerde identiteit.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Geef voor de door het systeem toegewezen beheerde identiteit
ClientId
de waarde weer en noteer deze voor later gebruik.$UAMI.ClientId
Het runbook maken om een e-mailbericht te verzenden
Nadat u een sleutelkluis hebt gemaakt en uw SendGrid
API-sleutel hebt opgeslagen, is het tijd om het runbook te maken waarmee de API-sleutel wordt opgehaald en een e-mailbericht wordt verzonden. Laten we een runbook gebruiken dat gebruikmaakt van de door het systeem toegewezen beheerde identiteit om te verifiëren met Azure om het geheim op te halen uit Azure Key Vault. Het runbook krijgt de naam Send-GridMailMessage. U kunt het PowerShell-script wijzigen dat wordt gebruikt voor verschillende scenario's.
Meld u aan bij het Azure Portal en navigeer naar uw Automation-account.
Selecteer Runbooks op uw geopende Automation-accountpagina onder Procesautomatisering
Selecteer + Een runbook maken.
- Geef het runbook
Send-GridMailMessage
een naam. - Selecteer PowerShell in de vervolgkeuzelijst Runbooktype.
- Selecteer Maken.
- Geef het runbook
Het runbook wordt gemaakt en de pagina PowerShell-runbook bewerken wordt geopend.
Kopieer het volgende PowerShell-voorbeeld naar de pagina Bewerken. Zorg ervoor dat de
VaultName
de naam aangeeft die u voor uw Key Vault hebt gekozen.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
Als u wilt dat het runbook wordt uitgevoerd met de door het systeem toegewezen beheerde identiteit, laat u de code staan. Als u liever een door de gebruiker toegewezen beheerde identiteit gebruikt, gaat u als volgende te werk:
- Uit regel 18, verwijder
$AzureContext = (Connect-AzAccount -Identity).context
, - Vervang het door
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
, en - Voer de client-id in die u eerder hebt verkregen.
- Uit regel 18, verwijder
Selecteer Opslaan, Publiceren en vervolgens Ja wanneer hierom wordt gevraagd.
Als u wilt controleren of het runbook wordt uitgevoerd, kunt u de stappen volgen onder Een runbook testen of Een runbook starten.
Als u uw test-e-mailbericht in eerste instantie niet ziet, controleert u de mappen Ongewenste e-mail en Spam.
Resources opschonen
Wanneer het runbook niet meer nodig is, selecteert u het in de runbooklijst en selecteert u Verwijderen.
Verwijder de Key Vault met behulp van de cmdlet Remove-AzKeyVault.
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
Volgende stappen
- Raadpleeg Azure Automation-taakgegevens doorsturen naar Azure Monitor-logboeken als u runbook-taakgegevens wilt verzenden naar uw Log Analytics-werkruimte.
- Raadpleeg Een waarschuwing gebruiken om een Azure Automation-runbook te activeren als u metrische gegevens en logboeken op basisniveau wilt bewaken.