Wysyłanie poczty e-mail z elementu runbook usługi Automation

Możesz wysłać wiadomość e-mail z elementu Runbook przy użyciu usługi SendGrid przy użyciu programu PowerShell.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Wymagania wstępne

Tworzenie usługi Azure Key Vault

Utwórz zasady dostępu usługi Azure Key Vault i usługi Key Vault, które umożliwiają poświadczeniu pobieranie i ustawianie wpisów tajnych magazynu kluczy w określonym magazynie kluczy.

  1. Zaloguj się interaktywnie na platformie Azure przy użyciu polecenia cmdlet Połączenie-AzAccount i postępuj zgodnie z instrukcjami.

    # 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. Podaj odpowiednią wartość dla poniższych zmiennych, a następnie wykonaj skrypt.

    $resourceGroup = "<Resource group>"
    $automationAccount = "<Automation account>"
    $region = "<Region>"
    $SendGridAPIKey = "<SendGrid API key>"
    $VaultName = "<A universally unique vault name>"
    
    $userAssignedManagedIdentity = "<User-assigned managed identity>"
    
  3. Tworzenie usługi Key Vault i przypisywanie uprawnień

    # 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
    

    Aby uzyskać inne sposoby tworzenia usługi Azure Key Vault i przechowywania wpisu tajnego, zobacz Przewodniki Szybki start usługi Key Vault.

Przypisywanie uprawnień do tożsamości zarządzanych

Przypisz uprawnienia do odpowiedniej tożsamości zarządzanej. Element Runbook może używać przypisanej przez system tożsamości zarządzanej konta usługi Automation lub tożsamości zarządzanej przypisanej przez użytkownika. Podano kroki przypisywania uprawnień do każdej tożsamości. W poniższych krokach użyj programu PowerShell. Jeśli wolisz korzystać z portalu, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

  1. Użyj polecenia cmdlet programu PowerShell New-AzRoleAssignment , aby przypisać rolę do przypisanej przez system tożsamości zarządzanej.

    New-AzRoleAssignment `
        -ObjectId $SA_PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  2. Przypisz rolę do tożsamości zarządzanej przypisanej przez użytkownika.

    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId`
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "Reader"
    
  3. W przypadku tożsamości zarządzanej przypisanej przez system pokaż ClientId i zapisz wartość do późniejszego użycia.

    $UAMI.ClientId
    

Tworzenie elementu Runbook w celu wysłania wiadomości e-mail

Po utworzeniu usługi Key Vault i zapisaniu SendGrid klucza interfejsu API nadszedł czas, aby utworzyć element Runbook, który pobiera klucz interfejsu API i wysyła wiadomość e-mail. Użyjmy elementu Runbook, który używa przypisanej przez system tożsamości zarządzanej do uwierzytelniania za pomocą platformy Azure w celu pobrania wpisu tajnego z usługi Azure Key Vault. Wywołamy element Runbook Send-GridMailMessage. Możesz zmodyfikować skrypt programu PowerShell używany w różnych scenariuszach.

  1. Zaloguj się do witryny Azure Portal i przejdź do swojego konta usługi Automation.

  2. Na stronie otwartego konta usługi Automation w obszarze Automatyzacja procesów wybierz pozycję Elementy Runbook

  3. Wybierz pozycję + Utwórz element Runbook.

    1. Nadaj elementowi runbook Send-GridMailMessagenazwę .
    2. Z listy rozwijanej Typ elementu Runbook wybierz pozycję PowerShell.
    3. Wybierz pozycję Utwórz.

    Create Runbook

  4. Element runbook zostanie utworzony i zostanie otworzona strona Edytuj element runbook programu PowerShell. Edit the Runbook

  5. Skopiuj poniższy przykład programu PowerShell do strony Edycja. Upewnij się, że właściwość VaultName określa nazwę wybraną dla usługi 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. Jeśli chcesz, aby element Runbook był wykonywany przy użyciu tożsamości zarządzanej przypisanej przez system, pozostaw kod w stanie rzeczywistym. Jeśli wolisz użyć tożsamości zarządzanej przypisanej przez użytkownika, wykonaj:

    1. Z wiersza 18 usuń $AzureContext = (Connect-AzAccount -Identity).contextelement ,
    2. Zastąp go ciągiem $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, i
    3. Wprowadź uzyskany wcześniej identyfikator klienta.
  7. Po wyświetleniu monitu wybierz pozycję Zapisz, Opublikuj, a następnie pozycję Tak.

Aby sprawdzić, czy element Runbook jest wykonywany pomyślnie, możesz wykonać kroki opisane w sekcji Testowanie elementu Runbook lub Uruchamianie elementu Runbook.

Jeśli początkowo nie widzisz testowej wiadomości e-mail, sprawdź foldery Wiadomości-śmieci i Spam .

Czyszczenie zasobów

  1. Gdy element Runbook nie jest już potrzebny, wybierz go na liście elementów Runbook i wybierz pozycję Usuń.

  2. Usuń usługę Key Vault przy użyciu polecenia cmdlet Remove-AzKeyVault .

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

Następne kroki