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)
Dépôt de code : cross-account-ami-auditing-terraform-samples | Environnement : PoC ou pilote | Technologies : gestion et gouvernance DevOps ; sans serveur ; opérations |
Services AWS : Amazon DynamoDB ; AWS Lambda ; Amazon EventBridge |
Récapitulatif
Les Amazon Machine Images (AMI) 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 des AMI 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 situés dans la même région AWS, appelés comptes consommateurs dans ce modèle. La gestion des AMI à partir d'un seul compte assure l'évolutivité et simplifie la gouvernance. Dans les comptes clients, vous pouvez faire référence à 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 services AWS qui font référence à l'AMI dans les comptes clients 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 dans plusieurs 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 des services AWS sans serveur, tels qu'Amazon EventBridge, Amazon DynamoDB, AWS Lambda 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 AWS actifs ou plus : un compte de créateur et un ou plusieurs comptes de consommateur
Une ou plusieurs AMI partagées entre le compte du créateur et le compte du consommateur
Terraform CLI, installée (documentation
Terraform) Fournisseur AWS Terraform, configuré
(documentation Terraform) (Facultatif, mais recommandé) Backend Terraform, configuré
(documentation Terraform) Git, installé
Limites
Ce modèle surveille les AMI qui ont été partagées avec des comptes spécifiques à l'aide de l'identifiant du compte. Ce modèle ne surveille pas les AMI partagées avec une organisation à l'aide de l'ID de l'organisation.
Les AMI ne peuvent être partagées qu'avec des comptes situés dans la même région AWS. Ce modèle surveille les AMI au sein d'une seule région cible. Pour surveiller l'utilisation des AMI dans plusieurs régions, vous déployez cette solution dans chaque région.
Ce modèle ne surveille aucune AMI partagée avant le déploiement de cette solution. Si vous souhaitez surveiller les AMI précédemment partagées, vous pouvez annuler le partage de l'AMI, puis la 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
Rôle dans AWS Identity and Access Management (IAM)
Fonctions AWS Lambda
Amazon SES
Architecture cible
![Architecture permettant de surveiller l'utilisation des AMI partagées et d'avertir les utilisateurs si l'AMI n'est pas partagée ou est désenregistrée](images/pattern-img/2d709249-0c68-47d7-be5d-46e8a73071ed/images/8c48c4dd-d681-4c32-9ba8-8f5ad2d66f64.png)
Le schéma suivant illustre le flux de travail suivant :
Une AMI du compte créateur est partagée avec un compte client de la même région AWS.
Lorsque l'AMI est partagée, une EventBridge règle Amazon 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 du compte client utilise l'AMI partagée pour lancer une instance Amazon EC2 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 lance 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 créateur et met à jour la table DynamoDB dans le compte 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 non 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 aucun ID d'instance ou ID de modèle de lancement n'est associé à l'AMI dans le
Mapping
tableau, le processus est terminé.Si des identifiants d'instance ou de modèle de lancement sont associés à 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, les fonctions AWS Lambda, les points de terminaison d'appel HTTP utilisant des destinations d'API ou les 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 permet d'exécuter du code sans avoir à provisionner ou à 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 open source d'infrastructure sous forme de code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources 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 pour utiliser les fonctions AWS Lambda.
Suivez les meilleures pratiques pour créer des AMI.
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 fonctions AWS Lambda. 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 nommés de l'interface de ligne de commande AWS. | Pour le compte créateur et chaque compte client, créez un profil nommé AWS Command Line Interface (AWS CLI). Pour obtenir des instructions, consultez la section Configuration de l'interface de ligne de commande AWS | 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 ressources AWS 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 adresse e-mail d'identité 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 instance EC2 ou un modèle de lancement. Pour obtenir des instructions, consultez Comment lancer une instance EC2 depuis une AMI personnalisée | 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. | Plusieurs raisons peuvent expliquer pourquoi l'e-mail d'Amazon SES n'a pas été envoyé. Vérifiez les éléments suivants :
|
Ressources connexes
Documentation AWS
Création de fonctions Lambda avec Python (documentation Lambda)
Création d'une AMI (documentation Amazon EC2)
Partager une AMI avec des comptes AWS spécifiques (documentation Amazon EC2)
Désenregistrer votre AMI (documentation Amazon EC2)
Documentation Terraform