Een e-mail verzenden vanuit am Automation-runbook

U kunt een e-mailbericht verzenden vanuit een runbook met SendGrid met behulp van PowerShell.

Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

Vereisten

Een Azure Key Vault maken

Maak een Azure Key Vault en Key Vault waarmee de referenties sleutelkluisgeheimen kunnen op halen en instellen in de opgegeven sleutelkluis.

  1. Meld u interactief aan bij Azure met 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. Machtigingen Key Vault maken en 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-accountsysteem toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit gebruiken. Er worden stappen gegeven om machtigingen aan elke identiteit toe te wijzen. In de onderstaande stappen wordt PowerShell gebruikt. Zie Azure-rollen toewijzen met behulp van de portal als u liever de 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. Voor de door het systeem toegewezen beheerde identiteit moet u de waarde voor later gebruik ClientId tonen en registreren.

    $UAMI.ClientId
    

Het runbook maken om een e-mailbericht te verzenden

Nadat u een Key Vault hebt gemaakt en uw API-sleutel hebt opgeslagen, is het tijd om het runbook te maken dat de API-sleutel op haalt en een e-mailbericht SendGrid verzendt. Laten we een runbook gebruiken dat gebruikmaakt van de door het systeem toegewezen beheerde identiteit om te verifiëren bij 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 de Azure Portal navigeer naar uw Automation-account.

  2. Selecteer op uw open Automation-accountpagina onder Procesautomatisering de optie Runbooks

  3. Selecteer + Een runbook maken.

    1. Noem het runbook Send-GridMailMessage .
    2. Selecteer PowerShell in de vervolgkeuzelijst Runbooktype.
    3. Selecteer Maken.

    Runbook maken

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

  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 zoals deze is. Als u liever een door de gebruiker toegewezen beheerde identiteit gebruikt, gaat u als volgende te werk:

    1. Verwijder vanaf regel 18 $AzureContext = (Connect-AzAccount -Identity).context ,
    2. Vervang deze 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 u hier om 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 lijst met runbook 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