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
Konto usługi SendGrid.
Weryfikacja nadawcy usługi SendGrid. Domena lub pojedynczy nadawca
Konto usługi Azure Automation z co najmniej jedną tożsamością zarządzaną przypisaną przez użytkownika. Aby uzyskać więcej informacji, zobacz Włączanie tożsamości zarządzanych.
Moduły Az:
Az.Accounts
iAz.KeyVault
zaimportowane na konto usługi Automation. Aby uzyskać więcej informacji, zobacz Importuj moduły platformy Azure.Moduł Azure Az programu PowerShell zainstalowany na maszynie. Aby zainstalować lub uaktualnić, zobacz Jak zainstalować moduł Azure Az programu PowerShell.
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.
Zaloguj się interaktywnie na platformie Azure przy użyciu polecenia cmdlet Connect-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>
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>"
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.
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"
Przypisz rolę do tożsamości zarządzanej przypisanej przez użytkownika.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
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.
Zaloguj się do witryny Azure Portal i przejdź do swojego konta usługi Automation.
Na stronie otwartego konta usługi Automation w obszarze Automatyzacja procesów wybierz pozycję Elementy Runbook
Wybierz pozycję + Utwórz element Runbook.
- Nadaj elementowi runbook
Send-GridMailMessage
nazwę . - Z listy rozwijanej Typ elementu Runbook wybierz pozycję PowerShell.
- Wybierz pozycję Utwórz.
- Nadaj elementowi runbook
Element runbook zostanie utworzony i zostanie otworzona strona Edytuj element runbook programu PowerShell.
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
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:
- Z wiersza 18 usuń
$AzureContext = (Connect-AzAccount -Identity).context
element , - Zastąp go ciągiem
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
, i - Wprowadź uzyskany wcześniej identyfikator klienta.
- Z wiersza 18 usuń
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
Gdy element Runbook nie jest już potrzebny, wybierz go na liście elementów Runbook i wybierz pozycję Usuń.
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
- Aby wysłać dane zadania elementu Runbook do obszaru roboczego usługi Log Analytics, zobacz Przekazywanie danych zadań usługi Azure Automation do dzienników usługi Azure Monitor.
- Aby monitorować metryki i dzienniki na poziomie podstawowym, zobacz Używanie alertu do wyzwalania elementu Runbook usługi Azure Automation.