Automatizza le allocazioni IPv4 IPAM CIDR di Amazon VPC per nuove applicazioni utilizzando AFT Account AWS - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Automatizza le allocazioni IPv4 IPAM CIDR di Amazon VPC per nuove applicazioni utilizzando AFT Account AWS

Kien Pham e Alex Pazik, Amazon Web Services

Riepilogo

Questo modello mostra come automatizzare le allocazioni CIDR di Amazon VPC IP Address Manager (IPAM IPv4 ) per i nuovi utenti Account AWS utilizzando Account AWS Control Tower Factory for Terraform (AFT). Questa operazione viene eseguita utilizzando una personalizzazione a livello di account che alloca un blocco IPv4 CIDR da IPAM a un nuovo cloud privato virtuale (VPC) utilizzando il modulo. aft-account-customizations

Con IPAM, puoi organizzare, assegnare, monitorare e controllare gli indirizzi IP su larga scala, consentendoti di pianificare, tracciare e monitorare facilmente gli indirizzi IP per i tuoi carichi di lavoro. AWS È possibile creare un pool IPAM e IPAM da utilizzare per allocare un blocco IPv4 CIDR a un nuovo VPC durante il processo di vendita dell'account.

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

Versioni del prodotto

  • AWS Control Tower landing zone versione 3.0 o successiva, precedente alla versione 4.0

  • AFT versione 1.13.0 o successiva, precedente alla versione 2.0.0

  • Terraform OSS versione 1.2.0 o successiva, precedente alla versione 2.0.0

  • Terraform AWS Provider (terraform-provider-aws) versione 5.11.0 o successiva, precedente alla versione 6.0.0

  • Modulo Terraform per IPAM () versione 2.1.0 o successiva aws-ia/ipam/aws

Architecture

Il diagramma seguente mostra il flusso di lavoro e i componenti di questo modello.

Flusso di lavoro per creare l'allocazione IPAM IPv4 CIDR di Amazon VPC.

Il flusso di lavoro è costituito dalle seguenti attività principali:

  1. Attiva modifiche: le modifiche a Terraform e alla personalizzazione IPAM vengono salvate nel GitHub repository e inviate. Questa attività attiva automaticamente la pipeline. AWS CodeBuild

  2. Automatizza la compilazione: all'interno CodeBuild, vengono attivati più progetti di compilazione. AWS Step Functions

  3. Applica personalizzazione: Step Functions si coordina con CodeBuild per pianificare e applicare le modifiche Terraform. Questa attività utilizza il modulo AFT Terraform per coordinare l'assegnazione dell'IP del pool IPAM all'account fornito. AWS

Tools (Strumenti)

Servizi AWS

  • AWS CodeBuildè un servizio di compilazione completamente gestito che consente di compilare il codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.

  • AWS CodePipelineti aiuta a modellare e configurare rapidamente le diverse fasi di una versione del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.

  • AWS Control Towerorchestra le funzionalità di molti altri Servizi AWS, tra cui AWS Organizations, AWS Service Catalog e. AWS IAM Identity Center Può aiutarti a configurare e gestire un ambiente con AWS più account, seguendo le migliori pratiche prescrittive.

  • Amazon DynamoDB è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.

  • AWS Lambda è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

  • AWS SDK per Python (Boto3)è un kit di sviluppo software che ti aiuta a integrare la tua applicazione, libreria o script Python con. Servizi AWS

  • AWS Service Catalogconsente di gestire centralmente i cataloghi dei servizi IT approvati. AWS Gli utenti finali possono distribuire rapidamente soltanto i servizi IT approvati di cui hanno bisogno, in accordo con i vincoli stabiliti dall'organizzazione.

  • AWS Step Functionsè un servizio di orchestrazione senza server che consente di combinare AWS Lambda funzioni e altro Servizi AWS per creare applicazioni aziendali critiche.

  • Amazon Virtual Private Cloud (Amazon VPC) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS. Amazon VPC IP Address Manager (IPAM) è una funzionalità VPC che semplifica la pianificazione, il monitoraggio e il monitoraggio degli indirizzi IP per i carichi di lavoro. AWS

Altri strumenti

  • GitHubè una piattaforma di sviluppo che gli sviluppatori possono utilizzare per creare, archiviare, gestire e condividere il proprio codice.

  • HashiCorp Terraform è uno strumento Infrastructure as Code (IaC) che ti aiuta a creare e gestire risorse cloud e locali. Ciò include componenti di basso livello come istanze di calcolo, storage e rete e componenti di alto livello come voci DNS e funzionalità software a service (SaaS).

  • Python è un linguaggio di programmazione per computer generico. È possibile utilizzarlo per creare applicazioni, automatizzare attività e sviluppare servizi su. Cloud AWS

Archivio di codici

Best practice

