Odeslání e-mailu z runbooku Automation
E-mail z runbooku s SendGridem můžete odeslat pomocí PowerShellu.
Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Požadavky
Účet SendGrid.
Ověření odesílatele SendGrid Doména nebo jeden odesílatel
Váš klíč rozhraní API SendGrid.
Účet Azure Automation s alespoň jednou spravovanou identitou přiřazenou uživatelem. Další informace najdete v tématu Povolení spravovaných identit.
Moduly Az:
Az.Accounts
aAz.KeyVault
importovány do účtu Automation. Další informace najdete v tématu Import modulů Az.Modul Azure Az PowerShell nainstalovaný na vašem počítači. Pokud chcete nainstalovat nebo upgradovat, přečtěte si, jak nainstalovat modul Azure Az PowerShell.
Vytvoření služby Azure Key Vault
Vytvořte zásadu přístupu ke službě Azure Key Vault a Key Vault, která umožňuje přihlašovacím údajům získat a nastavit tajné kódy trezoru klíčů v zadaném trezoru klíčů.
Přihlaste se k Azure interaktivně pomocí rutiny Connect-AzAccount a postupujte podle pokynů.
# 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>
Zadejte odpovídající hodnotu pro níže uvedené proměnné a spusťte skript.
$resourceGroup = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
Vytvoření služby Key Vault a přiřazení oprávnění
# 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
Další způsoby vytvoření služby Azure Key Vault a uložení tajného kódu najdete v rychlých startech ke službě Key Vault.
Přiřazení oprávnění ke spravovaným identitám
Přiřaďte oprávnění příslušné spravované identitě. Runbook může používat spravovanou identitu přiřazenou systémem účtu Automation nebo spravovanou identitu přiřazenou uživatelem. Kroky jsou k dispozici pro přiřazení oprávnění ke každé identitě. Následující postup použijte PowerShell. Pokud dáváte přednost používání portálu, přečtěte si téma Přiřazení rolí Azure pomocí webu Azure Portal.
Pomocí rutiny PowerShellu New-AzRoleAssignment přiřaďte roli spravované identitě přiřazené systémem.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Přiřaďte roli spravované identitě přiřazené uživatelem.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
U spravované identity přiřazené systémem zobrazte
ClientId
a poznamenejte si hodnotu pro pozdější použití.$UAMI.ClientId
Vytvoření runbooku pro odeslání e-mailu
Po vytvoření služby Key Vault a uložení SendGrid
klíče rozhraní API je čas vytvořit runbook, který načte klíč rozhraní API a odešle e-mail. Pojďme použít runbook, který používá spravovanou identitu přiřazenou systémem k ověření v Azure k načtení tajného kódu ze služby Azure Key Vault. Zavoláme runbook Send-GridMailMessage. Skript PowerShellu, který se používá pro různé scénáře, můžete upravit.
Přihlaste se do portálu Azure a přejděte k účtu úložiště Automation.
Na otevřené stránce účtu Automation v části Automatizace procesů vyberte Runbooky.
Vyberte + Vytvořit runbook.
- Pojmenujte runbook
Send-GridMailMessage
. - V rozevíracím seznamu typu runbooku vyberte PowerShell.
- Vyberte Vytvořit.
- Pojmenujte runbook
Runbook se vytvoří a otevře se stránka Upravit powershellový runbook.
Zkopírujte následující příklad PowerShellu na stránku Upravit. Ujistěte se, že
VaultName
určuje název, který jste zvolili pro službu 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
Pokud chcete, aby runbook běžel se spravovanou identitou přiřazenou systémem, nechejte kód tak, jak je. Pokud chcete použít spravovanou identitu přiřazenou uživatelem, pak:
- Z řádku 18 odeberte
$AzureContext = (Connect-AzAccount -Identity).context
, - Nahraďte ho a
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
- Zadejte ID klienta, které jste získali dříve.
- Z řádku 18 odeberte
Po zobrazení výzvy vyberte Uložit, Publikovat a pak Ano .
Pokud chcete ověřit, že se runbook úspěšně spustí, můžete postupovat podle kroků v části Testování runbooku nebo Spuštění runbooku.
Pokud se váš testovací e-mail zpočátku nezobrazuje, zkontrolujte složky Nevyžádaná pošta a Nevyžádaná pošta.
Vyčištění prostředků
Pokud už runbook nepotřebujete, vyberte ho v seznamu runbooků a vyberte Odstranit.
Odstraňte službu Key Vault pomocí rutiny Remove-AzKeyVault .
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
Další kroky
- Pokud chcete odesílat data úlohy runbooku do pracovního prostoru služby Log Analytics, přečtěte si téma Předávání dat úlohy Azure Automation do protokolů služby Azure Monitor.
- Pokud chcete monitorovat metriky a protokoly základní úrovně, přečtěte si téma Použití upozornění k aktivaci runbooku Azure Automation.