Implémentez Account Factory for Terraform (AFT) en utilisant un pipeline bootstrap - Recommandations AWS

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.

Implémentez Account Factory for Terraform (AFT) en utilisant un pipeline bootstrap

Créée par Vinicius Elias (AWS) et Edgar Costa Filho (AWS)

Référentiel de code : aft-bootstrap-pipeline

Environnement : Production

Technologies : gestion et gouvernance ; infrastructure

Charge de travail : Open source

Services AWS : AWS CodeBuild ; AWS CodeCommit ; AWS CodePipeline ; AWS Control Tower ; AWS Organizations

Récapitulatif

Ce modèle fournit une méthode simple et sécurisée pour déployer AWS Control Tower Account Factory for Terraform (AFT) à partir du compte de gestion de. AWS Organizations Le cœur de la solution est un AWS CloudFormation modèle qui automatise la configuration AFT en créant un pipeline Terraform, qui est structuré de manière à être facilement adaptable pour le déploiement initial ou les mises à jour ultérieures.

La sécurité et l'intégrité des données étant des priorités absolues AWS, le fichier d'état Terraform, qui est un composant essentiel permettant de suivre l'état de l'infrastructure et des configurations gérées, est stocké en toute sécurité dans un bucket Amazon Simple Storage Service (Amazon S3). Ce bucket est configuré avec plusieurs mesures de sécurité, notamment le chiffrement côté serveur et des politiques visant à bloquer l'accès public, afin de garantir que votre état Terraform est protégé contre les accès non autorisés et les violations de données.

Le compte de gestion orchestre et supervise l'ensemble de l'environnement. Il constitue donc une ressource essentielle dans. AWS Control Tower Ce modèle suit les AWS meilleures pratiques et garantit que le processus de déploiement est non seulement efficace, mais également conforme aux normes de sécurité et de gouvernance, afin de proposer un moyen complet, sécurisé et efficace de déployer AFT dans votre AWS environnement.

Pour plus d'informations sur l'AFT, consultez la AWS Control Tower documentation.

Conditions préalables et limitations

Prérequis

  • Un environnement AWS multi-comptes de base avec au minimum les comptes suivants : compte de gestion, compte Log Archive, compte d'audit et un compte supplémentaire pour la gestion de l'AFT.

  • Un AWS Control Tower environnement établi. Le compte de gestion doit être correctement configuré, car le CloudFormation modèle y sera déployé.

  • Les autorisations nécessaires dans le compte AWS de gestion. Vous aurez besoin d'autorisations suffisantes pour créer et gérer des ressources telles que les compartiments S3, AWS Lambda les fonctions, les rôles AWS Identity and Access Management (IAM) et AWS CodePipeline les projets.

  • Connaissance de Terraform. Il est important de comprendre les concepts fondamentaux et le flux de travail de Terraform, car le déploiement implique la génération et la gestion de configurations Terraform.

Limites

  • Tenez compte des quotas de AWS ressources de votre compte. Le déploiement peut créer plusieurs ressources et le fait de rencontrer des quotas de service peut entraver le processus de déploiement.

  • Le modèle est conçu pour des versions spécifiques de Terraform et. Services AWS La mise à niveau ou la modification des versions peuvent nécessiter des modifications du modèle.

Versions du produit

  • Terraform version 1.5.7 ou ultérieure

  • AFT version 1.11.1 ou ultérieure

Architecture

Pile technologique cible

  • AWS CloudFormation

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • Amazon EventBridge

  • IAM

  • AWS Lambda

  • Amazon S3

Architecture cible

Le schéma suivant illustre la mise en œuvre décrite dans ce modèle.

Flux de travail pour implémenter l'AFT à l'aide d'un pipeline bootstrap

Le flux de travail comprend trois tâches principales : créer les ressources, générer le contenu et exécuter le pipeline.

Création des ressources

