Registre varias cuentas de AWS con una sola dirección de correo electrónico mediante Amazon SES - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Registre varias cuentas de AWS con una sola dirección de correo electrónico mediante Amazon SES

Creado por Joe Wozniak (AWS) y Shubhangi Vishwakarma (AWS)

Repositorio de código: GitHub aws-account-factory-email

Entorno: PoC o piloto

Tecnologías: infraestructura; gestión y gobierno; mensajería y comunicacione

Servicios de AWS: Amazon DynamoDB; AWS Lambda; Amazon SES

Resumen

Este patrón describe cómo puede desvincular las direcciones de correo electrónico reales de la dirección de correo electrónico asociada a una cuenta de AWS. Las cuentas de AWS requieren que se proporcione una dirección de correo electrónico única en el momento de la creación de la cuenta. En algunas organizaciones, el equipo que administra las cuentas de AWS debe asumir la carga de administrar muchas direcciones de correo electrónico únicas con su equipo de mensajería. Esto puede resultar difícil para las grandes organizaciones que administran muchas cuentas de AWS.

Este patrón proporciona una solución de venta de direcciones de correo electrónico única que permite a los propietarios de cuentas de AWS asociar una dirección de correo electrónico a varias cuentas de AWS. A continuación, las direcciones de correo electrónico reales de los propietarios de las cuentas de AWS se asocian a estas direcciones de correo electrónico generadas en una tabla. La solución gestiona todo el correo entrante de las cuentas de correo electrónico únicas, busca al propietario de cada cuenta y, a continuación, reenvía los mensajes recibidos al propietario.  

Requisitos previos y limitaciones

Requisitos previos 

  • Acceso administrativo a una cuenta de AWS.

  • Acceso a un entorno de desarrollo. Le recomendamos que utilice AWS Cloud9 para evitar tener que configurar usted mismo las herramientas y claves de acceso necesarias.

  • (Opcional) Estar familiarizado con los flujos de trabajo del AWS Cloud Development Kit (AWS CDK) y el lenguaje de programación Python le ayudará a solucionar cualquier problema o a realizar modificaciones.

Limitaciones

  • La longitud total de la dirección de correo electrónico vendida es de 64 caracteres. Para obtener más información, consulte CreateAccountla referencia de la API de AWS Organizations.

Versiones de producto

  • Node.js versión 12.7.0 o posterior

  • Python 3.9 o posterior

  • Paquetes de Python pip y virtualenv

  • CDK de AWS, versión 2.23.0 o posterior

  • Docker, versión 20.10x o posterior

Arquitectura

Pila de tecnología de destino

  • CloudFormation Pila de AWS

  • Funciones de AWS Lambda

  • Reglas y conjunto de reglas de Amazon Simple Email Address (Amazon SES)

  • Roles y políticas de AWS Identity and Access Management (IAM)

  • Un bucket de Amazon Simple Storage Service (Amazon S3) y política de bucket

  • Política de claves y claves de AWS Key Management Service (AWS KMS)

  • Tema de Amazon Simple Notification Service (Amazon SNS) y política de temas

  • Tabla de Amazon DynamoDB

Arquitectura de destino

Arquitectura de destino para registrar varias cuentas de AWS con una sola dirección de correo electrónico

En este diagrama se muestran dos flujos:

  • Flujo de venta de direcciones de correo electrónico: en el diagrama, el flujo de venta de direcciones de correo electrónico (sección inferior) comienza normalmente con una solución de venta de cuentas o con una automatización externa, o se invoca manualmente. En la solicitud, se llama a una función de Lambda con una carga útil que contiene los metadatos necesarios. La función utiliza esta información para generar un nombre de cuenta y una dirección de correo electrónico únicos, los almacena en una base de datos de DynamoDB y devuelve los valores a la persona que llama. Luego, estos valores se pueden usar para crear una nueva cuenta de AWS (normalmente, mediante AWS Organizations).

  • Flujo de reenvío de correo electrónico: este flujo se ilustra en la sección superior del diagrama anterior. Cuando se crea una cuenta de AWS mediante el correo electrónico de la cuenta generado a partir del flujo de venta de direcciones de correo electrónico, AWS envía varios correos electrónicos, como la confirmación de registro de la cuenta y las notificaciones periódicas, a esa dirección de correo electrónico. Siguiendo los pasos de este patrón, se configura la cuenta de AWS con Amazon SES para recibir correos electrónicos de todo el dominio. Esta solución configura reglas de reenvío que permiten a Lambda procesar todos los correos electrónicos entrantes, comprobar si la dirección TO está en la tabla de DynamoDB y, en su lugar, reenviar el mensaje a la dirección de correo electrónico del propietario de la cuenta. El uso de este proceso permite a los propietarios de las cuentas asociar varias cuentas a una sola dirección de correo electrónico.

