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

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.

  1. Meld u interactief aan bij Azure met behulp van de cmdlet Verbinding maken-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>
    
  2. 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>"
    
  3. 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.

  1. 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"
    
  2. Wijs een rol toe aan een door de gebruiker toegewezen beheerde identiteit.

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

  1. Meld u aan bij Azure Portal en navigeer naar uw Automation-account.

  2. Selecteer Runbooks op uw geopende Automation-accountpagina onder Procesautomatisering

  3. Selecteer + Een runbook maken.

    1. Geef het runbook Send-GridMailMessageeen naam.
    2. Selecteer PowerShell in de vervolgkeuzelijst Runbooktype.
    3. Selecteer Maken.

    Create Runbook

  4. Het runbook wordt gemaakt en de pagina PowerShell-runbook bewerken wordt geopend. Edit the Runbook

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

    1. Uit regel 18, verwijder $AzureContext = (Connect-AzAccount -Identity).context,
    2. Vervang het door $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, en
    3. Voer de client-id in die u eerder hebt verkregen.
  7. 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

  1. Wanneer het runbook niet meer nodig is, selecteert u het in de runbooklijst en selecteert u Verwijderen.

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