Registrar várias contas da AWS com um único endereço de e-mail usando o Amazon SES - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Registrar várias contas da AWS com um único endereço de e-mail usando o Amazon SES

Criado por Joe Wozniak (AWS) e Shubhangi Vishwakarma (AWS)

Repositório de códigos: GitHub aws-account-factory-email

Ambiente: PoC ou piloto

Tecnologias: Infraestrutura; Gestão e governança; Mensagens e comunicações

Serviços da AWS: AWS Lambda; Amazon SES; Amazon DynamoDB

Resumo

Esse padrão descreve como você dissocia endereços de e-mail reais do endereço de e-mail associado a uma conta da AWS. As contas da AWS requerem que um endereço de e-mail exclusivo seja fornecido no momento da criação da conta. Em algumas organizações, a equipe que gerencia as contas AWS deve assumir a responsabilidade de gerenciar vários endereços de e-mail exclusivos com sua equipe de mensagens. Isso pode ser difícil para grandes organizações que gerenciam muitas contas AWS.

Esse padrão fornece uma solução exclusiva de venda automática de endereços de e-mail que permite que os proprietários de contas AWS associem um endereço de e-mail a várias contas AWS. Os endereços de e-mail reais dos proprietários de contas AWS são então associados a esses endereços de e-mail gerados em uma tabela. A solução lida com todos os e-mails recebidos para as contas de e-mail exclusivas, pesquisa o proprietário de cada conta e, em seguida, encaminha todas as mensagens recebidas para o proprietário.  

Pré-requisitos e limitações

Pré-requisitos

  • Acesso administrativo a uma conta da AWS.

  • Acesso a um ambiente de desenvolvimento. Recomendamos que você use o AWS Cloud9 para evitar ter que configurar você mesmo as ferramentas e as chaves de acesso necessárias.

  • (Opcional) A familiaridade com os fluxos de trabalho do AWS Cloud Development Kit (AWS CDK) e com a linguagem de programação Python ajudará você a solucionar quaisquer problemas ou fazer modificações.

Limitações

  • O tamanho geral do endereço de e-mail vendido é de 64 caracteres. Para obter detalhes, consulte CreateAccounta referência da API do AWS Organizations.

Versões do produto

  • Node.js versão 12.7.0 ou superior

  • Python 3.9 ou superior

  • Pacotes Python pip e virtualenv

  • AWS CDK versão 2.23.0 ou superior

  • Docker 20.10.x ou superior

Arquitetura

Pilha de tecnologias de destino

  • Pilha da AWS CloudFormation

  • Funções do AWS Lambda

  • Regras e conjunto de regras do Amazon Simple Email Address (Amazon SES)

  • Perfis e políticas do Identity and Access Management (IAM) da AWS

  • O bucket do Amazon Simple Storage Service (Amazon S3) e política de bucket.

  • Política de chaves e chaves do AWS Key Management Service (AWS KMS)

  • Tópico e política de tópico do Amazon Simple Notification Service (Amazon SNS)

  • Tabela do Amazon DynamoDB

Arquitetura de destino

Arquitetura de destino para registro de várias contas da AWS com um único endereço de e-mail

Esse diagrama mostra dois fluxos:

  • Fluxo de venda automática de endereços de e-mail: no diagrama, o fluxo de venda automática de endereços de e-mail (seção inferior) geralmente inicia com uma solução de venda automática de contas ou automação externa, ou é invocado manualmente. Na solicitação, uma função do Lambda é chamada com uma carga que contém os metadados necessários. A função usa essas informações para gerar um nome de conta e endereço de e-mail exclusivos, armazenar em um banco de dados do DynamoDB e retornar os valores ao chamador. Esses valores podem então ser usados para criar uma nova conta da AWS (normalmente usando o AWS Organizations).

  • Fluxo de encaminhamento de e-mail: esse fluxo é ilustrado na seção superior do diagrama anterior. Quando uma conta da AWS é criada usando o e-mail da conta gerado a partir do fluxo de venda automática de endereços de e-mail, a AWS envia vários e-mails, como confirmação do registro da conta e notificações periódicas, para esse endereço de e-mail. Seguindo as etapas desse padrão, você configura sua conta da AWS com o Amazon SES para receber e-mails de todo o domínio. Essa solução configura regras de encaminhamento que permitem ao Lambda processar todos os e-mails recebidos, verificar se o endereço TO está na tabela do DynamoDB e encaminhar a mensagem para o endereço de e-mail do proprietário da conta. O uso desse processo dá aos proprietários da conta a capacidade de associar várias contas a um endereço de e-mail.