Automatizar y escalar

Este patrón utiliza la CDK de AWS para automatizar completamente la implementación. La solución utiliza los servicios gestionados de AWS que se escalarán automáticamente (o se pueden configurar para) adaptarse a sus necesidades. Es posible que las funciones de Lambda requieran una configuración adicional para satisfacer sus necesidades de escalado. Para obtener más información, consulte escalado de funciones de Lambda en la documentación de Lambda.

Herramientas

Servicios de AWS

  • AWS Cloud9 es un entorno de desarrollo integrado (IDE) que ayuda a codificar, crear, ejecutar, probar y depurar software. También ayuda a lanzar software a la nube de AWS.

  • AWS le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.

  • La interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.

  • Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.

  • AWS Identity and Access Management (IAM) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.

  • AWS Key Management Service (AWS KMS) facilita poder crear y controlar claves criptográficas para proteger los datos.

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • Amazon Simple Email Service (Amazon SES) facilita poder enviar y recibir correos electrónicos a través de los dominios y direcciones de correo electrónico propios.

  • Amazon Simple Notification Service (Amazon SNS) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

Herramientas necesarias para la implementación

  • Entorno de desarrollo con acceso a la CLI de AWS y a la IAM a su cuenta de AWS. Para obtener más información, consulte los enlaces de la sección recursos relacionados. Le recomendamos que utilice AWS Cloud9 para simplificar el proceso de configuración.  

  • Si usa AWS Cloud9, se configurará lo siguiente para usted.  Si decide no utilizar AWS Cloud9, tendrá que instalar lo siguiente:

    • La CLI de AWS para configurar las credenciales de acceso a la CDK de AWS. Para obtener más información, consulte la documentación de la CLI de AWS.

    • Python, versión 3.9 o posterior

    • Paquetes de Python pip y virtualenv

    • Node.js versión 12.7.0 o posterior

    • CDK de AWS, versión 2.23.0 o posterior

    • Docker, versión 20.10.x o posterior

Código

El código de este patrón está disponible en el repositorio de correo electrónico de la fábrica de cuentas de GitHub AWS.

Epics

TareaDescripciónHabilidades requeridas

Identificar o crear una cuenta de AWS.

Identifique una cuenta de AWS existente o nueva a la que tenga acceso administrativo completo para implementar la solución de correo electrónico.  

Administrador de la nube, administrador de AWS

Configure un entorno de implementación.

Configure un entorno de implementación fácil de usar y configure las dependencias siguiendo estos pasos:

  1. Implemente una instancia de AWS Cloud9 como un entorno de implementación dedicado. Consulte Introducción a AWS Cloud9 para obtener instrucciones.

  2. Clone la GitHub base de códigos del repositorio de correo electrónico de fábrica de cuentas de AWS en la instancia de AWS Cloud9 mediante el comando:

    git clone https://github.com/aws-samples/aws-account-factory-email
  3. En el archivo requirements.txt (en la raíz del repositorio), actualice la línea que comienza con aws-cdk-lib== para que coincida con la versión de la CDK de AWS que se ejecuta en su entorno. Para identificar la versión, utilice el comando cdk --version.

AWS DevOps, desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Identifique y asigne un dominio.

La funcionalidad de reenvío de correo electrónico requiere un dominio dedicado. Identifique y asigne un dominio o subdominio que pueda verificar con Amazon SES. Este dominio debe estar disponible para recibir correo electrónico entrante en la cuenta de AWS en la que esté implementada la solución de reenvío de correo electrónico.

Requisitos del dominio:

  • El dominio debe ser un dominio o subdominio estándar.

  • El dominio debe poder resolverse mediante DNS de forma externa, ya que se utilizará para recibir correos electrónicos de personas ajenas a la organización.

Administrador de la nube, administrador de redes, administrador de DNS