Le CloudFormation modèle fourni avec ce modèle crée et configure toutes les ressources requises, en fonction des paramètres que vous sélectionnez lorsque vous déployez le modèle. Le modèle crée au minimum les ressources suivantes :

  • Un CodeCommit référentiel pour stocker le code bootstrap AFT Terraform

  • Un compartiment S3 pour stocker le fichier d'état Terraform associé à l'implémentation AFT

  • Un CodePipeline pipeline

  • Deux CodeBuild projets pour implémenter le plan Terraform et appliquer des commandes à différentes étapes du pipeline

  • Rôles CodeBuild et CodePipeline services IAM

  • Un deuxième compartiment S3 pour stocker les artefacts d'exécution du pipeline

  • Une EventBridge règle pour capturer les modifications CodeCommit du référentiel sur la main branche

  • Un autre rôle IAM pour la règle EventBridge

En outre, si vous définissez le Generate AFT Files paramètre dans le CloudFormation modèle surtrue, le modèle crée les ressources supplémentaires suivantes pour générer le contenu :

  • Un compartiment S3 pour stocker le contenu généré et à utiliser comme source du CodeCommit référentiel

  • Une fonction Lambda pour traiter les paramètres donnés et générer le contenu approprié

  • Une fonction IAM pour exécuter la fonction Lambda

  • Une ressource CloudFormation personnalisée qui exécute la fonction Lambda lorsque le modèle est déployé

Génération du contenu

Pour générer les fichiers bootstrap AFT et leur contenu, la solution utilise une fonction Lambda et un compartiment S3. La fonction crée un dossier dans le compartiment, puis crée deux fichiers dans le dossier : main.tf etbackend.tf. La fonction traite également les CloudFormation paramètres fournis et remplit ces fichiers avec du code prédéfini, en remplaçant les valeurs de paramètres respectives.

Pour consulter le code utilisé comme modèle pour générer les fichiers, consultez le GitHub référentiel de la solution. En gros, les fichiers sont générés comme suit.

main.tf

module "aft" { source = "github.com/aws-ia/terraform-aws-control_tower_account_factory?ref=<aft_version>" # Required variables ct_management_account_id = "<ct_management_account_id>" log_archive_account_id = "<log_archive_account_id>" audit_account_id = "<audit_account_id>" aft_management_account_id = "<aft_management_account_id>" ct_home_region = "<ct_home_region>" # Optional variables tf_backend_secondary_region = "<tf_backend_secondary_region>" aft_metrics_reporting = "<false|true>" # AFT Feature flags aft_feature_cloudtrail_data_events = "<false|true>" aft_feature_enterprise_support = "<false|true>" aft_feature_delete_default_vpcs_enabled = "<false|true>" # Terraform variables terraform_version = "<terraform_version>" terraform_distribution = "<terraform_distribution>" }

backend.tf

terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup.tfstate" } }

Lors de la création du CodeCommit référentiel, si vous définissez le Generate AFT Files paramètre surtrue, le modèle utilise le compartiment S3 contenant le contenu généré comme source de la main branche pour remplir automatiquement le référentiel.

Gestion du pipeline

Une fois les ressources créées et les fichiers bootstrap configurés, le pipeline s'exécute. La première étape (Source) récupère le code source depuis la branche principale du référentiel, et la deuxième étape (Build) exécute la commande Terraform plan et génère les résultats à examiner. Au cours de la troisième étape (Approbation), le pipeline attend une action manuelle pour approuver ou rejeter la dernière étape (Déploiement). À la dernière étape, le pipeline exécute la commande Terraform en utilisant le résultat de la apply commande Terraform plan précédente comme entrée. Enfin, un rôle entre comptes et les autorisations du compte de gestion sont utilisés pour créer les ressources AFT dans le compte de gestion AFT.

Outils

Services AWS

  • AWS CloudFormationvous aide à configurer les ressources AWS, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie sur les comptes et les régions AWS.

  • AWS CodeBuildest un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés. 

  • AWS CodeCommitest un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git sans avoir à gérer votre propre système de contrôle de source.

  • AWS CodePipelinevous permet de modéliser et de configurer rapidement les différentes étapes d'une version logicielle et d'automatiser les étapes nécessaires à la publication continue des modifications logicielles.

  • AWS Lambdaest un service informatique qui exécute votre code en réponse à des événements et gère automatiquement les ressources de calcul, fournissant ainsi un moyen rapide de créer une application moderne sans serveur pour la production.

  • AWS SDK for Python (Boto3)est un kit de développement logiciel qui vous aide à intégrer votre application, bibliothèque ou script Python aux services AWS.

Autres outils