Automação e escala

Esse padrão usa o AWS CDK para automatizar totalmente a implantação. A solução usa serviços gerenciados da AWS que serão (ou podem ser configurados para) escalar automaticamente para atender às suas necessidades. As funções do Lambda podem exigir configuração adicional para atender às suas necessidades de escalabilidade. Para obter mais informações, consulte Escalabilidade da função do Lambda na documentação do Lambda.

Ferramentas

Serviços da AWS

  • O AWS Cloud9 é um ambiente de desenvolvimento integrado (IDE) que ajuda você a codificar, criar, executar, testar e depurar software. Ele também ajuda você a lançar software na Nuvem AWS.

  • CloudFormationA AWS ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS.

  • A ‭AWS Command Line Interface (AWS CLI)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

  • O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.

  • O AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.

  • O AWS Key Management Service (AWS KMS) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.

  • O AWS Lambda é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • Amazon Simple Email Service (Amazon SES): ajuda você a enviar e receber e-mails usando seus próprios endereços de e-mail e domínios.

  • O Amazon Simple Notification Service (Amazon SNS) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

Ferramentas necessárias para implantação

  • Ambiente de desenvolvimento com a AWS CLI e o acesso IAM à sua conta da AWS. Para obter detalhes, consulte os links na seção Recursos relacionados. Recomendamos que você use o AWS Cloud9 para simplificar o processo de configuração.  

  • Se você usa o AWS Cloud9, o seguinte será configurado para você.  Se você optar por não usar o AWS Cloud9, precisará instalar o seguinte:

    • A AWS CLI para configurar as credenciais de acesso para o AWS CDK. Para obter mais informações, consulte a documentação da AWS CLI.

    • Python, versão 3.9 ou superior.

    • Pacotes Python pip e virtualenv

    • Node.js versão 12.7.0 ou superior

    • AWS CDK versão 2.23.0 ou superior

    • Docker, versão 20.10 ou superior.

Código

O código desse padrão está disponível no repositório de e-mail da fábrica de contas da GitHub AWS.

Épicos

TarefaDescriçãoHabilidades necessárias

Criar ou identificar uma conta da AWS

Identificar uma conta da AWS nova ou existente à qual você tenha acesso administrativo total para implementar a solução de e-mail.  

Administrador da AWS, administrador de nuvem

Configurar um ambiente de implantação.

Configure um ambiente de implantação fácil de usar e configure dependências seguindo estas etapas:

  1. Implantar uma instância do AWS Cloud9 como um ambiente de implantação dedicado. Para obter instruções, consulte Conceitos básicos do AWS Cloud9.

  2. Clone a base de código do repositório de e-mail de fábrica da conta da GitHub AWS na instância do AWS Cloud9 usando o comando:

    git clone https://github.com/aws-samples/aws-account-factory-email
  3. No requirements.txt arquivo (na raiz do repositório), atualize a linha que começa com aws-cdk-lib== para corresponder à versão do AWS CDK que está sendo executada em seu ambiente. Para identificar a versão, use o cdk --version comando.

AWS DevOps, desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Identifique e aloque um domínio.

A funcionalidade de encaminhamento de e-mail requer um domínio dedicado. Identifique e atribua um domínio ou subdomínio que você possa verificar com o Amazon SES. Esse domínio deve estar disponível para receber e-mails na conta da AWS em que a solução de encaminhamento de e-mail está implantada.

Requisitos de domínio:

  • O domínio deve ser um domínio ou subdomínio padrão.

  • O domínio deve ser solucionável externamente por DNS porque será usado para receber e-mails de fora da organização.

Administrador de nuvem, administrador de rede, administrador de DNS

Verificar o domínio.

