Senden einer E-Mail aus einem Automation-Runbook
Sie können unter Verwendung von PowerShell und SendGrid eine E-Mail aus einem Runbook senden.
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Voraussetzungen
SendGrid-Absenderüberprüfung. Entweder „Domäne“ oder „Einzelner Absender“
Ein Azure Automation-Konto mit mindestens einer benutzerseitig zugewiesenen verwalteten Identität. Weitere Informationen finden Sie unter Aktivieren von verwalteten Identitäten.
Az-Module:
Az.Accounts
undAz.KeyVault
, importiert in das Automation-Konto. Weitere Informationen finden Sie unter Importieren von Az-Modulen.Das auf Ihrem Computer installierte PowerShell-Modul „Azure Az“. Informationen zur einer Installation oder einem Upgrade finden Sie unter Installieren des PowerShell-Moduls „Azure Az“.
Erstellen einer Azure Key Vault-Instanz
Erstellen Sie eine Azure Key Vault-Instanz und eine Key Vault-Zugriffsrichtlinie, die es der Anmeldeinformation gestattet, Schlüsseltresorgeheimnisse aus dem angegebenen Schlüsseltresor abzurufen bzw. dort festzulegen.
Melden Sie sich interaktiv mithilfe des Cmdlets Connect-AzAccount bei Azure an, und befolgen Sie die Anweisungen.
# 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>
Geben Sie einen geeigneten Wert für die unten stehenden Variablen an, und führen Sie dann das Skript aus.
$resourceGroup = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
Erstellen einer Key Vault-Instanz und Zuweisen von Berechtigungen
# 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
Weitere Möglichkeiten zum Erstellen einer Azure Key Vault-Instanz und zum Speichern eines Geheimnisses finden Sie unter Schnellstarts zu Key Vault.
Zuweisen von Berechtigungen zu verwalteten Identitäten
Weisen Sie der entsprechenden verwalteten Identität Berechtigungen zu. Das Runbook kann die systemseitig zugewiesene verwaltete Identität des Automation-Kontos oder eine benutzerseitig zugewiesene verwaltete Identität verwenden. Schritte zur Zuweisung von Berechtigungen für jede Identität sind angegeben. In den folgenden Schritten wird PowerShell verwendet. Informationen zur Verwendung des Azure-Portals finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.
Verwenden Sie das PowerShell-Cmdlet New-AzRoleAssignment, um der systemseitig zugewiesenen verwalteten Identität eine Rolle zu zuweisen.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Weisen Sie einer benutzerseitig zugewiesenen verwalteten Identität eine Rolle zu.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Zeigen Sie für die systemseitig zugewiesene verwaltete Identität den Wert
ClientId
an, und speichern Sie ihn für die spätere Verwendung.$UAMI.ClientId
Erstellen des Runbooks zum Senden einer E-Mail
Wenn Sie einen Schlüsseltresor erstellt und Ihren SendGrid
-API-Schlüssel gespeichert haben, können Sie das Runbook erstellen, das den API-Schlüssel abruft und eine E-Mail sendet. Wir verwenden ein Runbook, das die systemseitig zugewiesene verwaltete Identität für die Authentifizierung bei Azure verwendet, um das Geheimnis aus Azure Key Vault abzurufen. Wir nennen das Runbook Send-GridMailMessage. Sie können das PowerShell-Skript ändern, das für verschiedene Szenarien verwendet wird.
Melden Sie sich beim Azure-Portal an, und navigieren Sie zu Ihrem Automation-Konto.
Wählen Sie auf Ihrer offenen Automation-Kontoseite unter Prozessautomatisierung die Option Runbooks aus.
Wählen Sie + Runbook erstellen aus.
- Nennen Sie das Runbook
Send-GridMailMessage
. - Wählen Sie in der Dropdownliste Runbooktyp die Option PowerShell aus.
- Klicken Sie auf Erstellen.
- Nennen Sie das Runbook
Das Runbook wird erstellt, und die Seite „PowerShell-Runbook bearbeiten“ wird geöffnet.
Kopieren Sie das folgende PowerShell-Beispiel auf die Seite „Bearbeiten“. Stellen Sie sicher, dass der
VaultName
den Namen angibt, den Sie für Ihren Schlüsseltresor ausgewählt haben.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
Wenn Sie möchten, dass das Runbook mit der systemseitig zugewiesenen verwalteten Identität ausgeführt wird, lassen Sie den Code unverändert. Wenn Sie lieber eine benutzerseitig zugewiesene verwaltete Identität verwenden möchten, gehen Sie wie folgt vor:
- Entfernen Sie
$AzureContext = (Connect-AzAccount -Identity).context
aus Zeile 18. - Fügen Sie stattdessen
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
ein. - Geben Sie die zuvor abgerufene Client-ID ein.
- Entfernen Sie
Wählen Sie Speichern, anschließend Veröffentlichen und dann Ja aus, wenn Sie dazu aufgefordert werden.
Führen Sie die Schritte unter Verwalten von Runbooks in Azure Automation oder Starten eines Runbooks in Azure Automation aus, um zu überprüfen, ob das Runbook ausgeführt wird.
Wird die Test-E-Mail zuerst nicht angezeigt, überprüfen Sie den Junk- und Spam-Ordner.
Bereinigen von Ressourcen
Wenn das Runbook nicht mehr benötigt wird, wählen Sie es in der Runbookliste aus, und klicken Sie auf Löschen.
Löschen Sie den Schlüsseltresor mithilfe des Cmdlets Remove-AzKeyVault.
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
Nächste Schritte
- Informationen zum Senden von Runbookauftragsdaten an Ihren Log Analytics-Arbeitsbereich finden Sie unter Weiterleiten von Azure Automation-Auftragsdaten an Azure Monitor-Protokolle.
- Informationen zur Überwachung von Metriken und Protokollen auf Basisebene finden Sie unter Verwenden einer Warnung zum Auslösen eines Azure Automation-Runbooks.