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

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.

  1. 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>
    
  2. 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>"
    
  3. 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.

  1. 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"
    
  2. Weisen Sie einer benutzerseitig zugewiesenen verwalteten Identität eine Rolle zu.

    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId`
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  3. 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.

  1. Melden Sie sich beim Azure-Portal an, und navigieren Sie zu Ihrem Automation-Konto.

  2. Wählen Sie auf Ihrer offenen Automation-Kontoseite unter Prozessautomatisierung die Option Runbooks aus.

  3. Wählen Sie + Runbook erstellen aus.

    1. Nennen Sie das Runbook Send-GridMailMessage.
    2. Wählen Sie in der Dropdownliste Runbooktyp die Option PowerShell aus.
    3. Klicken Sie auf Erstellen.

    Create Runbook

  4. Das Runbook wird erstellt, und die Seite „PowerShell-Runbook bearbeiten“ wird geöffnet. Edit the Runbook

  5. 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
    
  6. 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:

    1. Entfernen Sie $AzureContext = (Connect-AzAccount -Identity).context aus Zeile 18.
    2. Fügen Sie stattdessen $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context ein.
    3. Geben Sie die zuvor abgerufene Client-ID ein.
  7. 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

  1. Wenn das Runbook nicht mehr benötigt wird, wählen Sie es in der Runbookliste aus, und klicken Sie auf Löschen.

  2. 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