Verifique se o domínio identificado pode ser usado para aceitar e-mails recebidos.

Complete as instruções em Como verificar seu domínio para recebimento de e-mails do Amazon SES na documentação do Amazon SES. Isso exigirá coordenação com a pessoa ou equipe responsável pelos registros DNS do domínio.

Desenvolvedor de aplicativos, AWS DevOps

Configurar registros MX.

Configure seu domínio com registros MX que apontam para os endpoints do Amazon SES em sua conta e região da AWS. Para obter mais informações, consulte Publicação de um registro MX para recebimento de e-mails do Amazon SES na documentação do Amazon SES.

Administrador de nuvem, administrador de rede, administrador de DNS
TarefaDescriçãoHabilidades necessárias

Modifique os valores padrão em cdk.json.

Edite alguns dos valores padrão no arquivo cdk.json (na raiz do repositório) para que a solução funcione corretamente após a implantação.

  1. Modifique o valor SES_DOMAIN_NAME para corresponder ao nome de domínio que você verificou anteriormente.

  2. Modifique o valor ADDRESS_FROM para incluir o mesmo domínio que está em SES_DOMAIN_NAME. A parte local do endereço deve ser determinada pela sua equipe de nuvem. Esse endereço se torna o endereço FROM de cada e-mail encaminhado pela solução.

  3. Modifique o valor ADDRESS_ADMIN para corresponder ao endereço de e-mail para o qual todas as mensagens recebidas que não correspondam serão encaminhadas. Esse valor deve ser um endereço de e-mail válido e operacional.

Desenvolvedor de aplicativos, AWS DevOps

Implante a solução de venda e encaminhamento de e-mails.

  1. Crie um ambiente virtual Python.

    python -m venv .venv
  2. Ative o ambiente virtual Python:

    source .venv/bin/activate

    Ou, na plataforma Windows, use:

    % .venv\Scripts\activate.bat
  3. Instale todos os requisitos do Python sem erros:

    pip install -r requirements.txt
  4. Sintetize o CloudFormation modelo:

    cdk synth

    Confirme se não há erros e se o CloudFormation modelo completo contém a saída esperada.

  5. (Opcional) Se você estiver implantando o código do AWS CDK na conta ou região atual da AWS pela primeira vez, inicialize o ambiente. Para obter mais informações, consulte Inicialização na documentação do AWS CDK.

    cdk bootstrap aws://AWS-ACCOUNT-NUMBER/REGION

    Substitua AWS-ACCOUNT-NUMBER e REGION por valores reais.

  6. Implantar a solução.

    cdk bootstrap cdk deploy

    Os comandos de compilação deve ser concluídos sem erros.

Desenvolvedor de aplicativos, AWS DevOps

Verificar se a solução foi implantada.

Verificar se a solução foi implantada com sucesso antes de começar o teste:

  1. Abra o CloudFormation console da AWS e procure uma CloudFormation pilha que contenha o nomeAwsMailFwdStack.

  2. Confirmar se essa pilha AwsMailFwdStack tem os seguintes recursos:

    • Funções do Lambda

    • Regra e conjunto de regras do Amazon SES

    • Perfis e políticas do IAM

    • Bucket do Amazon S3 e política de bucket

    • Chave do AWS KMS e política de chaves

    • Tópico e política de tópicos do Amazon SNS

    • Tabela do DynamoDB

Desenvolvedor de aplicativos, AWS DevOps
TarefaDescriçãoHabilidades necessárias

Verificar se a API está trabalhando.

Nesta etapa, você enviará dados de teste para a API da solução e confirma se a solução produz a saída esperada e se as operações de backend foram executadas conforme o esperado.

Execute manualmente a função do Lambda Vend Email usando a entrada de teste. (Para ver um exemplo, consulte o arquivo sample_vend_request.json.) Use um endereço de e-mail válido para OwnerAddress. A API deve retornar o nome da conta e o e-mail da conta com os valores esperados.

Desenvolvedor de aplicativos, AWS DevOps

Verificar se o e-mail está sendo encaminhado.