  • Terraform est un outil d'infrastructure en tant que code (IaC) qui vous permet de créer, de modifier et de versionner une infrastructure de manière sûre et efficace. Cela inclut les composants de bas niveau tels que les instances de calcul, le stockage et le réseau, et les composants de haut niveau tels que les entrées DNS et les fonctionnalités SaaS.

  • Python est un langage de programmation puissant et facile à apprendre. Il possède des structures de données de haut niveau efficaces et fournit une approche simple mais efficace de la programmation orientée objet.

Référentiel de code

Le code de ce modèle est disponible dans le référentiel de pipeline GitHub AFT bootstrap.

Pour le référentiel AFT officiel, consultez AWS Control Tower Account Factory for Terraform dans. GitHub

Bonnes pratiques

Lorsque vous déployez AFT à l'aide du CloudFormation modèle fourni, nous vous recommandons de suivre les meilleures pratiques pour garantir une mise en œuvre sûre, efficace et réussie. Les principales directives et recommandations pour la mise en œuvre et le fonctionnement de l'AFT sont les suivantes.

  • Examen approfondi des paramètres : examinez attentivement et comprenez chaque paramètre du CloudFormation modèle. La configuration précise des paramètres est cruciale pour une configuration et un fonctionnement corrects de l'AFT.

  • Mises à jour régulières du modèle : maintenez le modèle à jour avec les dernières AWS fonctionnalités et versions de Terraform. Les mises à jour régulières vous aident à tirer parti des nouvelles fonctionnalités et à garantir la sécurité.

  • Gestion des versions : épinglez la version de votre module AFT et utilisez un déploiement AFT distinct pour les tests si possible.

  • Champ d'application : utilisez AFT uniquement pour déployer des garde-fous et des personnalisations d'infrastructure. Ne l'utilisez pas pour déployer votre application.

  • Linting et validation : Le pipeline AFT nécessite une configuration Terraform linted et validée. Exécutez lint, validez et testez avant de transférer la configuration vers les référentiels AFT.

  • Modules Terraform : créez du code Terraform réutilisable sous forme de modules et spécifiez toujours les versions de Terraform et du AWS fournisseur correspondant aux exigences de votre organisation.

Épopées

TâcheDescriptionCompétences requises

Préparez l' AWS Control Tower environnement.

Configurez et configurez AWS Control Tower dans votre AWS environnement pour garantir une gestion et une gouvernance centralisées pour votre Comptes AWS. Pour plus d'informations, consultez la section Mise en route AWS Control Tower dans la AWS Control Tower documentation.

Administrateur du cloud

Lancez le compte de gestion AFT.

Utilisez l' AWS Control Tower Account Factory pour lancer un nouveau compte Compte AWS qui vous servira de compte de gestion AFT. Pour plus d'informations, consultez la section Provisionner des comptes avec AWS Service Catalog Account Factory dans la AWS Control Tower documentation.

Administrateur du cloud
TâcheDescriptionCompétences requises

Lancez le CloudFormation modèle.

Dans cette épopée, vous déployez le CloudFormation modèle fourni avec cette solution pour configurer le pipeline de démarrage AFT dans votre compte AWS de gestion. Le pipeline déploie la solution AFT dans le compte de gestion AFT que vous avez configuré dans l'épopée précédente.

Étape 1 : ouvrir la AWS CloudFormation console

Étape 2 : créer une nouvelle pile

  1. Choisissez de créer une nouvelle pile.

  2. Sélectionnez l'option permettant de télécharger un fichier modèle, puis téléchargez le CloudFormation modèle fourni avec ce modèle.

Étape 3 : configurer les paramètres de la pile

  • Repository Name: Spécifiez le nom du référentiel pour stocker le module de démarrage AFT.

  • Branch Name: Spécifiez la branche du référentiel source.

  • CodeBuild Docker Image: Choisissez le fichier à utiliser comme image de base CodeBuild Docker.

Étape 4 : Décider de la génération du fichier

  • Le Generate AFT Files paramètre détermine s'il faut générer des fichiers de déploiement AFT par défaut. Définissez ce paramètre sur :

    • truepour créer et stocker automatiquement les fichiers de déploiement AFT dans le référentiel spécifié.

