

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.

# Supervise el uso de una imagen de máquina de Amazon compartida en múltiples Cuentas de AWS
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts"></a>

*Naveen Suthar y Sandeep Gawande, Amazon Web Services*

## Resumen
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-summary"></a>

[Las imágenes de Amazon Machine (AMIs)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) se utilizan para crear instancias de Amazon Elastic Compute Cloud (Amazon EC2) en su entorno de Amazon Web Services (AWS). Puede crear una cuenta AMIs de AWS independiente y centralizada, que en este patrón se denomina *cuenta de creador*. A continuación, puede compartir la AMI entre varias Cuentas de AWS que estén en la misma unidad Región de AWS, que en este patrón se denominan *cuentas de consumidores*. La administración AMIs desde una sola cuenta proporciona escalabilidad y simplifica la gobernanza. [En las cuentas de los consumidores, puede hacer referencia a la AMI compartida en las [plantillas de lanzamiento](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-launch-template.html) de Amazon EC2 Auto Scaling y en los grupos de nodos de Amazon Elastic Kubernetes Service (Amazon EKS).](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html)

Cuando una AMI compartida queda [obsoleta](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html), [se anula su registro](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html) o [se deja de compartir](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-explicit.html), los servicios de Servicios de AWS que hacen referencia a la AMI en las cuentas de consumidor no pueden usar esta AMI para inicializar nuevas instancias. Se produce un error en cualquier evento de escalado automático o en el relanzamiento de la misma instancia. Esto puede provocar problemas en el entorno de producción, como el tiempo de inactividad de las aplicaciones o la degradación del rendimiento. Cuando los eventos de uso y uso de la AMI se producen de forma múltiple Cuentas de AWS, puede resultar difícil supervisar esta actividad.

Este patrón ayuda a supervisar el uso y el estado de la AMI compartida en cuentas de la misma región. Utiliza servicios sin servidor Servicios de AWS, como Amazon EventBridge, Amazon AWS Lambda DynamoDB y Amazon Simple Email Service (Amazon SES). La infraestructura se aprovisiona como código (IaC) mediante Terraform. HashiCorp Esta solución proporciona alertas cuando un servicio de una cuenta de consumidor hace referencia a una AMI que ya no está registrada o compartida.

## Requisitos previos y limitaciones
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-prereqs"></a>