Compruebe el dominio.

Compruebe que el dominio identificado se puede utilizar para aceptar el correo entrante.

Complete las instrucciones de Verificación de su dominio para la recepción de correos electrónicos de Amazon SES en la documentación de Amazon SES. Esto requerirá la coordinación con la persona o el equipo responsable de los registros de DNS del dominio.

Desarrollador de aplicaciones, AWS DevOps

Configure los registros MX.

Configure su dominio con registros MX que apunten a los puntos de conexión de Amazon SES de su cuenta y región de AWS. Para obtener más información, consulte Publicar un registro MX para la recepción de correos electrónicos de Amazon SES en la documentación de Amazon SES.

Administrador de la nube, administrador de redes, administrador de DNS
TareaDescripciónHabilidades requeridas

Modifique los valores predeterminados en cdk.json.

Edite algunos de los valores predeterminados del archivo cdk.json (en la raíz del repositorio) para que la solución funcione correctamente una vez implementada.

  1. Modifique el valor SES_DOMAIN_NAME para que coincida con el nombre de dominio que verificó anteriormente.

  2. Modifique el valor ADDRESS_FROM para incluir el mismo dominio en el que se encuentra SES_DOMAIN_NAME. Su equipo de nube debe determinar la parte local de la dirección. Esta dirección se convierte en la dirección FROM de todos los correos electrónicos que se reenvían a través de la solución.

  3. Modifique el valor ADDRESS_ADMIN para que coincida con la dirección de correo electrónico a la que se reenviarán los mensajes entrantes que no coincidan. Este valor debe ser una dirección de correo electrónico válida y operativa.

Desarrollador de aplicaciones, AWS DevOps

Implemente la solución de venta y reenvío de correo electrónico.

  1. Cree un entorno virtual Python:

    python -m venv .venv
  2. Active el entorno virtual Python:

    source .venv/bin/activate

    O bien, en la plataforma Windows, utilice:

    % .venv\Scripts\activate.bat
  3. Instale todos los requisitos de Python sin errores:

    pip install -r requirements.txt
  4. Sintetice la CloudFormation plantilla:

    cdk synth

    Confirme que no hay errores y que la CloudFormation plantilla completa contiene el resultado esperado.

  5. (Opcional) Si va a implementar el código CDK de AWS en la cuenta o región de AWS actual por primera vez, inicie el entorno. Para obtener más información, consulte Proceso de arranque en la documentación de CDK de AWS.

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

    Sustituya AWS-ACCOUNT-NUMBER y REGION por valores reales.

  6. Implemente la solución:

    cdk bootstrap cdk deploy

    Los comandos deberían completarse sin errores.

Desarrollador de aplicaciones, AWS DevOps

Compruebe que la solución se haya implementado.

Compruebe que la solución se ha implementado correctamente antes de comenzar las pruebas:

  1. Abra la CloudFormation consola de AWS y busque una CloudFormation pila que contenga el nombreAwsMailFwdStack.

  2. Confirme que esta pila AwsMailFwdStack tenga los siguientes recursos:

    • Funciones de Lambda

    • Regla y conjunto de reglas de Amazon SES

    • Roles y políticas de IAM

    • Política de bucket y bucket de Amazon S3

    • Clave y política de claves de AWS KMS

    • Tema y política de Amazon SNS

    • Tabla de DynamoDB

Desarrollador de aplicaciones, AWS DevOps
TareaDescripciónHabilidades requeridas

Verifique que la API está en funcionamiento.

En este paso, debe enviar los datos de prueba a la API de la solución y confirmar que la solución produce el resultado esperado y que las operaciones de backend se han realizado según lo previsto.

Ejecute manualmente la función Vend Email de la función de Lambda mediante una entrada de prueba. (Para ver un ejemplo, consulte el archivo sample_vend_request.json). Para OwnerAddress, utilice una dirección de correo electrónico válida. La API debería devolver el nombre de la cuenta y el correo electrónico de la cuenta con los valores esperados.

Desarrollador de aplicaciones, AWS DevOps

Compruebe que el correo electrónico se está reenviando.

