Automatisez les allocations d'adresses IPv4 CIDR IPAM d'Amazon VPC pour les nouveaux utilisateurs en utilisant AFT Comptes AWS - 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.

Automatisez les allocations d'adresses IPv4 CIDR IPAM d'Amazon VPC pour les nouveaux utilisateurs en utilisant AFT Comptes AWS

Kien Pham et Alex Pazik, Amazon Web Services

Résumé

Ce modèle montre comment automatiser les allocations IPv4 CIDR d'Amazon VPC IP Address Manager (IPAM) pour les nouveaux utilisateurs en utilisant Comptes AWS AWS Control Tower Account Factory for Terraform (AFT). Cela se fait à l'aide d'une personnalisation au niveau du compte qui alloue un bloc IPv4 CIDR d'IPAM à un nouveau cloud privé virtuel (VPC) à l'aide du module. aft-account-customizations

Avec IPAM, vous pouvez organiser, attribuer, surveiller et auditer les adresses IP à grande échelle, ce qui vous permet de planifier, de suivre et de surveiller facilement les adresses IP pour vos charges de AWS travail. Vous pouvez créer un pool IPAM et IPAM à utiliser pour allouer un bloc IPv4 CIDR à un nouveau VPC pendant le processus de vente du compte.

Conditions préalables et limitations

Conditions préalables

Limites

Versions du produit

  • AWS Control Tower version 3.0 ou ultérieure de la zone de landing zone, antérieure à la version 4.0

  • AFT version 1.13.0 ou ultérieure, antérieure à la version 2.0.0

  • Terraform OSS version 1.2.0 ou ultérieure, antérieure à la version 2.0.0

  • Terraform AWS Provider (terraform-provider-aws) version 5.11.0 ou ultérieure, antérieure à la version 6.0.0

  • Module Terraform pour IPAM (aws-ia/ipam/aws) version 2.1.0 ou ultérieure

Architecture

Le schéma suivant montre le flux de travail et les composants de ce modèle.

Flux de travail pour créer une allocation d'adresse CIDR IPAM IPv4 Amazon VPC.

Le flux de travail comprend les tâches principales suivantes :

  1. Déclencher des modifications — Les modifications apportées à la personnalisation de Terraform et d'IPAM sont validées dans le GitHub référentiel et transmises. Cette tâche déclenche automatiquement le AWS CodeBuild pipeline.

  2. Automatiser la construction : plusieurs projets de CodeBuild construction se déclenchent dans le cadre de ce processus AWS Step Functions.

  3. Appliquer la personnalisation — Step Functions se coordonne CodeBuild pour planifier et appliquer les modifications apportées à Terraform. Cette tâche utilise le module AFT Terraform pour coordonner l'attribution de l'adresse IP du pool IPAM au AWS compte vendu.

Outils

Services 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 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 Control Towerorchestre les capacités de plusieurs autres Services AWS, notamment AWS Organizations AWS Service Catalog, et AWS IAM Identity Center. Il peut vous aider à configurer et à gérer un environnement AWS multi-comptes, conformément aux meilleures pratiques prescriptives.

  • Amazon DynamoDB est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.

  • 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.

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

  • AWS Service Catalogvous permet de gérer de manière centralisée les catalogues de services informatiques approuvés. AWS Les utilisateurs finaux peuvent déployer rapidement uniquement les services informatiques approuvés dont ils ont besoin, en respectant les contraintes définies par votre organisation.

  • AWS Step Functionsest un service d'orchestration sans serveur qui vous aide à combiner des AWS Lambda fonctions et d'autres fonctions Services AWS pour créer des applications critiques pour l'entreprise.

  • Amazon Virtual Private Cloud (Amazon VPC) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS. Amazon VPC IP Address Manager (IPAM) est une fonctionnalité VPC qui vous permet de planifier, suivre et surveiller plus facilement les adresses IP pour vos charges de travail. AWS

Autres outils

  • GitHubest une plateforme de développement que les développeurs peuvent utiliser pour créer, stocker, gérer et partager leur code.

  • HashiCorp Terraform est un outil d'infrastructure en tant que code (IaC) qui vous aide à créer et à gérer des ressources sur site et dans le cloud. 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 du logiciel en tant que service (SaaS).

  • Python est un langage de programmation informatique polyvalent. Vous pouvez l'utiliser pour créer des applications, automatiser des tâches et développer des services sur le AWS Cloud.

