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.
Créez un pipeline pour les images de conteneurs renforcées à l'aide d'EC2Image Builder et de Terraform
Créé par Mike Saintcross (AWS) et Andrew Ranes () AWS
Référentiel de code : Terraform EC2 Image Builder Container | Environnement : Production | Source : Packer, Chef ou Pure Ansible |
Cible : EC2 Image Builder | Type R : Ré-architecte | Charge de travail : Open source |
Technologies : sécurité, identité, conformité ; DevOps | AWSservices : Amazon EC2 Container Registry ; EC2 Image Builder |
Récapitulatif
Ce modèle crée un pipeline EC2 Image Builder qui produit une image de conteneur de base Amazon Linux 2
La version inclut deux EventBridge règles Amazon. Une règle lance le pipeline d'images du conteneur lorsque le résultat d'Amazon Inspector est élevé ou critique, de sorte que les images non sécurisées sont remplacées. Cette règle nécessite l'activation de l'analyse améliorée Amazon Inspector et Amazon Elastic Container Registry (AmazonECR). L'autre règle envoie des notifications à une file d'attente Amazon Simple Queue Service (AmazonSQS) après un transfert d'image réussi vers le ECR référentiel Amazon, afin de vous aider à utiliser les dernières images de conteneur.
Remarque : le support d'Amazon Linux 2 touche à sa fin. Pour plus d'informations, consultez Amazon Linux 2 FAQs
Conditions préalables et limitations
Prérequis
Un AWScompte
dans lequel vous pouvez déployer l'infrastructure. AWSInterface de ligne de commande (AWSCLI) installée pour définir vos AWS informations d'identification pour le déploiement local.
Terraform a été téléchargé
et configuré en suivant les instructions de la documentation Terraform. Git
(si vous effectuez le provisionnement à partir d'une machine locale). Rôle au sein du AWS compte que vous pouvez utiliser pour créer des AWS ressources.
Toutes les variables définies dans le fichier .tfvars.
Vous pouvez également définir toutes les variables lorsque vous appliquez la configuration Terraform.
Limites
Cette solution crée une infrastructure Amazon Virtual Private Cloud (AmazonVPC) qui inclut une NATpasserelle et une passerelle Internet pour la connectivité Internet à partir de son sous-réseau privé. Vous ne pouvez pas utiliser de VPCpoints de terminaison, car le processus d'amorçage de AWS Task Orchestrator et Executor (AWSTOE
) installe la AWS CLI version 2 depuis Internet.
Versions du produit
Amazon Linux 2
AWSCLIversion 1.1 ou ultérieure
Architecture
Pile technologique cible
Ce modèle crée 43 ressources, dont :
Deux compartiments Amazon Simple Storage Service (Amazon S3) : un pour les fichiers des composants du pipeline et un pour l'accès au serveur et les journaux de flux Amazon VPC
Un cloud privé virtuel (VPC) qui contient un sous-réseau public, un sous-réseau privé, des tables de routage, une NAT passerelle et une passerelle Internet
Un pipeline, une recette et des composants d'EC2Image Builder
Une image de conteneur
Une AWS clé du service de gestion des clés (AWSKMS) pour le chiffrement des images
Une file d'attente SQS
Trois rôles : un pour exécuter le pipeline EC2 Image Builder, un profil d'instance pour EC2 Image Builder et un pour les EventBridge règles
Deux EventBridge règles
Structure du module Terraform
Pour le code source, consultez le GitHub référentiel Terraform EC2 Image Builder Container Hardening
├── components.tf ├── config.tf ├── dist-config.tf ├── files │ └──assumption-policy.json ├── hardening-pipeline.tfvars ├── image.tf ├── infr-config.tf ├── infra-network-config.tf ├── kms-key.tf ├── main.tf ├── outputs.tf ├── pipeline.tf ├── recipes.tf ├── roles.tf ├── sec-groups.tf ├── trigger-build.tf └── variables.tf
Détails du module
components.tf
contient une ressource de téléchargement Amazon S3 pour télécharger le contenu du/files
répertoire. Vous pouvez également y ajouter des YAML fichiers de composants personnalisés de manière modulaire./files
contient les.yml
fichiers qui définissent les composants utilisés danscomponents.tf
.image.tf
contient les définitions du système d'exploitation de l'image de base. C'est ici que vous pouvez modifier les définitions d'un autre pipeline d'images de base.infr-config.tf
etdist-config.tf
contiennent les ressources nécessaires à l'AWSinfrastructure minimale nécessaire pour créer et diffuser l'image.infra-network-config.tf
contient l'VPCinfrastructure minimale dans laquelle déployer l'image du conteneur.hardening-pipeline.tfvars
contient les variables Terraform à utiliser au moment de l'application.pipeline.tf
crée et gère un pipeline EC2 Image Builder dans Terraform.recipes.tf
est l'endroit où vous pouvez spécifier différents mélanges de composants pour créer des recettes de conteneurs.roles.tf
contient les définitions de la politique AWS Identity and Access Management (IAM) pour le profil d'instance Amazon Elastic Compute Cloud (AmazonEC2) et le rôle de déploiement du pipeline.trigger-build.tf
contient les EventBridge règles et les ressources de SQS file d'attente.
Architecture cible
![Architecture et flux de travail pour créer un pipeline pour les images de conteneurs renforcées](images/pattern-img/4b16bdfa-4f34-41e9-a69a-d023253c8585/images/23443eca-132f-46ac-98bd-32a9e9359a77.png)
Le diagramme illustre le flux de travail suivant :
EC2Image Builder crée une image de conteneur en utilisant la recette définie, qui installe les mises à jour du système d'exploitation et applique le RHEL Medium STIG à l'image de base Amazon Linux 2.
L'image renforcée est publiée dans un ECR registre Amazon privé, et une EventBridge règle envoie un message à une SQS file d'attente lorsque l'image a été publiée avec succès.
Si Amazon Inspector est configuré pour une analyse améliorée, il analyse le ECR registre Amazon.
Si Amazon Inspector génère un résultat de gravité critique ou élevé pour l'image, une EventBridge règle déclenche la réexécution du pipeline EC2 Image Builder et la publication d'une image récemment durcie.
Automatisation et mise à l'échelle
Ce modèle décrit comment provisionner l'infrastructure et créer le pipeline sur votre ordinateur. Cependant, il est destiné à être utilisé à grande échelle. Au lieu de déployer les modules Terraform localement, vous pouvez les utiliser dans un environnement multi-comptes, tel qu'un environnement AWSControl Tower with Account Factory pour
Terraform. Dans ce cas, vous devez utiliser un compartiment S3 d'état principal pour gérer les fichiers d'état Terraform au lieu de gérer l'état de configuration localement. Pour une utilisation à grande échelle, déployez la solution sur un compte central, tel qu'un compte Shared Services ou Common Services, à partir d'un modèle de compte Control Tower ou landing zone, et autorisez les comptes clients à accéder au ECR référentiel et à la AWS KMS clé Amazon. Pour plus d'informations sur la configuration, consultez l'article Re:Post Comment autoriser un compte secondaire à envoyer ou à extraire des images dans mon référentiel d'ECRimages Amazon ?
Par exemple, dans un distributeur automatique de comptes ou Account Factory for Terraform, ajoutez des autorisations à chaque ligne de base de compte ou à chaque ligne de base de personnalisation du compte afin de donner accès à ce ECR référentiel Amazon et à cette clé de chiffrement. Une fois le pipeline d'images de conteneur déployé, vous pouvez le modifier à l'aide des fonctionnalités EC2 d'Image Builder, telles que les composants, qui vous aident à intégrer davantage de composants dans la version Docker.
La AWS KMS clé utilisée pour chiffrer l'image du conteneur doit être partagée entre les comptes dans lesquels l'image est destinée à être utilisée.
Vous pouvez ajouter la prise en charge d'autres images en dupliquant l'intégralité du module Terraform et en modifiant les attributs suivants :
recipes.tf
Passez
parent_image = "amazonlinux:latest"
à un autre type d'image.Modifiez
repository_name
pour pointer vers un ECR référentiel Amazon existant. Cela crée un autre pipeline qui déploie un type d'image parent différent dans votre ECR référentiel Amazon existant.
Outils
Outils
Terraform (provisionnement iAC)
Git (en cas de provisionnement local)
AWSCLIversion 1 ou version 2 (en cas de provisionnement local)
Code
Le code de ce modèle se trouve dans le GitHub référentiel Terraform EC2 Image Builder Container Hardening
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Configurez les informations d'identification locales. | Configurez vos informations d'identification AWS temporaires.
| AWS DevOps |
Pour cloner le référentiel. |
| AWS DevOps |
Mettez à jour les variables. | Mettez à jour les variables du
Voici une description de chaque variable :
| AWS DevOps |
Initialisez Terraform. | Après avoir mis à jour les valeurs de vos variables, vous pouvez initialiser le répertoire de configuration Terraform. L'initialisation d'un répertoire de configuration télécharge et installe le AWS fournisseur, qui est défini dans la configuration.
Vous devriez voir un message indiquant que Terraform a été correctement initialisé et identifiant la version du fournisseur qui a été installée. | AWS DevOps |
Déployez l'infrastructure et créez une image de conteneur. | Utilisez la commande suivante pour initialiser, valider et appliquer les modules Terraform à l'environnement en utilisant les variables définies dans votre fichier :
| AWS DevOps |
Personnalisez le conteneur. | Vous pouvez créer une nouvelle version d'une recette de conteneur une fois qu'EC2Image Builder a déployé le pipeline et la recette initiale. Vous pouvez ajouter n'importe lequel des 31 composants disponibles dans EC2 Image Builder pour personnaliser la construction du conteneur. Pour plus d'informations, consultez la section Composants de la section Créer une nouvelle version d'une recette de conteneur dans la documentation EC2 d'Image Builder. | AWSadministrateur |
Tâche | Description | Compétences requises |
---|---|---|
Validez le provisionnement de l'AWSinfrastructure. | Une fois que vous avez terminé avec succès votre première
| AWS DevOps |
Validez les ressources AWS d'infrastructure individuelles. | Pour valider les ressources individuelles qui ont été déployées, si vous approvisionnez localement, vous pouvez exécuter la commande suivante :
Cette commande renvoie une liste de 43 ressources. | AWS DevOps |
Tâche | Description | Compétences requises |
---|---|---|
Supprimez l'image de l'infrastructure et du conteneur. | Lorsque vous avez fini de travailler avec votre configuration Terraform, vous pouvez exécuter la commande suivante pour supprimer des ressources :
| AWS DevOps |
Résolution des problèmes
Problème | Solution |
---|---|
Erreur lors de la validation des informations d'identification du fournisseur | Lorsque vous exécutez la
Cette erreur est due à l'expiration du jeton de sécurité pour les informations d'identification utilisées dans la configuration de votre machine locale. Pour résoudre l'erreur, consultez la section Définir et afficher les paramètres de configuration dans la AWS CLI documentation. |
Ressources connexes
Pipeline de renforcement des conteneurs Terraform EC2 Image Builder
(référentiel) GitHub AWSControl Tower Account Factory pour Terraform
(AWSarticle de blog) État du compartiment S3 du backend
(documentation Terraform) Installation ou mise à jour de la dernière version de AWS CLI (AWSCLIdocumentation)