Quando si implementa AFT, si consiglia di seguire le migliori pratiche per garantire un'implementazione sicura, efficiente e di successo. Le linee guida e le raccomandazioni chiave per l'implementazione e il funzionamento di AFT includono quanto segue:

  • Revisione approfondita degli input: esamina e comprendi attentamente ogni input. La corretta configurazione degli input è fondamentale per la configurazione e il funzionamento di AFT.

  • Aggiornamenti regolari dei modelli: mantieni i modelli aggiornati con le ultime AWS funzionalità e le versioni di Terraform. Gli aggiornamenti regolari ti aiutano a sfruttare le nuove funzionalità e a mantenere la sicurezza.

  • Controllo delle versioni: aggiungi la versione del modulo AFT e, se possibile, utilizza una distribuzione AFT separata per i test.

  • Ambito: utilizzate AFT solo per implementare protezioni e personalizzazioni dell'infrastruttura. Non utilizzarlo per distribuire l'applicazione.

  • Linting e convalida: la pipeline AFT richiede una configurazione Terraform linkata e convalidata. Esegui lint, convalida e testa prima di inviare la configurazione ai repository AFT.

  • Moduli Terraform: crea codice Terraform riutilizzabile come moduli e specifica sempre le versioni di Terraform e del AWS provider in base ai requisiti della tua organizzazione.

Epiche

OperazioneDescriptionCompetenze richieste

Implementazione. AWS Control Tower

Imposta e configura AWS Control Tower nel tuo AWS ambiente per garantire la gestione e la governance centralizzate del tuo. Account AWS Per ulteriori informazioni, consulta la sezione Guida introduttiva AWS Control Tower nella AWS Control Tower documentazione.

Amministratore cloud

Implementa AWS Control Tower Account Factory for Terraform (AFT).

Configura AFT in un nuovo account di gestione AFT dedicato. Per ulteriori informazioni, vedi Configurare e avviare AWS Control Tower Account Factory for Terraform nella AWS Control Tower documentazione.

Amministratore cloud

AFT completo dopo l'implementazione.

Una volta completata la distribuzione dell'infrastruttura AFT, completa i passaggi indicati nelle fasi successive alla distribuzione nella AWS Control Tower documentazione.

Amministratore cloud
OperazioneDescriptionCompetenze richieste

Delegare un amministratore IPAM.

Per delegare un account amministratore IPAM nella tua AWS organizzazione, utilizza i seguenti passaggi:

  1. Utilizzando l'account di AWS Organizations gestione, apri la console IPAM all'indirizzo. https://console.aws.amazon.com/ipam/

  2. In Console di gestione AWS, scegli quello Regione AWS in cui desideri lavorare con IPAM.

  3. Nel riquadro di navigazione, seleziona Impostazioni organizzazione.

  4. Scegli Delega. L'opzione Delega è disponibile solo se hai effettuato l'accesso alla console come account di AWS Organizations gestione.

  5. Inserisci l' Account AWS ID di un account IPAM. L'amministratore IPAM deve avere un account AWS Organizations membro.

  6. Scegli Save changes (Salva modifiche).

In alternativa, è possibile utilizzare AWS CLI ed eseguire il seguente comando:

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

Per ulteriori informazioni, consulta Integrare IPAM con gli account di un' AWS organizzazione nella documentazione di Amazon VPC enable-ipam-organization-admine -account nel AWS CLI Command Reference.

Importante

Per continuare a utilizzare IPAM, devi accedere all'account amministratore delegato. Il profilo SSO o le variabili di AWS ambiente specificate nel passaggio successivo devono consentire all'utente di accedere a tale account e concedere le autorizzazioni per creare un pool IPAM di primo livello e regionale.

Amministratore AWS

Crea un pool IPAM di primo livello e regionale.

Il GitHub repository di questo pattern contiene un modello Terraform che puoi utilizzare per creare il tuo pool IPAM di primo livello e il pool regionale. Quindi puoi condividere i pool con un'organizzazione, un'unità organizzativa (OU) o un'altra risorsa utilizzando (). Account AWS AWS Resource Access Manager AWS RAM

Utilizza le fasi seguenti:

  1. Esegui i comandi seguenti:

    # Navigate to the IPAM module cd ipam/terraform # Initiate the IPAM module terraform init
  2. Aprite il main.tf file, modificate il codice come descritto nei commenti seguenti e salvate il file.

    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

Prendi nota dell'ID del pool di risorse che viene emesso dopo la creazione. L'ID ti servirà al momento dell'invio della richiesta di account. Se si dimentica l'ID del pool di risorse, è possibile recuperarlo in un secondo momento da. Console di gestione AWS

Importante

Assicurati che i pool creati CIDRs non si sovrappongano a nessun altro pool nella tua regione di lavoro. Puoi creare un pool senza CIDR, ma non sarai in grado di utilizzare il pool per le assegnazioni fino a quando non avrai eseguito il provisioning di un CIDR. Puoi aggiungere qualcosa CIDRs a un pool in qualsiasi momento modificando il pool.

Amministratore AWS
OperazioneDescriptionCompetenze richieste

Inizia a creare la personalizzazione dell'account.

Per iniziare una nuova personalizzazione dell'account, esegui i seguenti comandi dal tuo terminale:

# 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 ingegnere

Crea aft-providers.jinja file.

