Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever e obter uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Configurar Notificações por E-mail para o Oracle Cloud Infrastructure Events no OCI Monitoring
Introdução
Os serviços do Oracle Cloud Infrastructure (OCI) emitem eventos, que são mensagens estruturadas que indicam alterações em recursos. É necessário criar regras para trabalhar com eventos e também especificar uma ação a ser acionada quando encontrar um evento correspondente.
As ações de notificação por e-mail são uma resposta que você define para correspondências de evento. O serviço de entrega de e-mail da OCI oferece uma solução gerenciada rápida e confiável para enviar notificações por e-mail seguras, de alto volume e transacionais.
Objetivos
- Envie uma notificação de evento amigável ao OCI por e-mail usando o OCI Email Delivery.
Pré-requisitos
O administrador do Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) deve criar:
-
Grupo dinâmico e políticas para a função do OCI para chamar e enviar notificação por e-mail.
-
Grupo Dinâmico
Crie grupo dinâmico para o compartimento de funções.
# Replace OCID for function compartment All {resource.type = 'fnfunc', resource.compartment.id = '<function-compartment>'} Example: All {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..aaaaaaaanovmfmmnonjjyxeq4jyghszj2eczlrkgj5svnxrt...'}
-
Políticas
Crie políticas para designar o grupo dinâmico para a função.
# Replace dynamic-group-name, function-compartment and OCID of vault secret for OCI function Allow dynamic-group <dynamic-group-name> to read secret-family in compartment <function-compartment> where target.secret.id='<ocid of smtp password vaultsecret>' Allow dynamic-group <dynamic-group-name> to inspect compartments in tenancy Allow dynamic-group <dynamic-group-name> to read repos in compartment <function-compartment>
-
-
Conta de Serviço SMTP (Simple Mail Transfer Protocol) com capacidade limitada do usuário somente para
SMTP credentials
. Gere e compartilhe a credencial SMTP com o desenvolvedor. -
Compartimento, grupo e políticas para o desenvolvedor criar segredos e implantar a função.
# Replace group-name as per your tenancy Allow group <group-name> to manage repos in compartment <function-compartment> Allow group <group-name> to manage vaults in compartment <function-compartment> Allow group <group-name> to manage keys in compartment <function-compartment> Allow group <group-name> to manage secret-family in compartment <function-compartment> Allow group <group-name> to manage approved-senders in compartment <function-compartment> allow group <group-name> to use cloud-shell in tenancy allow group <group-name> to manage functions-family in compartment <function-compartment> allow group <group-name> to use virtual-network-family in compartment <network-compartment> Allow group <group-name> to read objectstorage-namespaces in tenancy
Para obter mais informações sobre a região de entrega de e-mail inscrita e preferencial, consulte Configurando o Ponto Final de Conexão SMTP.
Tarefa 1: Configurar remetente aprovado na entrega de e-mail
Um remetente aprovado deve ser configurado para todos os endereços "De" que enviam e-mail por meio do OCI. Ela está associada a um compartimento e só existe na região em que o remetente aprovado foi configurado.
Você pode usar seu nome de domínio ou notificação oracle padrão para remetente aprovado conforme mencionado abaixo.
-
Abra o menu de navegação da Console do OCI e clique em Serviços ao Desenvolvedor.
-
Em Integração do Aplicativo, clique em Email Delivery.
-
Em Email Delivery, clique em Remetentes Aprovados.
-
Clique em Criar Remetente Aprovado e informe o endereço de e-mail que deseja listar como remetente aprovado.
Observação: se o ponto final de conexão SMTP de entrega de e-mail do OCI for
smtp.email.ap-mumbai-1.oci.oraclecloud.com
, adicionenoreply@notification
à região e informe o endereço de e-mail do remetente aprovado. Por exemplo,noreply@notification.ap-mumbai-1.oci.oraclecloud.com
. -
Clique em Adicionar para adicionar o endereço de e-mail à sua lista de Remetentes Aprovados.
Tarefa 2: Criar namespace de tag e definição de chave
-
Abra o menu de navegação e clique em Governança e Administração.
-
Em Gerenciamento de Tenancy, clique em Namespaces de Tag.
-
Na página Namespaces de Tag, clique em Criar Namespaces de Tag.
-
No painel Criar Namespace de Tag, selecione o compartimento apropriado e digite personalizado no nome do namespace e forneça descrição.
-
No namespace custom, clique em Criar Definições de Chave de Tag e digite recipiente na chave de Tag e crie-a.
Observação: você pode adicionar os endereços de e-mail do destinatário à tag definida em cada recurso do OCI, onde a notificação é necessária. A solução usará
recipient addresses
para notificar, se disponível no evento do Cloud, caso contrário, o endereçodefaultrecepient
será usado especificado na configuração da função. Por exemplo, demouser1@abc.com,demouser2@abc.com
Tarefa 3: Criar segredo no OCI vault
-
Abra o menu de navegação, clique em Identidade e Segurança e clique em Vault.
-
Em Escopo da lista, selecione um compartimento que contenha o vault.
Observação: se você precisar criar um novo vault e uma chave de criptografia principal, siga as instruções em Criar Vault e Chave de Criptografia Principal.
-
Em Recursos, clique em Criar Segredo e selecione a chave de criptografia mestra apropriada.
-
Digite smptppass no campo de nome e na descrição Senha SMTP para autenticação de entrega de e-mail do OCI.
-
Selecione o formato texto simples do Modelo de Tipo de Segredo e digite a senha smtp para obter o conteúdo do segredo.
Observação: Use a senha SMTP compartilhada pelo administrador do OCI IAM.
-
Tarefa 4: Criar e implantar a função do OCI
-
Na console do OCI, clique em Cloud Shell na navegação superior.
-
Criar função usando a CLI do projeto Fn do shell da nuvem.
fn init --runtime python <function-name> Example: fn init --runtime python emaildelivery-func
-
Altere o diretório para o diretório recém-criado.
-
Crie um aplicativo para implantar a função.
# Specify the OCID of subnet fn create app emaildeliveryapp --annotation oracle.com/oci/subnetIds='["<subnet OCID>"]' Example: fn create app emaildeliveryapp --annotation oracle.com/oci/subnetIds='["ocid1.subnet.oc1.ap-mumbai-1.aaaaaaaabitp32dkyox37qa3tk3evl2nxivwb....."]'
-
Copie e cole o script abaixo no arquivo
func.py
substituindo o conteúdo existente.# python script for sending SMTP configuration with Oracle Cloud Infrastructure Email Delivery import io import json import logging import oci from fdk import response import smtplib import email.utils import ssl import base64 from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase # Get Resource Principal Credentials signer = oci.auth.signers.get_resource_principals_signer() # Get instance principal context secret_client = oci.secrets.SecretsClient(config={}, signer=signer) identity_client = oci.identity.IdentityClient(config={}, signer=signer) tenancy_data = identity_client.get_tenancy(tenancy_id=signer.tenancy_id).data t_name = str(tenancy_data.name) t_id = signer.tenancy_id # Retrieve secret def read_secret_value(secret_client, secret_id): response = secret_client.get_secret_bundle(secret_id) base64_Secret_content = response.data.secret_bundle_content.content base64_secret_bytes = base64_Secret_content.encode('ascii') base64_message_bytes = base64.b64decode(base64_secret_bytes) secret_content = base64_message_bytes.decode('ascii') return secret_content # Sender name sendername = 'noreply' # If you're using Email Delivery in a different region, replace the HOST value with an appropriate SMTP endpoint. # Use port 25 or 587 to connect to the SMTP endpoint. port = 587 # Reading company logo information in base64 encoded with open("companylogo.png", "rb") as image_file: image_data = base64.b64encode(image_file.read()) image_data = '<img src="data:image/png;base64,'+str(image_data)[2:]+'" alt="company logo" />' def handler(ctx, data: io.BytesIO=None): try: # Extracting function config values cfg = ctx.Config() smtp_user = cfg["smtpuser"] host = cfg["host"] sender = cfg["sender"] smtp_defrec = cfg["defaultrecipient"] smtp_pass = cfg["smtppass"] # Secrets from vault smtp_pass = read_secret_value(secret_client, secret_id=smtp_pass ) # Extracting values from triggered OCI event body = json.loads(data.getvalue()) e_Type = body.get("eventType") e_time = body.get("eventTime") r_name = body["data"]["resourceName"] c_id = body["data"]["compartmentId"] c_name = body["data"]["compartmentName"] r_id = body["data"]["resourceId"] add_detail = "" try: # Extracting additional details from OCI event details = body["data"]["additionalDetails"] for key, value in details.items(): add_detail = add_detail+str(key)+' : '+str(value)+'<br>' except (Exception, ValueError) as ex: add_detail = "Additional details not available for this OCI event" try: # Extracting recepient details if available in OCI event recipient = body["data"]["definedTags"]["custom"]["recipient"] except Exception as e: recipient = smtp_defrec # Extract event type e_Type = e_Type.split('com.oraclecloud.')[1] # Extract region name r_id = r_id.split('.')[3] # The subject line of the email. SUBJECT = 'Event | '+ r_name + ' | ' + e_Type + ' | ' + e_time BODY_HTML = """\ <html> <head></head> <body> """ +str(image_data)+ """ <h2>Oracle Cloud Notification</h2> <hr> <b>Event Time : </b>""" +str(e_time)+ """ <br> <b>Event Type : </b>""" +str(e_Type)+ """ <br> <b>Tenancy Name : </b>""" +str(t_name)+ """ <br> <b>Tenancy ID : </b>""" +str(t_id)+ """ <hr> <b>Resource Name : </b>""" +str(r_name)+ """ <br> <b>Region Name : </b>""" +str(r_id)+ """ <br> <b>Compartment ID : </b>""" +str(c_id)+ """ <br> <b>Compartment Name : </b>""" +str(c_name)+ """ <hr> <b>Details : </b><br>""" +str(add_detail)+ """ <hr> <br> <p> Thank you, <br> The OCI team <br><br><br> Please do not reply directly to this email. This mailbox is not monitored. If you have any questions regarding this notification, contact your account administrator. <br> </p> </body> </html> """ # create message container msg = MIMEMultipart() msg['Subject'] = SUBJECT msg['From'] = email.utils.formataddr((sendername, sender)) msg['To'] = recipient # Attach HTML body for email msg.attach(MIMEText(BODY_HTML, 'html')) # Attach JSON payload as attachement attach_file = json.dumps(body,indent=2) payload = MIMEBase('application', 'octate-stream') payload.set_payload(attach_file) payload.add_header('Content-Disposition', 'attachment', filename='event_output.json') msg.attach(payload) # Try to send the message. server = smtplib.SMTP(host, port) server.ehlo() # most python runtimes default to a set of trusted public CAs that will include the CA used by OCI Email Delivery. # However, on platforms lacking that default (or with an outdated set of CAs), customers may need to provide a capath that includes our public CA. server.starttls(context=ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=None, capath=None)) # smtplib docs recommend calling ehlo() before & after starttls() server.ehlo() server.login(smtp_user, smtp_pass) # our requirement is that SENDER is the same as From address set previously server.sendmail(sender, recipient, msg.as_string()) server.close() # Display an error message if something goes wrong. except (Exception, ValueError) as ex: logging.getLogger().info('error parsing json payload: ' + str(ex)) return response.Response(ctx, response_data=json.dumps({"message": "success"}),headers={"Content-Type": "application/json"})
-
Você poderia substituir companylogo.png pelo logotipo da sua empresa e atualizar o texto HTML como corpo do e-mail no script. O padrão é o logotipo da Oracle.
-
Execute o comando abaixo para implantar a função.
fn -v deploy --app <app-name> Example: fn -v deploy --app emaildeliveryapp
-
Execute abaixo para adicionar configuração de função para cada chave e valor de configuração.
-
remetente: use o remetente aprovado configurado na Tarefa 1.
-
smtpuser: Usuário SMTP compartilhado pelo administrador do OCI IAM.
-
smtppass: Use o OCID do segredo do vault de senha SMTP e atualize no valor de configuração smtppass.
-
host: Use o ponto final de conexão SMTP de acordo com o pré-requisito.
-
defaultrecipient: Forneça o endereço de e-mail como destinatário padrão. A solução usará
_recipient addresses_
para notificar, se disponível no evento do Cloud, caso contrário, o endereço_defaultrecepient_
será usado na configuração da função.
fn config function <app-name> <function-name> <config-key> <config-value> Example: fn config function emaildeliveryapp emaildelivery-func sender noreply@notification.ap-mumbai-1.oci.oraclecloud.com
-
Tarefa 5: Criar regra de evento
-
Abra o menu de navegação e clique em Observabilidade & Gerenciamento.
-
Em Serviço Events, clique em Regras.
-
Clique em Criar Regra e, no painel Criar Regra, forneça um nome amigável para a regra e uma descrição do que a regra faz.
-
Na área Condições da Regra, especifique o tipo de evento e a ação para acionar a função. Você pode definir filtros com base em tipos de evento, atributos e tags para limitar os eventos que acionam ações. Veja a seguir um exemplo para acionar o evento de início ou interrupção da instância de computação.
Tarefa 6: Validar notificação por e-mail
-
Inicie ou interrompa a instância de computação no compartimento em que a regra de evento foi criada para acionar o evento do OCI.
-
Você receberá uma notificação por e-mail, juntamente com o JSON bruto anexado a ele.
Links Relacionados
Aquisições
Autor - Dipesh Kumar Rathod (Master Principal Arquiteto de Nuvem, Infraestrutura)
Mais Recursos de Aprendizagem
Explore outros laboratórios no site docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Set Up Email Notifications for Oracle Cloud Infrastructure Events in OCI Monitoring
F87596-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.