En este paso, envía un correo electrónico de prueba a través del sistema y comprueba que el correo electrónico se ha reenviado al destinatario previsto.

  1. Obtenga el correo electrónico de la cuenta del último paso.

  2. Envíe un correo electrónico a esta dirección con el tema de la prueba y el cuerpo del texto.

  3. Confirme que recibió el correo electrónico en la dirección de correo electrónico del propietario de la cuenta.

  4. Confirme que el correo electrónico que ha recibido tiene una dirección FROM que coincide con la configuración ADDRESS_FROM indicada en cdk.json.

  5. Confirme que el asunto y el cuerpo del correo electrónico recibido son los mismos que los del mensaje enviado originalmente.

Desarrollador de aplicaciones, AWS DevOps

Resolución de problemas

ProblemaSolución

El sistema no reenvía el correo electrónico como se esperaba.

Compruebe que la configuración es correcta:

  1. Debería haber completado el proceso de verificación de Amazon SES para su dominio.

  2. Su dominio debe estar configurado correctamente con registros MX que apunten a los puntos de conexión de Amazon SES de su cuenta y región de AWS. Para obtener más información, consulte Publicar un registro MX para la recepción de correos electrónicos de Amazon SES en la documentación de Amazon SES.

Después de verificar la configuración de dominio, siga estos pasos:

  1. Abra la CloudWatch consola de AWS de la cuenta y la región en las que implementó la solución y navegue hasta los grupos de CloudWatch registros en el panel de navegación.

  2. Busque en la lista de los grupos de registros para SesMailForwardLogGroup.

  3. Investigue los registros de este grupo para ver si se ha generado algún error durante el proceso de venta y reenvío de correo electrónico.

Cuando intenta implementar la pila de CDK de AWS, recibe un error similar al siguiente:

“Error de formato de plantilla: tipos de recursos no reconocidos”

En la mayoría de las instancias, este mensaje de error significa que la región a la que se dirige no tiene todos los servicios de AWS disponibles. Si utiliza AWS Cloud9 para implementar la solución, es posible que se dirija a una región diferente de la región en la que se ejecuta la instancia de AWS Cloud9.

Nota: De forma predeterminada, la CDK de AWS se implementa en la región y la cuenta que configuró en la CLI de AWS.

Posibles soluciones:

  1. Consulte los servicios de AWS por región para comprobar si todos los servicios necesarios para esta solución (consulte la sección sobre la pila de tecnología destino que aparece más arriba en este patrón) se encuentran en la región de AWS a la que se dirige revisando servicios de AWS según región.

  2. Si utiliza AWS Cloud9 y se dirige a una región diferente de la región en la que se ejecuta su instancia de AWS Cloud9, asegúrese de configurar la variable de entorno AWS_DEFAULT_REGION o establecer una región con la CLI de AWS antes de implementar la solución. Para obtener más información, consulte Variables de entorno para configurar la CLI de AWS en la documentación de la CLI de AWS. Como alternativa, puede modificar el archivo app.py en la raíz del repositorio para incluir un ID y región de cuenta de codificación rígida y una región siguiendo las instrucciones de la documentación de CDK de AWS para entornos.

Al implementar la solución, recibirá el siguiente mensaje de error:

«Falló la implementación: Error AwsMailFwdStack: no se encontró el parámetro SSM /cdk-bootstrap/hnb659fds/version. ¿Arrancó el entorno? Ejecute 'cdk bootstrap'”

Si nunca ha implementado ningún recurso de CDK de AWS en la cuenta y región de AWS a la que se dirige, primero tendrá que ejecutar el comando cdk bootstrap, tal y como indica el error. Si sigue recibiendo este error después de ejecutar el comando de arranque, es posible que esté intentando implementar la solución en una región distinta de la región en la que se ejecuta la instancia de AWS Cloud9.

Para resolver este problema, defina la variable de entorno AWS_DEFAULT_REGION o defina una región con la CLI de AWS antes de implementar la solución. Como alternativa, puede modificar el archivo app.py en la raíz del repositorio para incluir un ID y región de cuenta de codificación rígida y una región siguiendo las instrucciones de la documentación de CDK de AWS para entornos.

Recursos relacionados

Información adicional

Costos

Al implementar esta solución, el titular de la cuenta de AWS puede incurrir en costos asociados al uso de los siguientes servicios.  Es importante que comprenda cómo se facturan estos servicios para estar al tanto de los posibles cargos. Para obtener información sobre precios, consulte las siguientes páginas: