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.
Supervisar el uso de una imagen de máquina de Amazon compartida en varias cuentas de AWS
Creado por Naveen Suthar (AWS) y Sandeep Gawande (AWS)
Repositorio de código: -terraform-samples cross-account-ami-auditing | Entorno: PoC o piloto | Tecnologías: administración y gobierno; sin servidor; operaciones DevOps |
Servicios de AWS: Amazon DynamoDB; AWS Lambda; Amazon EventBridge |
Resumen
Las Imágenes de máquina de Amazon (AMI) se utilizan para crear instancias de Amazon Elastic Compute Cloud (Amazon EC2) en su entorno de Amazon Web Services (AWS). Puede crear AMI en una cuenta 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 región de AWS, que se denominan cuentas de consumidor en este patrón. La administración de las AMI desde una sola cuenta proporciona escalabilidad y simplifica la gobernanza. En las cuentas de consumidor, puede hacer referencia a la AMI compartida en las plantillas de lanzamiento de Amazon EC2 Auto Scaling y en los grupos de nodos de Amazon Elastic Kubernetes Service (Amazon EKS).
Cuando una AMI compartida queda obsoleta, se anula su registro o se deja de compartir, los servicios de AWS que hacen referencia a la AMI en las cuentas de consumidor no pueden usar esta AMI para lanzar 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 se producen eventos de uso compartido y de uso de la AMI en varias cuentas de AWS, puede ser 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 de AWS sin servidor, como Amazon EventBridge, Amazon DynamoDB, AWS Lambda 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
Requisitos previos
Dos o más cuentas de AWS activas: una cuenta de creador y una o más cuentas de consumidor
Una o más AMI que se comparten desde la cuenta de creador a una cuenta de consumidor
Terraform CLI, instalada
(documentación de Terraform) Terraform AWS Provider, configurado
(documentación de Terraform) (Opcional, pero recomendado) Backend de Terraform, configurado
(documentación de Terraform) Git, instalado
Limitaciones
Este patrón supervisa las AMI que se han compartido con cuentas específicas mediante el ID de la cuenta. Este patrón no supervisa las AMI que se han compartido con una organización mediante el ID de la organización.
Las AMI solo se pueden compartir con cuentas que se encuentren dentro de la misma región de AWS. Este patrón supervisa las AMI dentro de una única región de destino. Para supervisar el uso de las AMI en varias regiones, implemente esta solución en cada región.
Este patrón no supervisa ninguna AMI que se compartiera antes de implementar esta solución. Si desea supervisar las AMI compartidas anteriormente, puede dejar de compartir la AMI y, a continuación, volver a compartirla con las cuentas de consumidor.
Versiones de producto
Versión de Terraform 1.2.0 o posterior
Versión de Terraform AWS Provider 4.20 o posterior
Arquitectura
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
Rol de AWS Identity and Access Management (IAM)
Funciones de AWS Lambda
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](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:
La AMI de la cuenta de creador se comparte con una cuenta de consumidor de la misma región de AWS.
Cuando se comparte la AMI, una EventBridge regla de Amazon en la cuenta del creador captura el
ModifyImageAttribute
evento e inicia una función Lambda en la cuenta del creador.La función de Lambda almacena los datos relacionados con la AMI en una tabla de DynamoDB de la cuenta de creador.
Cuando un servicio de AWS de la cuenta del consumidor utiliza la AMI compartida para lanzar una instancia de Amazon EC2 o cuando la AMI compartida está asociada a una plantilla de lanzamiento, una EventBridge regla de la cuenta del consumidor captura el uso de la AMI compartida.
La EventBridge regla inicia una función Lambda en la cuenta del consumidor. La función de Lambda lleva a cabo lo siguiente:
La función de Lambda actualiza los datos relacionados con la AMI en una tabla de DynamoDB de la cuenta de consumidor.
La función de Lambda asume un rol de IAM en la cuenta de creador y actualiza la tabla de DynamoDB 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.
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.
La EventBridge regla de la cuenta del creador captura el
DeregisterImage
eventoModifyImageAttribute
o con laremove
acción e inicia la función Lambda.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 en la tabla
Mapping
no hay ningún ID de instancia o ID de plantilla de lanzamiento asociado a la AMI, el proceso se ha completado.Si hay algún ID de instancia o ID de plantilla de lanzamiento asociado a la AMI en la tabla
Mapping
, la función de Lambda utiliza Amazon SES para enviar una notificación por correo electrónico a los suscriptores configurados.
Herramientas
Servicios de AWS
Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
Amazon EventBridge 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, las funciones de Lambda de AWS, los puntos de conexión de invocación HTTP que utilizan destinos de API o los buses de eventos de otras cuentas de AWS.
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 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.
Otras herramientas
HashiCorp Terraform
es una herramienta de código abierto de infraestructura como código (IaC) que le ayuda a usar el código para aprovisionar y administrar la infraestructura y los recursos de la nube. Python
es un lenguaje de programación informático de uso general.
Repositorio de código
Prácticas recomendadas
Siga las Prácticas recomendadas para trabajar con funciones de Lambda de AWS.
Siga las Prácticas recomendadas para crear AMI.
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 y Prácticas recomendadas de seguridad en la documentación de IAM.
Configure la supervisión y las alertas para las funciones de Lambda de AWS. Para obtener más información, consulte Supervisión y solución de problemas de funciones de Lambda.
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree los perfiles con nombre de AWS CLI. | Para la cuenta de creador y para cada cuenta de consumidor, cree un perfil con nombre de Interfaz de la línea de comandos de AWS (AWS CLI). Si necesita instrucciones, consulte Configuración de AWS CLI | DevOps ingeniero |
Clonar el repositorio. | Escriba el siguiente comando. Esto clona el repositorio cross-account-ami-monitoring-terraform-samples mediante
| DevOps ingeniero |
Actualice el archivo provider.tf. |
Para más información sobre la configuración de proveedores, consulte Configuraciones de varios proveedores | DevOps ingeniero |
Actualice el archivo terraform.tfvars. |
| 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.
| DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Implemente la solución. | En la CLI de Terraform, ingrese los comandos siguientes para implementar los recursos de AWS en las cuentas de creador y de consumidor:
| 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 en la documentación de Amazon SES. | AWS general |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Valide la implementación en la cuenta de creador. |
| DevOps ingeniero |
Valide la implementación en la cuenta de consumidor. |
| DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree una AMI en la cuenta de creador. |
| DevOps ingeniero |
Use la AMI en la cuenta de consumidor. | En la cuenta de consumidor, utilice la AMI compartida para crear una instancia de EC2 o una plantilla de lanzamiento. Para obtener instrucciones, consulte Cómo puedo lanzar una instancia de EC2 desde una AMI personalizada | DevOps ingeniero |
Valide la supervisión y las alertas. |
| DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Elimine los recursos. |
| DevOps ingeniero |
Resolución de problemas
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. Compruebe lo siguiente:
|
Recursos relacionados
Documentación de AWS
Creación de funciones de Lambda con Python (documentación de Lambda)
Creación de una AMI (documentación de Amazon EC2)
Compartir una AMI con cuentas de AWS específicas (documentación de Amazon EC2)
Anular el registro de la AMI (documentación de Amazon EC2)
Documentación de Terraform