Skicka ett e-postmeddelande från Am Automation-runbook

Du kan skicka ett e-postmeddelande från en runbook med SendGrid med hjälp av PowerShell.

Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

Förutsättningar

Skapa ett Azure Key Vault

Skapa en Azure Key Vault och Key Vault åtkomstprincip som gör att autentiseringsbehörigheten kan hämta och ange nyckelvalvshemligheter i det angivna nyckelvalvet.

  1. Logga in på Azure interaktivt med hjälp Anslut-AzAccount-cmdleten och följ instruktionerna.

    # 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. Ange ett lämpligt värde för variablerna nedan och kör sedan skriptet.

    $resourceGroup = "<Resource group>"
    $automationAccount = "<Automation account>"
    $region = "<Region>"
    $SendGridAPIKey = "<SendGrid API key>"
    $VaultName = "<A universally unique vault name>"
    
    $userAssignedManagedIdentity = "<User-assigned managed identity>"
    
  3. Skapa Key Vault och tilldela behörigheter

    # 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
    

    Andra sätt att skapa en Azure Key Vault och lagra en hemlighet finns i Key Vault snabbstarter.

Tilldela behörigheter till hanterade identiteter

Tilldela behörigheter till lämplig hanterad identitet. Runbooken kan använda antingen den system tilldelade hanterade identiteten för Automation-kontot eller en användar tilldelad hanterad identitet. Steg finns för att tilldela behörigheter till varje identitet. Stegen nedan använder PowerShell. Om du föredrar att använda portalen kan du gå till Tilldela Azure-roller med hjälp av Azure Portal.

  1. Använd PowerShell-cmdleten New-AzRoleAssignment för att tilldela en roll till den systemtilldelade hanterade identiteten.

    New-AzRoleAssignment `
        -ObjectId $SA_PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  2. Tilldela en roll till en användar tilldelad hanterad identitet.

    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId`
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  3. För den system tilldelade hanterade identiteten visar ClientId och registrerar du värdet för senare användning.

    $UAMI.ClientId
    

Skapa runbooken för att skicka ett e-postmeddelande

När du har skapat en Key Vault och lagrat DIN API-nyckel är det dags att skapa runbooken som hämtar API-nyckeln och SendGrid skickar ett e-postmeddelande. Nu ska vi använda en runbook som använder den system tilldelade hanterade identiteten för att autentisera med Azure för att hämta hemligheten från Azure Key Vault. Vi anropar runbooken Send-GridMailMessage. Du kan ändra PowerShell-skriptet som används för olika scenarier.

  1. Logga in på Azure Portal och gå till ditt Automation-konto.

  2. På din öppna Automation-kontosida går du till Processautomatisering och väljer Runbooks

  3. Välj + Skapa en runbook.

    1. Ge runbooken namnet Send-GridMailMessage .
    2. Välj PowerShell i listrutan Typ av runbook.
    3. Välj Skapa.

    Skapa runbook

  4. Runbooken skapas och sidan Redigera PowerShell-runbook öppnas. Redigera runbooken

  5. Kopiera följande PowerShell-exempel till sidan Redigera. Se till VaultName att anger det namn som du har valt för Key Vault.

    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. Om du vill att runbooken ska köras med den system tilldelade hanterade identiteten lämnar du koden som den är. Om du föredrar att använda en användar tilldelad hanterad identitet gör du följande:

    1. Från rad 18 tar du bort $AzureContext = (Connect-AzAccount -Identity).context ,
    2. Ersätt den med $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context , och
    3. Ange det klient-ID som du fick tidigare.
  7. Välj Spara, Publicera och sedan Ja när du tillfrågas.

Du kan kontrollera att runbooken körs korrekt genom att följa stegen under Testa en runbook eller Starta en runbook.

Om du inte ser testmeddelandet kontrollerar du skräppostmapparna.

Rensa resurser

  1. När runbooken inte längre behövs markerar du den i runbook-listan och väljer Ta bort.

  2. Ta bort Key Vault med hjälp av cmdleten Remove-AzKeyVault.

    $VaultName = "<your KeyVault name>"
    $resourceGroup = "<your ResourceGroup name>"
    Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
    

Nästa steg