Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Surveillez l'utilisation d'une Amazon Machine Image partagée sur plusieurs Comptes AWS
Créée par Naveen Suthar (AWS) et Sandeep Gawande (AWS)
Récapitulatif
Les images Amazon Machine (AMIs) sont utilisées pour créer des instances Amazon Elastic Compute Cloud (Amazon EC2) dans votre environnement Amazon Web Services (AWS). Vous pouvez créer AMIs dans un compte AWS distinct et centralisé, appelé compte de créateur dans ce modèle. Vous pouvez ensuite partager l'AMI entre plusieurs Comptes AWS comptes identiques Région AWS, appelés comptes consommateurs dans ce modèle. La gestion AMIs à partir d'un seul compte assure l'évolutivité et simplifie la gouvernance. Dans les comptes clients, vous pouvez référencer l'AMI partagée dans les modèles de lancement Amazon EC2 Auto Scaling et les groupes de nœuds Amazon Elastic Kubernetes Service (Amazon EKS).
Lorsqu'une AMI partagée est déconseillée, désenregistrée ou non partagée, les personnes qui Services AWS font référence à l'AMI dans les comptes des consommateurs ne peuvent pas utiliser cette AMI pour lancer de nouvelles instances. Tout événement de mise à l'échelle automatique ou tout redémarrage de la même instance échoue. Cela peut entraîner des problèmes dans l'environnement de production, tels que des temps d'arrêt des applications ou une dégradation des performances. Lorsque des événements de partage et d'utilisation d'AMI se produisent en plusieurs fois Comptes AWS, il peut être difficile de surveiller cette activité.
Ce modèle vous permet de surveiller l'utilisation et le statut des AMI partagées entre les comptes d'une même région. Il utilise le mode sans serveur Services AWS, tel qu'Amazon EventBridge, Amazon AWS Lambda DynamoDB et Amazon Simple Email Service (Amazon SES). Vous provisionnez l'infrastructure sous forme de code (iAc) à l'aide de HashiCorp Terraform. Cette solution fournit des alertes lorsqu'un service d'un compte client fait référence à une AMI désenregistrée ou non partagée.
Conditions préalables et limitations
Prérequis
Deux comptes actifs ou plus Comptes AWS : un compte créateur et un ou plusieurs comptes consommateurs
Un ou plusieurs AMIs éléments partagés entre le compte du créateur et le compte du consommateur
Terraform CLI, installée (documentation
Terraform) AWS Fournisseur Terraform, configuré
(documentation Terraform) (Facultatif, mais recommandé) Backend Terraform, configuré
(documentation Terraform) Git, installé
Limites
Ce modèle surveille ceux AMIs qui ont été partagés avec des comptes spécifiques à l'aide de l'identifiant du compte. Ce modèle ne surveille pas ceux AMIs qui ont été partagés avec une organisation à l'aide de l'ID de l'organisation.
AMIs ne peut être partagé qu'avec des comptes appartenant au même compte Région AWS. Ce modèle surveille AMIs au sein d'une seule région cible. Pour surveiller l'utilisation AMIs dans plusieurs régions, vous déployez cette solution dans chaque région.
Ce modèle ne surveille aucun élément AMIs partagé avant le déploiement de cette solution. Si vous souhaitez surveiller le partage antérieur AMIs, vous pouvez annuler le partage de l'AMI, puis le partager à nouveau avec les comptes clients.
Versions du produit
Terraform version 1.2.0 ou ultérieure
Terraform AWS Provider version 4.20 ou ultérieure
Architecture
Pile technologique cible
Les ressources suivantes sont fournies en tant qu'iAc via Terraform :
Tables Amazon DynamoDB
EventBridge Règles d'Amazon
AWS Identity and Access Management Rôle (IAM)
AWS Lambda fonctions
Amazon SES
Architecture cible