Aggiungi codice dinamico al aft-providers.jinja file che specifica il backend e il provider Terraform da utilizzare.

Utilizza le fasi seguenti:

  1. Crea un nuovo aft-providers.jinja file nella directory. terraform

  2. Apri il file, aggiungi il codice seguente e salva il file.

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

Crea backend.jinja file.

Aggiungi codice dinamico al backend.jinja file che specifica il backend e il provider Terraform da utilizzare.

Utilizza le fasi seguenti:

  1. Crea un nuovo backend.jinja file nella directory. terraform

  2. Apri il file, aggiungi il codice seguente e salva il file.

    ## 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 ingegnere

Crea main.tf file.

Crea un nuovo main.tf file e aggiungi codice che definisce due fonti di dati che recuperano due valori da AWS Systems Manager (aws_ssm) e crea il VPC.

Utilizza le fasi seguenti:

  1. Crea un nuovo main.tf file nella directory. terraform

  2. Apri il file, aggiungi il codice seguente e salva il file.

    # 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 ingegnere

Crea variables.tf file.

Crea un variables.tf file che dichiari le variabili utilizzate dal modulo Terraform.

Utilizza le fasi seguenti:

  1. Crea un nuovo variables.tf file nella directory. terraform

  2. Apri il file, aggiungi il codice seguente e salva il file.

    # 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 ingegnere

Crea terraform.tfvars file.

Crea un terraform.tfvars file che definisca i valori delle variabili che vengono passate al main.tf file.

Utilizza le fasi seguenti:

  1. Crea un nuovo terraform.tfvars file nella terraform directory.

  2. Apri il file, aggiungi il codice seguente e salva il file.

    name = "demo-ipam" enable_ipv6 = false enable_dns_hostnames = true enable_dns_support = true
DevOps ingegnere

Crea outputs.tf file.

Crea un nuovo outputs.tf file che esponga alcuni valori in CodeBuild.

Utilizza le fasi seguenti:

  1. Crea un nuovo outputs.tf file nella terraform directory.

  2. Apri il file, aggiungi il codice seguente e salva il file.

    # 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 ingegnere

Effettua la personalizzazione.

Per salvare la nuova personalizzazione nell'archivio delle personalizzazioni dell'account, esegui i seguenti comandi:

# 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 ingegnere

Applica la personalizzazione.

Aggiungi il codice al account-requests.tf file che richiede un nuovo account con la personalizzazione dell'account appena creato. I campi personalizzati creano i parametri di Systems Manager nell'account fornito necessari per creare il VPC con il CIDR allocato IPv4 IPAM corretto.

Utilizza le fasi seguenti:

  1. Dal tuo terminale, accedi alla directory. aft-account-request/terraform

  2. Apri il account-requests.tf file, aggiungi e modifica il codice seguente con i tuoi valori e salva il file.

    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 }
    Importante

    Assicurati che il vpc-ipam-netmask valore sia inferiore o uguale all'allocazione netmask del pool IPAM e che nel pool IPAM sia IPs disponibile una quantità sufficiente per l'allocazione al VPC.

  3. Per salvare il nuovo account nell'archivio delle richieste di account, utilizza i seguenti comandi:

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

Convalida la personalizzazione.

Accedi all'account appena venduto e verifica che la personalizzazione sia stata applicata correttamente.

Utilizza le fasi seguenti:

  1. Apri la pagina di AWS IAM Identity Center accesso ed esegui l'autenticazione come utente specificato nel file. account-requests.tf

  2. Dall'elenco degli account IAM Identity Center, scegli l'account che hai venduto in precedenza e accedi utilizzando il ruolo. AWS AdministratorAccess

  3. Vai alla console VPC e seleziona Your. VPCs

  4. Seleziona l'ID VPC del VPC che hai appena creato.

  5. Scegli la scheda CIDRs. Dovresti vedere un CIDR allocato tramite IPAM IPv4 .

  6. (Facoltativo) Accedi al tuo account amministratore delegato IPAM e verifica che l'allocazione sia mostrata nella console IPAM.

DevOps ingegnere

risoluzione dei problemi

ProblemaSoluzione

Si verificano errori nella creazione o nella gestione delle risorse causati da autorizzazioni inadeguate.

Esamina i ruoli e le policy AWS Identity and Access Management (IAM) associati a Step Functions e agli altri servizi coinvolti nella distribuzione. CodeBuild Verifica che dispongano delle autorizzazioni necessarie. In caso di problemi di autorizzazione, modifica le politiche IAM per concedere l'accesso richiesto.

Le Servizio AWS quote vengono raggiunte durante la distribuzione.

Prima di distribuire la pipeline, controlla le Servizio AWS quote per risorse come i bucket Amazon Simple Storage Service (Amazon S3), i ruoli e le funzioni IAM. AWS Lambda Se necessario, richiedi un aumento delle quote. Per ulteriori informazioni, consulta Servizio AWS Quotas nella documentazione generale di riferimento di AWS .

Risorse correlate

Servizio AWS documentazione

Altre risorse