    • falsesi vous souhaitez gérer manuellement la création du fichier ou si vous avez déjà les fichiers en place.

    Si vous avez sélectionnéfalse, passez à l'étape 8 ; sinon, suivez d'abord les étapes 5 à 7.

Étape 5 : Renseignez AWS Control Tower les informations du compte AFT

  • Informations d'entrée AWS Control Tower et spécifiques au compte AFT :

    • Log Archive Account ID: ID du compte Log Archive dans AWS Control Tower.

    • Audit Account ID: ID du compte d'audit dans AWS Control Tower.

    • AFT Management Account ID: L'identifiant du compte de gestion AFT que vous avez créé dans le premier épisode épique.

    • AFT Main Regionet AFT Secondary Region : Le principal et le secondaire Régions AWS pour le déploiement de l'AFT.

Étape 6 : Configuration des options AFT

  • Configurez les rapports sur les métriques :

    • AFT Enable Metrics Reporting: Activez ou désactivez le reporting des métriques AFT. Pour plus d'informations, consultez la section Mesures opérationnelles dans la AWS Control Tower documentation.

  • Définissez les options des fonctionnalités AFT :

    • Enable AFT CloudTrail Data Events: Activez CloudTrail les événements de données dans tous les comptes gérés par AFT. Pour plus d'informations, consultez la section sur AWS CloudTrail les événements liés aux données dans la AWS Control Tower documentation.

    • Enable AFT Enterprise Support: Activez le Support d'entreprise dans tous les comptes gérés par AFT. Pour plus d'informations, consultez le plan de support aux AWS entreprises dans la AWS Control Tower documentation.

    • Enable AFT Delete Default VPC: Supprimez tous les VPC du compte de gestion AFT uniquement. Pour plus d'informations, consultez Supprimer le VPC AWS par défaut dans la AWS Control Tower documentation.

Étape 7 : Spécifier les versions

  • AFT Terraform Version: Choisissez la version de Terraform à utiliser dans les pipelines AFT.

  • AFT Version: Définissez la version AFT pour le déploiement. Conservez le paramètre par défaut (latest) pour utiliser la version d'AFT la plus récente.

Étape 8 : Réviser et créer la pile

  • Passez en revue tous les paramètres et réglages. Si tout est en ordre, procédez à la création de la pile.

Étape 9 : Surveiller la création de la pile

  • AWS CloudFormation fournit et configure les ressources que vous avez définies. Surveillez le processus de création de la pile sur la CloudFormation console. Ce processus peut prendre plusieurs minutes.

Étape 10 : vérifier le déploiement

  • Lorsque le statut de la pile indique CREATE_COMPLETE, vérifiez que toutes les ressources ont été correctement créées.

  • Dans la section Sorties, notez la TerraformBackendBucketName valeur.

Administrateur du cloud
TâcheDescriptionCompétences requises

Renseignez le référentiel AFT bootstrap.

(Facultatif) Après avoir déployé le CloudFormation modèle, vous pouvez renseigner ou valider le contenu dans le nouveau référentiel de bootstrap AFT, et tester si le pipeline s'est correctement exécuté.

Si vous définissez le Generate AFT Files paramètre surtrue, passez à l'histoire suivante (validation du pipeline).

Étape 1 : remplir le référentiel

  1. Ouvrez la AWS CodeCommit console et sélectionnez le dépôt nouvellement créé. Si vous avez conservé le nom par défaut, le dépôt sera appeléaft-setup.

  2. Clonez le dépôt sur votre machine locale à l'aide de SSH, HTTPS ou HTTPS (GRC), puis ouvrez-le dans un éditeur.

  3. Créez un dossier appelé terraform et deux fichiers vides à l'intérieur : backend.tf etmain.tf.

  4. Ouvrez le backend.tf fichier et ajoutez cet extrait de code :

    terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup" } }

    Dans le dossier :

    • Remplacez <aft-main-region> par la région AFT principale. Cela devrait correspondre à la région AWS Control Tower principale.

    • <s3-bucket-name>Remplacez-le par le nom du bucket principal Terraform. Vous pouvez le trouver dans le TerraformBackendBucketName résultat généré par le CloudFormation modèle que vous avez déployé précédemment.

