Inviare un messaggio di posta elettronica da un runbook di Automazione
Per inviare un messaggio di posta elettronica da un runbook con SendGrid, è possibile usare PowerShell.
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Prerequisiti
Verifica del mittente di SendGrid. Dominio o Mittente singolo
La chiave API SendGrid.
Un account Automazione di Azure con almeno un'identità gestita assegnata all'utente. Per altre informazioni, vedere Abilitare le identità gestite.
Moduli Az:
Az.Accounts
eAz.KeyVault
importati nell'account di Automazione. Per altre informazioni, vedere Importazione di moduli Az.Il modulo Azure Az PowerShell installato nel computer. Installare o aggiornare, vedere Come installare il modulo Azure Az PowerShell.
Creare un Azure Key Vault
Creare un insieme di credenziali delle chiavi di Azure e criteri di accesso di Key Vault che consentano alle credenziali di ottenere e impostare i segreti dell'insieme di credenziali delle chiavi nell'insieme di credenziali delle chiavi specificato.
Accedere ad Azure in modo interattivo usando il cmdlet Connect-AzAccount e seguire le istruzioni:
# 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>
Specificare un valore appropriato per le variabili seguenti e quindi eseguire lo script.
$resourceGroup = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
Creare l'insieme di credenziali delle chiavi e assegnare le autorizzazioni
# 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
Per altre modalità di creazione di un'istanza di Azure Key Vault e di archiviazione di un segreto, vedere le guide di avvio rapido di Key Vault.
Assegnare le autorizzazioni alle identità gestite
Assegnare le autorizzazioni all'identità gestita appropriata. Il runbook può usare l'identità gestita assegnata dal sistema dell'account di Automazione o un'identità gestita assegnata dall'utente. Vengono forniti passaggi per assegnare le autorizzazioni a ogni identità. I passaggi seguenti usano PowerShell. Se si preferisce usare il portale, vedere Assegnare ruoli di Azure tramite il portale di Azure.
Usare il cmdlet di PowerShell New-AzRoleAssignment per assegnare un ruolo all’identità gestita assegnata dal sistema.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Assegnare un ruolo a un’identità gestita assegnata dall’utente.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Per l’identità gestita assegnata dal sistema, visualizzare
ClientId
e registrare il valore per un uso successivo.$UAMI.ClientId
Creare il runbook per inviare un messaggio di posta elettronica
Dopo aver creato un insieme di credenziali delle chiavi e aver archiviato la SendGrid
chiave API, è possibile creare il runbook che recupera la chiave API e invia un messaggio di posta elettronica. Si userà ora un runbook che usa l'identità gestita assegnata dal sistema per eseguire l'autenticazione con Azure per recuperare il segreto da Azure Key Vault. Il runbook sarà denominato Send-GridMailMessage. È possibile modificare lo script di PowerShell usato per diversi scenari.
Accedere al portale di Azure e passare all'account di Automazione.
Nella pagina apri account di Automazione, in Automazione processi, selezionare Runbook
Selezionare +Crea un runbook.
- Assegnare un nome al runbook
Send-GridMailMessage
. - Nell'elenco a discesa Tipo di runbook, selezionare PowerShell.
- Seleziona Crea.
- Assegnare un nome al runbook
Il runbook viene creato e si apre la pagina Modifica runbook di PowerShell.
Copiare l'esempio di PowerShell seguente nella pagina Modifica. Assicurarsi che
VaultName
specifichi il nome scelto per l'istanza di 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
Se si vuole che il runbook venga eseguito con l'identità gestita assegnata dal sistema, lasciare invariato il codice. Se si preferisce usare un'identità gestita assegnata dall'utente, procedere come illustrato di seguito:
- Dalla riga 18 rimuovere
$AzureContext = (Connect-AzAccount -Identity).context
, - Sostituirlo con
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
e - Immettere l'ID client ottenuto in precedenza.
- Dalla riga 18 rimuovere
Selezionare Salva, Pubblica e quindi Sì quando richiesto.
Per verificare che il runbook venga eseguito correttamente, è possibile seguire la procedura descritta in Testare un runbook o Avviare un runbook.
Se il messaggio di posta elettronica non viene visualizzato inizialmente, controllare la cartella Posta indesiderata.
Pulire le risorse
Quando il runbook non è più necessario, selezionarlo nell'elenco dei runbook e selezionare Elimina.
Eliminare l'istanza di Key Vault usando il cmdlet Remove-AzKeyVault.
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
Passaggi successivi
- Per inviare i dati del processo del runbook all'area di lavoro Log Analytics, vedere Inoltrare i dati dei processi di Automazione di Azure ai log di Monitoraggio di Azure.
- Per monitorare le metriche e i log a livello di base, vedere Usare un avviso per attivare un runbook di Automazione di Azure.