**Requisitos previos **
+ Dos o más cuentas activas Cuentas de AWS: una cuenta de creador y una o más cuentas de consumidor
+ Una o más AMIs que se comparten desde la cuenta de creador a una cuenta de consumidor
+ Terraform CLI, [instalada](https://developer.hashicorp.com/terraform/cli) (documentación de Terraform)
+ Terraform AWS Provider, [configurado (documentación](https://hashicorp.github.io/terraform-provider-aws/) de Terraform)
+ (Opcional, pero recomendado) Backend de Terraform, [configurado](https://developer.hashicorp.com/terraform/language/backend) (documentación de Terraform)
+ Git, [instalado](https://github.com/git-guides/install-git)

**Limitaciones**
+ Este patrón monitorea AMIs lo que se ha compartido con cuentas específicas mediante el ID de la cuenta. Este patrón no supervisa los datos AMIs que se han compartido con una organización mediante el ID de la organización.
+ AMIs solo se puede compartir con cuentas que estén dentro de la misma Región de AWS. Este patrón se monitorea AMIs dentro de una única región objetivo. Para supervisar el uso AMIs en varias regiones, debe implementar esta solución en cada región.
+ Este patrón no monitorea ninguna de las AMIs que se compartieron antes de implementar esta solución. Si desea supervisar las cuentas compartidas anteriormente AMIs, puede dejar de compartir la AMI y, a continuación, volver a compartirla con las cuentas de los consumidores.

**Versiones de producto**
+ Versión de Terraform 1.2.0 o posterior
+ Terraform AWS Provider, versión 4.20 o posterior

## Arquitectura
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-architecture"></a>

**Pila de tecnología de destino**

Los recursos siguientes se aprovisionan como IaC a través de Terraform:
+ Tablas de Amazon DynamoDB
+  EventBridge Reglas de Amazon
+ AWS Identity and Access Management Función (IAM)
+ AWS Lambda funciones
+ Amazon SES

**Arquitectura de destino**

![Arquitectura para supervisar el uso de la AMI compartida y alertar a los usuarios si la AMI no se comparte o su registro se cancela](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/2d709249-0c68-47d7-be5d-46e8a73071ed/images/8c48c4dd-d681-4c32-9ba8-8f5ad2d66f64.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. La AMI de la cuenta de creador se comparte con una cuenta de consumidor de la misma Región de AWS.

1. Cuando se comparte la AMI, una EventBridge regla de la cuenta del creador captura el `ModifyImageAttribute` evento e inicia una función Lambda en la cuenta del creador.

1. La función de Lambda almacena los datos relacionados con la AMI en una tabla de DynamoDB de la cuenta de creador.

1. Cuando una Servicio de AWS cuenta de consumidor utiliza la AMI compartida para lanzar una EC2 instancia de Amazon o cuando la AMI compartida está asociada a una plantilla de lanzamiento, una EventBridge regla de la cuenta de consumidor captura el uso de la AMI compartida.

1. La EventBridge regla inicia una función Lambda en la cuenta del consumidor. La función de Lambda lleva a cabo lo siguiente:

   1. La función de Lambda actualiza los datos relacionados con la AMI en una tabla de DynamoDB de la cuenta de consumidor.

   1. La función de Lambda asume un rol de IAM en la cuenta de creador y actualiza la tabla de Lambda de la cuenta de creador. En la tabla `Mapping`, crea un elemento que asigna el ID de instancia o el ID de plantilla de lanzamiento a su ID de AMI correspondiente.

1. La AMI que se administra de forma centralizada en la cuenta de creador está obsoleta, se ha anulado su registro o ha dejado de compartirse.

1. La EventBridge regla de la cuenta del creador captura el `DeregisterImage` evento `ModifyImageAttribute` o con la `remove` acción e inicia la función Lambda.

1. La función de Lambda comprueba la tabla de DynamoDB para determinar si la AMI se utiliza en alguna de las cuentas de consumidor. Si no hay ninguna instancia IDs o plantilla de lanzamiento IDs asociada a la AMI en la `Mapping` tabla, el proceso se ha completado.

1. Si IDs hay alguna instancia IDs o plantilla de lanzamiento asociada a la AMI de la `Mapping` tabla, la función Lambda utiliza Amazon SES para enviar una notificación por correo electrónico a los suscriptores configurados.

## Tools (Herramientas)
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-tools"></a>

**Servicios de AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos finales de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas de AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus recursos de AWS al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) facilita poder enviar y recibir correos electrónicos a través de los dominios y direcciones de correo electrónico propios.

**Otras herramientas**
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una herramienta de infraestructura como código (IaC) que facilita usar el código para aprovisionar y administrar los recursos y la infraestructura en la nube.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [cross-account-ami-monitoring-terraform-samples](https://github.com/aws-samples/cross-account-ami-monitoring-terraform-samples).

## Prácticas recomendadas
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-best-practices"></a>
+ Siga las [prácticas recomendadas para](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) trabajar con funciones. AWS Lambda 
+ Siga las [mejores prácticas para crear AMIs](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html).
+ Al crear el rol de IAM, siga el principio del privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo cada tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) en la documentación de IAM.
+ Configure el monitoreo y las alertas para las AWS Lambda funciones. Para obtener más información, consulte [Supervisión y solución de problemas de funciones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html).

## Epics
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-epics"></a>

### Personalizar los archivos de configuración de Terraform
<a name="customize-the-terraform-configuration-files"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los perfiles AWS CLI nombrados. | Para la cuenta del creador y para cada cuenta de consumidor, cree un perfil con nombre AWS Command Line Interface (AWS CLI). Para obtener instrucciones, consulte [Configurar el AWS CLI](https://aws.amazon.com/getting-started/guides/setup-environment/module-three/) en el AWS Centro de recursos de introducción. | DevOps ingeniero | 
| Clonar el repositorio. | Escriba el siguiente comando. Esto clona el repositorio [cross-account-ami-monitoring-terraform-samples mediante](https://github.com/aws-samples/cross-account-ami-monitoring-terraform-samples) SSH. GitHub <pre>git clone git@github.com:aws-samples/cross-account-ami-monitoring-terraform-samples.git</pre> | DevOps ingeniero | 
| Actualice el archivo provider.tf. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html)Para más información sobre la configuración de proveedores, consulte [Configuraciones de varios proveedores](https://developer.hashicorp.com/terraform/language/providers/configuration#alias-multiple-provider-configurations) en la documentación de Terraform. | DevOps ingeniero | 
| Actualice el archivo terraform.tfvars. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps ingeniero | 
| Actualice el archivo main.tf. | Siga estos pasos solo si va a implementar esta solución en más de una cuenta de consumidor. Si va a implementar esta solución en una sola cuenta de consumidor, no es necesario modificar este archivo.[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps ingeniero | 

### Implementar la solución mediante Terraform
<a name="deploy-the-solution-by-using-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la solución. | En la CLI de Terraform, introduzca los siguientes comandos para implementar los AWS recursos en las cuentas del creador y del consumidor:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps ingeniero | 
| Verificar la identidad de la dirección de correo electrónico. | Al implementar el plan Terraform, Terraform crea una identidad de dirección de correo electrónico para cada cuenta de consumidor en Amazon SES. Para poder enviar notificaciones a esa dirección de correo electrónico, es necesario verificarla. Para las instrucciones, consulte [Verificación de la identidad de una dirección de correo electrónico](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-email-proc) en la documentación de Amazon SES. | AWS general | 

### Validar la implementación de recursos
<a name="validate-resource-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Valide la implementación en la cuenta de creador. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps ingeniero | 
| Valide la implementación en la cuenta de consumidor. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps ingeniero | 

### Validar la supervisión
<a name="validate-monitoring"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una AMI en la cuenta de creador. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps ingeniero | 
| Use la AMI en la cuenta de consumidor. | En la cuenta del consumidor, usa la AMI compartida para crear una EC2 instancia de Amazon o una plantilla de lanzamiento. Para obtener instrucciones, consulte [Cómo lanzar una EC2 instancia de Amazon desde una AMI personalizada](https://repost.aws/knowledge-center/launch-instance-custom-ami) (AWS re:Post Knowledge Center) o [Crear una plantilla de lanzamiento para un grupo de Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) (documentación de Amazon EC2 Auto Scaling). | DevOps ingeniero | 
| Valide la supervisión y las alertas. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps ingeniero | 

### (Opcional) Deje de monitorear de forma compartida AMIs
<a name="optional-stop-monitoring-shared-amis"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los recursos. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | DevOps ingeniero | 

## Resolución de problemas
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No he recibido ninguna alerta por correo electrónico. | Puede haber varios motivos por los que no se envió el correo electrónico de Amazon SES. Comprueba lo siguiente:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.html) | 

## Recursos relacionados
<a name="monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts-resources"></a>

**AWS documentación**
+ [Creación de funciones de Lambda con Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) (documentación de Lambda)
+ [Creación de una AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-ami.html) ( EC2 documentación de Amazon)
+ [Compartir una AMI con información específica Cuentas de AWS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-explicit.html) ( EC2 documentación de Amazon)
+ [Anular el registro de la AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html) (documentación de Amazon EC2 )

**Documentación de Terraform**
+ [Instalar Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Configuración del backend de Terraform](https://www.terraform.io/language/settings/backends/configuration)
+ [Proveedor de AWS para Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Descarga binaria de Terraform](https://developer.hashicorp.com/terraform/install)