  5. Ouvrez le main.tf fichier et utilisez l'un des exemples disponibles dans le référentiel AFT pour déployer AFT. Par exemple, vous pouvez travailler avec votre fournisseur de système de contrôle de version (VCS) préféré (CodeCommit, GitHub, ou Bitbucket) ou personnaliser le VPC AFT. Pour plus d'options d'entrée AFT, consultez le fichier README dans le référentiel AFT.

Étape 2 : valider et appliquer vos modifications

  • Après avoir créé et renseigné le dossier et les fichiers, confirmez vos modifications et téléchargez le code dans le référentiel. Le pipeline démarre automatiquement, passe par les étapes Source et Build, puis attend une action d'approbation avant l'étape Deploy.

Administrateur du cloud

Validez le pipeline d'amorçage AFT.

Étape 1 : Afficher le pipeline

  • Ouvrez la CodePipeline console et vérifiez si le aft-bootstrap-pipeline pipeline a bien démarré. Il doit exécuter un plan Terraform ou attendre une action d'approbation manuelle.

Étape 2 : Approuver les résultats du plan Terraform

  • Vous pouvez consulter les résultats du plan Terraform en consultant les journaux d'exécution de la phase de construction, puis en approuvant ou en rejetant l'exécution lors de la phase d'approbation. Si vous l'approuvez, le pipeline commence à déployer les ressources AFT dans le compte de gestion AFT fourni.

Étape 3 : attendre le déploiement

  • Attendez que le pipeline fonctionne correctement. Cela devrait prendre environ 30 minutes. Les défaillances que vous pourriez rencontrer sont souvent dues aux quotas d'API. Dans ces cas, vous pouvez réexécuter le pipeline pour poursuivre le déploiement.

Étape 4 : Vérifier les ressources créées

  • Accédez au compte de gestion de l'AFT et confirmez que les ressources ont été créées.

Administrateur du cloud

Résolution des problèmes

ProblèmeSolution

La fonction Lambda personnalisée incluse dans le CloudFormation modèle échoue pendant le déploiement.

Consultez les CloudWatch journaux Amazon pour la fonction Lambda afin d'identifier l'erreur. Les journaux fournissent des informations détaillées et peuvent aider à identifier le problème spécifique. Vérifiez que la fonction Lambda dispose des autorisations nécessaires et que les variables d'environnement ont été correctement définies.

Vous rencontrez des échecs lors de la création ou de la gestion des ressources en raison d'autorisations inadéquates.

Passez en revue les rôles et les politiques IAM attachés à la fonction Lambda CodeBuild, ainsi qu'aux autres services impliqués dans le déploiement. Vérifiez qu'ils disposent des autorisations nécessaires. En cas de problème d'autorisation, ajustez les politiques IAM pour accorder l'accès requis.

Vous utilisez une version obsolète du CloudFormation modèle avec des versions plus récentes Services AWS ou des versions de Terraform.

Mettez régulièrement à jour le CloudFormation modèle pour qu'il soit compatible avec les dernières versions AWS et avec Terraform. Consultez les notes de publication ou la documentation pour connaître les modifications ou les exigences spécifiques à la version.

Vous atteignez Service AWS les quotas lors du déploiement.

Avant de déployer le pipeline, vérifiez les Service AWS quotas pour les ressources telles que les compartiments S3, les rôles IAM et les fonctions Lambda. Demandez des augmentations si nécessaire. Pour plus d'informations, consultez les Service AWS quotas sur le AWS site Web.

Vous rencontrez des erreurs en raison de paramètres d'entrée incorrects dans le CloudFormation modèle.

Vérifiez que tous les paramètres d'entrée ne contiennent pas de fautes de frappe ou de valeurs incorrectes. Vérifiez que les identifiants des ressources, tels que les numéros de compte et les noms de région, sont exacts.

Ressources connexes

Pour implémenter ce modèle avec succès, consultez les ressources suivantes. Ces ressources fournissent des informations et des conseils supplémentaires qui peuvent être inestimables pour configurer et gérer l'AFT en utilisant AWS CloudFormation.

AWSdocumentation :

Politiques et meilleures pratiques en matière d'IAM :

Terraform sur : AWS

Service AWS quotas :

  • Service AWS quotas fournit des informations sur la façon de consulter Service AWS les quotas et de demander des augmentations.