Référentiel de code

Bonnes pratiques

Lorsque vous déployez AFT, 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 contributions — Examinez attentivement et comprenez chaque contribution. Une configuration d'entrée correcte est cruciale pour la configuration et le fonctionnement de l'AFT.

  • Mises à jour régulières des modèles : maintenez les modèles à 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

Sous-tâcheDescriptionCompétences requises

Déployez AWS Control Tower.

Configurez et configurez AWS Control Tower dans votre AWS environnement pour garantir une gestion et une gouvernance centralisées de 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

Déployez AWS Control Tower Account Factory pour Terraform (AFT).

Configurez AFT dans un nouveau compte de gestion AFT dédié. Pour plus d'informations, consultez Configuration et lancement de votre AWS Control Tower Account Factory pour Terraform dans la documentation. AWS Control Tower

Administrateur du cloud

Terminez l'AFT après le déploiement.

Une fois le déploiement de l'infrastructure AFT terminé, suivez les étapes décrites dans la section Étapes post-déploiement de la AWS Control Tower documentation.

Administrateur du cloud
Sous-tâcheDescriptionCompétences requises

Déléguez un administrateur IPAM.

Pour déléguer un compte administrateur IPAM dans votre AWS organisation, procédez comme suit :

  1. À l'aide du compte AWS Organizations de gestion, ouvrez la console IPAM à https://console.aws.amazon.com/ipam/l'adresse.

  2. Dans le AWS Management Console, choisissez celui Région AWS dans lequel vous souhaitez travailler avec IPAM.

  3. Dans le panneau de navigation, choisissez Organization settings (Paramètres de l'organisation).

  4. Choisisssez Delegate (Déléguer). L'option Déléguer n'est disponible que si vous vous êtes connecté à la console en tant que compte AWS Organizations de gestion.

  5. Entrez l' Compte AWS ID d'un compte IPAM. L'administrateur de l'IPAM doit être connecté à un compte AWS Organizations membre.

  6. Sélectionnez Enregistrer les modifications.

Vous pouvez également utiliser AWS CLI et exécuter la commande suivante :

aws ec2 enable-ipam-organization-admin-account \ --delegated-admin-account-id 012345678901

Pour plus d'informations, consultez Intégrer l'IPAM aux comptes d'une AWS organisation dans la documentation Amazon VPC enable-ipam-organization-adminet -account dans AWS CLI le Command Reference.

Important

Pour continuer à utiliser IPAM, vous devez vous connecter au compte d'administrateur délégué. Le profil SSO ou les variables d' AWS environnement spécifiés à l'étape suivante doivent vous permettre de vous connecter à ce compte et d'accorder des autorisations pour créer un pool régional et de haut niveau IPAM.

Administrateur AWS

Créez un pool IPAM régional et de haut niveau.

Le GitHub référentiel de ce modèle contient un modèle Terraform que vous pouvez utiliser pour créer votre pool IPAM de haut niveau et votre pool régional. Vous pouvez ensuite partager les pools avec une organisation, une unité organisationnelle (UO) ou une autre ressource en utilisant AWS Resource Access Manager (AWS RAM). Compte AWS

Procédez comme suit :

  1. Exécutez les commandes suivantes :

    # Navigate to the IPAM module cd ipam/terraform # Initiate the IPAM module terraform init
  2. Ouvrez le main.tf fichier, modifiez le code comme décrit dans les commentaires suivants, puis enregistrez le fichier.

    terraform { required_providers { aws = { source = "hashicorp/aws" version = ">= 5.11.0, < 6.0.0" } } } provider "aws" { region = "us-east-1" # Replace with the region to create your top-level pool } module "ipam" { source = "aws-ia/ipam/aws" version = ">= 2.1.0" top_name = "my-top-level-pool" # Replace with your desired top-level pool name top_description = "top-level pool" # Replace with your desired top-level level pool description top_cidr = ["10.0.0.0/16"] # Replace with your desired top-level pool CIDR pool_configurations = { my-regional-pool = { # (Optional) Replace with a different resource name name = "my-regional-pool" # Replace with your desired pool name description = "regional pool" # Replace with your desired pool description cidr = ["10.0.0.0/23"] # Replace with your desired pool CIDR locale = "us-east-1" # Replace with your desired pool locale ram_share_principals = ["arn:aws:organizations::012345678901:ou/ou-ab1c2de345/ou-ab1c2de345"] # Replace with your desired principal ARN to share with via Resource Access Manager (RAM) } } } output "my_regional_pool_id" { description = "The ID of the regional pool" value = module.ipam.pools_level_1["my-regional-pool"].id # Replace with your desired resource name if changed above } # Create the IPAM top-level and resource pool terraform apply

Notez l'ID du pool de ressources qui est affiché après la création. Vous aurez besoin de l'identifiant pour soumettre la demande de compte. Si vous oubliez l'ID du pool de ressources, vous pourrez l'obtenir ultérieurement auprès du AWS Management Console.

Important

Assurez-vous que les piscines créées ne se chevauchent CIDRs pas avec les autres piscines de votre région de travail. Vous pouvez créer un groupe sans CIDR, mais vous ne pourrez pas utiliser le groupe pour les allocations tant que vous n'aurez pas provisionné un CIDR pour celui-ci. Vous pouvez ajouter CIDRs des éléments à un pool à tout moment en le modifiant.

Administrateur AWS
Sous-tâcheDescriptionCompétences requises

Commencez à personnaliser votre compte.

Pour commencer à personnaliser un nouveau compte, exécutez les commandes suivantes depuis votre terminal :

# Default name for customization repo cd aft-account-customizations # Replace with your actual repo name if different than the default mkdir -p APG-AFT-IPAM/terraform # Replace APG-AFT-IPAM with your desired customization name cd APG-AFT-IPAM/terraform
DevOps ingénieur

Créez un aft-providers.jinja fichier.

Ajoutez du code dynamique au aft-providers.jinja fichier qui spécifie le backend et le fournisseur Terraform à utiliser.

Procédez comme suit :

  1. Créez un nouveau aft-providers.jinja fichier dans le terraform répertoire.

  2. Ouvrez le fichier, ajoutez le code suivant et enregistrez-le.

    provider "aws" { region = "{{ provider_region }}" assume_role { role_arn = "{{ target_admin_role_arn }}" } default_tags { tags = { managed_by = "AFT" } } }
DevOps ingénieur

Créez un backend.jinja fichier.

Ajoutez du code dynamique au backend.jinja fichier qui spécifie le backend et le fournisseur Terraform à utiliser.

Procédez comme suit :

  1. Créez un nouveau backend.jinja fichier dans le terraform répertoire.

  2. Ouvrez le fichier, ajoutez le code suivant et enregistrez-le.

    ## Auto generated backend.tf ## ## Updated on: {{ timestamp }} ## {% if tf_distribution_type == "oss" -%} terraform { required_version = ">= {{ tf_version }}" backend "s3" { region = "{{ region }}" bucket = "{{ bucket }}" key = "{{ key }}" dynamodb_table = "{{ dynamodb_table }}" encrypt = "true" kms_key_id = "{{ kms_key_id }}" role_arn = "{{ aft_admin_role_arn }}" } } {% else -%} terraform { backend "remote" { organization = "{{ terraform_org_name }}" workspaces { name = "{{ terraform_workspace_name }}" } } } {% endif %}
DevOps ingénieur

Créez un main.tf fichier.

Créez un nouveau main.tf fichier et ajoutez du code qui définit deux sources de données qui extraient deux valeurs de AWS Systems Manager (aws_ssm) et créent le VPC.

Procédez comme suit :

  1. Créez un nouveau main.tf fichier dans le terraform répertoire.

  2. Ouvrez le fichier, ajoutez le code suivant et enregistrez-le.

    # Define data sources data "aws_ssm_parameter" "vpc_ipam_id" { name = "/aft/account-request/custom-fields/vpc-ipam-id" # Value is defined in the account-request.tf file } data "aws_ssm_parameter" "vpc_netmask" { name = "/aft/account-request/custom-fields/vpc-ipam-netmask" # Value is defined in the account-request.tf file } # Create new VPC resource "aws_vpc" "vpc1" { ipv4_ipam_pool_id = data.aws_ssm_parameter.vpc_ipam_id.value # Retrieved from SSM - this is how we integrate with IPAM ipv4_netmask_length = data.aws_ssm_parameter.vpc_netmask.value # Retrieved from SSM assign_generated_ipv6_cidr_block = var.enable_ipv6 ? true : null ipv6_cidr_block = var.ipv6_cidr ipv6_ipam_pool_id = var.ipv6_ipam_pool_id ipv6_netmask_length = var.ipv6_netmask_length ipv6_cidr_block_network_border_group = var.ipv6_cidr_block_network_border_group instance_tenancy = var.instance_tenancy enable_dns_hostnames = var.enable_dns_hostnames enable_dns_support = var.enable_dns_support enable_network_address_usage_metrics = var.enable_network_address_usage_metrics tags = var.tags lifecycle { ignore_changes = [ tags, # Any changes made to VPC tags after creation will not be overwritten - remove to revert these changes during future 'terraform apply' operations ] } }
DevOps ingénieur

Créez un variables.tf fichier.

Créez un variables.tf fichier qui déclare les variables utilisées par le module Terraform.

Procédez comme suit :

  1. Créez un nouveau variables.tf fichier dans le terraform répertoire.

  2. Ouvrez le fichier, ajoutez le code suivant et enregistrez-le.

    # Copied from AWS VPC module # https://github.com/terraform-aws-modules/terraform-aws-vpc/blob/master/variables.tf variable "name" { description = "Name to be used on all the resources as identifier" type = string default = "" } variable "enable_ipv6" { description = "Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block" type = bool default = false } variable "ipv6_cidr" { description = "(Optional) IPv6 CIDR block to request from an IPAM Pool. Can be set explicitly or derived from IPAM using `ipv6_netmask_length`" type = string default = null } variable "ipv6_ipam_pool_id" { description = "(Optional) IPAM Pool ID for a IPv6 pool. Conflicts with `assign_generated_ipv6_cidr_block`" type = string default = null } variable "ipv6_netmask_length" { description = "(Optional) Netmask length to request from IPAM Pool. Conflicts with `ipv6_cidr_block`. This can be omitted if IPAM pool as a `allocation_default_netmask_length` set. Valid values: `56`" type = number default = null } variable "ipv6_cidr_block_network_border_group" { description = "By default when an IPv6 CIDR is assigned to a VPC a default ipv6_cidr_block_network_border_group will be set to the region of the VPC. This can be changed to restrict advertisement of public addresses to specific Network Border Groups such as LocalZones" type = string default = null } variable "instance_tenancy" { description = "A tenancy option for instances launched into the VPC" type = string default = "default" } variable "enable_dns_hostnames" { description = "Should be true to enable DNS hostnames in the VPC" type = bool default = true } variable "enable_dns_support" { description = "Should be true to enable DNS support in the VPC" type = bool default = true } variable "enable_network_address_usage_metrics" { description = "Determines whether network address usage metrics are enabled for the VPC" type = bool default = null } variable "tags" { description = "A map of tags to add to all resources" type = map(string) default = {} }
DevOps ingénieur

Créez un terraform.tfvars fichier.

Créez un terraform.tfvars fichier qui définit les valeurs des variables transmises au main.tf fichier.

Procédez comme suit :

  1. Créez un nouveau terraform.tfvars fichier dans le terraform répertoire.

  2. Ouvrez le fichier, ajoutez le code suivant et enregistrez-le.

    name = "demo-ipam" enable_ipv6 = false enable_dns_hostnames = true enable_dns_support = true
DevOps ingénieur

Créez un outputs.tf fichier.

Créez un nouveau outputs.tf fichier qui expose certaines valeurs dans CodeBuild.

Procédez comme suit :

  1. Créez un nouveau outputs.tf fichier dans le terraform répertoire.

  2. Ouvrez le fichier, ajoutez le code suivant et enregistrez-le.

    # Output VPC ID and ARN in CodeBuild output "vpc1" { description = "VPC 1 information" value = { id = try(aws_vpc.vpc1.id, null) arn = try(aws_vpc.vpc1.arn, null) } }
DevOps ingénieur

Validez la personnalisation.

Pour valider la nouvelle personnalisation dans le référentiel de personnalisations de compte, exécutez les commandes suivantes :

# Assumes you are still in the /terraform directory cd .. # Skip if you are in the account customization root directory (APG-AFT-IPAM) git add . git commit -m "APG customization" git push origin
DevOps ingénieur

Appliquez la personnalisation.

Ajoutez du code au account-requests.tf fichier qui demande un nouveau compte grâce à la personnalisation du compte nouvellement créé. Les champs personnalisés créent les paramètres Systems Manager dans le compte vendeur qui sont nécessaires pour créer le VPC avec le bon CIDR alloué par l' IPv4 IPAM.

Procédez comme suit :

  1. Depuis votre terminal, accédez au aft-account-request/terraform répertoire.

  2. Ouvrez le account-requests.tf fichier, ajoutez et modifiez le code suivant avec vos valeurs, puis enregistrez le fichier.

    module "sandbox_account_01" { source = "./modules/aft-account-request" control_tower_parameters = { AccountEmail = "john.doe@example.com" AccountName = "sandbox-account-01" # Syntax for top-level OU ManagedOrganizationalUnit = "Sandbox" # Syntax for nested OU # ManagedOrganizationalUnit = "Sandbox (ou-xfe5-a8hb8ml8)" SSOUserEmail = "john.doe@example.com" SSOUserFirstName = "John" SSOUserLastName = "Doe" } account_tags = { "ABC:Owner" = "john.doe@example.com" "ABC:Division" = "ENT" "ABC:Environment" = "Dev" "ABC:CostCenter" = "123456" "ABC:Vended" = "true" "ABC:DivCode" = "102" "ABC:BUCode" = "ABC003" "ABC:Project" = "123456" } change_management_parameters = { change_requested_by = "John Doe" change_reason = "testing the account vending process" } custom_fields = { vpc-ipam-id = "ipam-pool-123456ab789041cd2" vpc-ipam-netmask = "24" } account_customizations_name = "APG-AFT-IPAM" # Do not change this value }
    Important

    Assurez-vous que la vpc-ipam-netmask valeur est inférieure ou égale à l'allocation netmask du pool IPAM et que le pool IPAM IPs est suffisamment disponible pour être alloué au VPC.

  3. Pour valider le nouveau compte dans le référentiel des demandes de compte, utilisez les commandes suivantes :

    git add . git commit -m 'requested APG account' git push origin
AWS DevOps

Validez la personnalisation.

Connectez-vous au nouveau compte et vérifiez que la personnalisation a été correctement appliquée.

Procédez comme suit :

  1. Ouvrez votre page de AWS IAM Identity Center connexion et authentifiez-vous en tant qu'utilisateur indiqué dans le account-requests.tf fichier.

  2. Dans la liste des comptes IAM Identity Center, choisissez le compte que vous avez vendu précédemment et connectez-vous en utilisant le AWS AdministratorAccess rôle.

  3. Accédez à la console VPC, puis sélectionnez Votre. VPCs

  4. Sélectionnez l'ID du VPC que vous venez de créer.

  5. Cliquez sur l'onglet CIDRs. Vous devriez voir un CIDR alloué par iPam IPv4 .

  6. (Facultatif) Connectez-vous à votre compte d'administrateur délégué IPAM et vérifiez que l'allocation est affichée dans la console IPAM.

DevOps ingénieur

Résolution des problèmes

ProblèmeSolution

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 Gestion des identités et des accès AWS (IAM) attachés à Step Functions et aux autres services impliqués dans le déploiement. CodeBuild 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 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 Amazon Simple Storage Service (Amazon S3), les rôles IAM et les fonctions. AWS Lambda Si nécessaire, demandez une augmentation des quotas. Pour plus d’informations, consultez Service AWS Quotas dans les Références générales AWS .

Ressources connexes

Service AWS documentation

Autres ressources