Enviar um email de um runbook de Automação
Você pode enviar um email de um runbook com o SendGrid usando o PowerShell.
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
Verificação do remetente SendGrid. Um Domínio ou um Remetente único
Uma conta da Automação do Azure com pelo menos uma identidade gerenciada atribuída pelo usuário. Para obter mais informações, confira Habilitar identidades gerenciadas.
Módulos Az:
Az.Accounts
eAz.KeyVault
importados para a conta de Automação. Para obter mais informações, confira Importar módulos Az.O módulo Azure Az do PowerShell instalado em seu computador. Para instalar ou atualizar, confira Como instalar o módulo Azure Az do PowerShell.
Criar um Cofre de chaves do Azure
Crie um Azure Key Vault e uma política de acesso Key Vault que permita que a credencial obtenha e defina segredos do cofre de chaves no cofre de chaves especificado.
Entre no Azure de modo interativo usando o cmdlet Connect-AzAccount e siga as instruções.
# 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>
Forneça um valor apropriado para as variáveis abaixo e, em seguida, execute o script.
$resourceGroup = "<Resource group>" $automationAccount = "<Automation account>" $region = "<Region>" $SendGridAPIKey = "<SendGrid API key>" $VaultName = "<A universally unique vault name>" $userAssignedManagedIdentity = "<User-assigned managed identity>"
Criar um Key Vault e atribuir permissões
# 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
Para ver outras maneiras de criar um Azure Key Vault e armazenar um segredo, confira os Guias de início rápido do Key Vault.
Atribuir permissões a identidades gerenciadas
Atribua permissões à identidade gerenciada apropriada. O runbook pode usar a identidade gerenciada atribuída pelo sistema ou pelo usuário da conta de Automação. As etapas são fornecidas para atribuir permissões a cada identidade. As etapas abaixo usam o PowerShell. Se você preferir usar o Portal, confira Atribuir funções do Azure usando o portal do Azure.
Use o cmdlet do PowerShell New-AzRoleAssignment para atribuir uma função à identidade gerenciada atribuída pelo sistema.
New-AzRoleAssignment ` -ObjectId $SA_PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Atribuir uma função a uma identidade gerenciada atribuída pelo usuário.
New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "Reader"
Para a identidade gerenciada atribuída pelo sistema, mostre
ClientId
e grave o valor para uso posterior.$UAMI.ClientId
Criar o runbook para enviar um email
Depois de criar um Key Vault e armazenar sua chave de API do SendGrid
, é hora de criar o runbook que vai recuperar a chave de API e enviar um email. Vamos usar um runbook que usa a identidade gerenciada atribuída pelo sistema para autenticação com o Azure a fim de recuperar o segredo no Azure Key Vault. Vamos chamar o runbook de Send-GridMailMessage. Você pode modificar o script do PowerShell utilizado para diferentes cenários.
Entre no portal do Azure e navegue até sua conta de Automação.
Na página da sua conta de Automação aberta, em Automação de Processos, selecione Runbooks
Selecione + Criar um runbook.
- Nomeie o runbook
Send-GridMailMessage
. - Na lista suspensa Tipo de runbook, selecione PowerShell.
- Selecione Criar.
- Nomeie o runbook
O runbook é criado e a página Editar Runbook do PowerShell é aberta.
Copie o exemplo do PowerShell a seguir na página Editar. Verifique se o
VaultName
especifica o nome que você escolheu para o 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 você quiser que o runbook seja executado com a identidade gerenciada atribuída pelo sistema, deixe o código no estado em que se encontra. Se você preferir usar uma identidade gerenciada atribuída pelo usuário, então:
- Na linha 18, remova
$AzureContext = (Connect-AzAccount -Identity).context
, - Substitua-o por
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
e - Insira a ID de cliente obtida anteriormente.
- Na linha 18, remova
Clique em Salvar, em Publicar e Sim quando solicitado.
Para verificar se o runbook é executado com êxito, siga as etapas em Testar um runbook ou Iniciar um runbook.
Se você não vir inicialmente seu email de teste, verifique suas pastas de Lixo eletrônico e Spam.
Limpar os recursos
Quando o runbook não for mais necessário, selecione-o na lista de runbooks e selecione Excluir.
Exclua o Key Vault usando o cmdlet Remove-AzKeyVault.
$VaultName = "<your KeyVault name>" $resourceGroup = "<your ResourceGroup name>" Remove-AzKeyVault -VaultName $VaultName -ResourceGroupName $resourceGroup
Próximas etapas
- Para enviar dados de trabalho do runbook para seu workspace do Log Analytics, consulte Encaminhar dados de trabalho da Automação do Azure para logs do Azure Monitor.
- Para monitorar logs e métricas de nível de base, consulte Usar um alerta para disparar um runbook da Automação do Azure.