Le schéma suivant illustre le flux de travail suivant :
Une AMI dans le compte créateur est partagée avec un compte client dans le même compte Région AWS.
Lorsque l'AMI est partagée, une EventBridge règle du compte créateur capture l'
ModifyImageAttribute
événement et lance une fonction Lambda dans le compte créateur.La fonction Lambda stocke les données relatives à l'AMI dans une table DynamoDB du compte créateur.
Lorsqu'un Service AWS compte client utilise l'AMI partagée pour lancer une EC2 instance Amazon ou lorsque l'AMI partagée est associée à un modèle de lancement, une EventBridge règle du compte client capture l'utilisation de l'AMI partagée.
La EventBridge règle initie une fonction Lambda dans le compte client. La fonction Lambda effectue les opérations suivantes :
La fonction Lambda met à jour les données relatives à l'AMI dans une table DynamoDB du compte client.
La fonction Lambda assume un rôle IAM dans le compte de créateur et met à jour la table Lambda dans le compte de créateur. Dans le
Mapping
tableau, il crée un élément qui associe l'ID d'instance ou l'ID du modèle de lancement à son ID d'AMI respectif.
L'AMI gérée de manière centralisée dans le compte du créateur est obsolète, désenregistrée ou n'est plus partagée.
La EventBridge règle du compte créateur capture l'
DeregisterImage
événementModifyImageAttribute
ou associé à l'remove
action et lance la fonction Lambda.La fonction Lambda vérifie la table DynamoDB pour déterminer si l'AMI est utilisée dans l'un des comptes consommateurs. Si aucune instance IDs ou modèle de lancement n'est IDs associé à l'AMI dans le
Mapping
tableau, le processus est terminé.Si une instance IDs ou un modèle IDs de lancement est associé à l'AMI dans le
Mapping
tableau, la fonction Lambda utilise Amazon SES pour envoyer une notification par e-mail aux abonnés configurés.
Outils
Services AWS
Amazon DynamoDB est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
Amazon EventBridge est un service de bus d'événements sans serveur qui vous permet de connecter vos applications à des données en temps réel provenant de diverses sources. Par exemple, des AWS Lambda fonctions, des points de terminaison d'invocation HTTP utilisant des destinations d'API ou des bus d'événements dans d'autres. Comptes AWS
AWS Identity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
AWS Lambda est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
Amazon Simple Email Service (Amazon SES) vous permet d'envoyer et de recevoir des e-mails en utilisant vos propres adresses e-mail et domaines.
Autres outils
HashiCorp Terraform
est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud. Python
est un langage de programmation informatique polyvalent.
Référentiel de code
Le code de ce modèle est disponible dans le référentiel GitHub cross-account-ami-monitoring-terraform-samples
Bonnes pratiques
Suivez les meilleures pratiques relatives à l'utilisation des AWS Lambda fonctions.
Suivez les meilleures pratiques en matière de construction AMIs.
Lorsque vous créez le rôle IAM, suivez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections Accorder le moindre privilège et Bonnes pratiques en matière de sécurité dans la documentation IAM.
Configurez la surveillance et les alertes pour les AWS Lambda fonctions. Pour plus d'informations, consultez la section Surveillance et résolution des problèmes des fonctions Lambda.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Créez les profils AWS CLI nommés. | Pour le compte créateur et pour chaque compte client, créez un profil nommé AWS Command Line Interface (AWS CLI). Pour obtenir des instructions, voir Configurer le AWS CLI dans le | DevOps ingénieur |
Pour cloner le référentiel. | Entrez la commande suivante. Cela clone le référentiel cross-account-ami-monitoring-terraform-samples
| DevOps ingénieur |
Mettez à jour le fichier provider.tf. |
Pour plus d'informations sur la configuration des fournisseurs, consultez la section Configurations de fournisseurs multiples | DevOps ingénieur |
Mettez à jour le fichier terraform.tfvars. |
| DevOps ingénieur |
Mettez à jour le fichier main.tf. | Effectuez ces étapes uniquement si vous déployez cette solution sur plusieurs comptes client. Si vous déployez cette solution sur un seul compte client, aucune modification de ce fichier n'est nécessaire.
| DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Déployez la solution. | Dans la CLI Terraform, entrez les commandes suivantes pour déployer les AWS ressources dans les comptes de créateur et de consommateur :
| DevOps ingénieur |
Vérifiez l'identité de l'adresse e-mail. | Lorsque vous avez déployé le plan Terraform, Terraform a créé une identité d'adresse e-mail pour chaque compte client dans Amazon SES. Avant que les notifications puissent être envoyées à cette adresse e-mail, vous devez vérifier l'adresse e-mail. Pour obtenir des instructions, consultez Vérifier l'identité d'une adresse e-mail dans la documentation Amazon SES. | AWS général |
Tâche | Description | Compétences requises |
---|---|---|
Validez le déploiement dans le compte du créateur. |
| DevOps ingénieur |
Validez le déploiement dans le compte client. |
| DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Créez une AMI dans le compte du créateur. |
| DevOps ingénieur |
Utilisez l'AMI dans le compte client. | Dans le compte client, utilisez l'AMI partagée pour créer une EC2 instance Amazon ou un modèle de lancement. Pour obtenir des instructions, consultez How do I launch an Amazon EC2 instance from a custom AMI | DevOps ingénieur |
Validez la surveillance et les alertes. |
| DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Supprimez les ressources. |
| DevOps ingénieur |
Résolution des problèmes
Problème | Solution |
---|---|
Je n'ai pas reçu d'alerte par e-mail. | Il peut y avoir plusieurs raisons pour lesquelles l'e-mail d'Amazon SES n'a pas été envoyé. Vérifiez les éléments suivants :
|
Ressources connexes
AWS documentation
Création de fonctions Lambda avec Python (documentation Lambda)
Création d'une AMI ( EC2 documentation Amazon)
Partager une AMI avec un utilisateur spécifique Comptes AWS ( EC2 documentation Amazon)
Désenregistrer votre AMI (documentation Amazon EC2 )
Documentation Terraform