Nesta etapa, você enviará um e-mail de teste pelo sistema e verifica se o e-mail foi encaminhado para o destinatário esperado.

  1. Obtenha o e-mail da conta na última etapa.

  2. Enviar um e-mail para esse endereço com o assunto do teste e o corpo do texto.

  3. Confirmar se você recebeu o e-mail no endereço de e-mail do proprietário da conta.

  4. Confirmar se o e-mail que você recebeu tem um FROM endereço que corresponde à ADDRESS_FROM configuração em cdk.json.

  5. Confirmar se o assunto e o corpo do e-mail recebido são iguais aos da mensagem original enviada.

Desenvolvedor de aplicativos, AWS DevOps

Solução de problemas

ProblemaSolução

O sistema não encaminha e-mails conforme o esperado.

Verificar se sua configuração está correta:

  1. Você deve ter concluído o processo de verificação do Amazon SES para seu domínio.

  2. Seu domínio deve ser configurado corretamente com registros MX apontando para os endpoints do Amazon SES em sua conta e região da AWS. Para obter mais informações, consulte Publicação de um registro MX para recebimento de e-mails do Amazon SES na documentação do Amazon SES.

Depois de verificar a configuração do domínio, siga estas etapas:

  1. Abra o CloudWatch console da AWS para a conta e a região em que você implantou a solução e navegue até os grupos de CloudWatch log no painel de navegação.

  2. Pesquise na lista de grupos de logs porSesMailForwardLogGroup.

  3. Investigue os logs desse grupo para ver se algum erro foi gerado durante o processo de venda e encaminhamento de e-mails.

Ao tentar implementar a pilha do AWS CDK, você recebe um erro semelhante a:

“Erro no formato do modelo: tipos de recursos não reconhecidos”

Na maioria das instâncias, essa mensagem de erro significa que a região que você está segmentando não tem todos os serviços da AWS disponíveis. Se você estiver usando o AWS Cloud9 para implementar a solução, você pode ter como alvo uma região diferente da região em que a instância do AWS Cloud9 está sendo executada.

Observação: por padrão, o AWS CDK é implantado na região e na conta que você configurou na AWS CLI.

Soluções possíveis:

  1. analisar os serviços da AWS por região para investigar se todos os serviços necessários para essa solução (consulte a seção de pilha de tecnologia do Target no início deste padrão) estão na região da AWS que você está segmentando.

  2. Se você estiver usando o AWS Cloud9 e tiver como alvo uma região diferente da região em que sua instância do AWS Cloud9 está sendo executada, certificar a definição da variável de ambiente ou definir uma região com AWS_DEFAULT_REGION a AWS CLI antes de implementar a solução. Para obter mais informações, consulte as Variáveis de ambiente para configurar a AWS CLI na documentação da AWS CLI. Como alternativa, você pode modificar o app.py arquivo na raiz do repositório para incluir um ID de conta e uma região de codificação rígida seguindo as instruções na documentação do AWS CDK para ambientes.

Ao implementar a solução, você recebe a mensagem de erro:

“Falha na implantação: Erro:: parâmetro SSM AwsMailFwdStack /cdk-bootstrap/hnb659fds/versão não encontrada. O ambiente foi inicializado? Por favor, execute 'cdk bootstrap'”

Se você nunca implementou nenhum recurso do AWS CDK na conta da AWS e na região que você tem como alvo, primeiro você terá que executar o comando cdk bootstrap conforme o erro indica. Se você continua recebendo esse erro depois de executar o comando inicialização, talvez esteja tentando implementar a solução em uma região diferente da região em que sua instância do AWS Cloud9 está sendo executada.

Para resolver esse problema, definir a variável de ambiente AWS_DEFAULT_REGION ou defina uma região com a AWS CLI antes de implementar a solução. Como alternativa, você pode modificar o app.py arquivo na raiz do repositório para incluir um ID de conta e uma região de codificação rígida seguindo as instruções na documentação do AWS CDK para ambientes.

Recursos relacionados

Mais informações

Custos

Ao implementar essa solução, o titular da conta da AWS pode incorrer em custos associados ao uso dos seguintes serviços.  É importante entender como esses serviços são cobrados para estar ciente de quaisquer possíveis cobranças. Para obter mais informações sobre definição de preço, veja as seguintes páginas: