Automatize as alocações IPv4 IPAM CIDR do Amazon VPC para novos usando o AFT Contas da AWS - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Automatize as alocações IPv4 IPAM CIDR do Amazon VPC para novos usando o AFT Contas da AWS

Kien Pham e Alex Pazik, Amazon Web Services

Resumo

Esse padrão mostra como automatizar as alocações de CIDR do Amazon VPC IP Address Manager (IPAM IPv4 ) para novos Contas da AWS usando o Account AWS Control Tower Factory for Terraform (AFT). Isso é feito usando uma personalização em nível de conta que aloca um bloco IPv4 CIDR do IPAM para uma nova nuvem privada virtual (VPC) usando o módulo. aft-account-customizations

Com o IPAM, você pode organizar, atribuir, monitorar e auditar endereços IP em grande escala, permitindo que você planeje, rastreie e monitore facilmente endereços IP para suas AWS cargas de trabalho. Você pode criar um IPAM e um pool de IPAM para usar na alocação de um bloco IPv4 CIDR para uma nova VPC durante o processo de venda automática da conta.

Pré-requisitos e limitações

Pré-requisitos

Limitações

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte AWS Services by Region. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.

Versões do produto

  • AWS Control Tower landing zone versão 3.0 ou posterior, anterior à versão 4.0

  • AFT, versão 1.13.0 ou versões posteriores, mas anterior à versão 2.0.0

  • Terraform OSS, versão 1.2.0 ou versões posteriores, mas anterior à versão 2.0.0

  • Terraform AWS Provider (terraform-provider-aws) versão 5.11.0 ou posterior, anterior à versão 6.0.0

  • Módulo do Terraform para IPAM (aws-ia/ipam/aws), versão 2.1.0 ou versões posteriores

Arquitetura

O diagrama apresentado a seguir ilustra o fluxo de trabalho e os componentes deste padrão.

Fluxo de trabalho para criar a alocação IPAM IPv4 CIDR do Amazon VPC.

O fluxo de trabalho consiste nas seguintes tarefas principais:

  1. Alterações de gatilho — As alterações na personalização do Terraform e do IPAM são enviadas ao GitHub repositório e enviadas. Essa tarefa aciona o AWS CodeBuild pipeline automaticamente.

  2. Automatize a construção — Dentro CodeBuild, vários projetos de construção são AWS Step Functions acionados.

  3. Aplique personalização — Step Functions CodeBuild coordena para planejar e aplicar as alterações do Terraform. Essa tarefa usa o módulo AFT Terraform para coordenar a atribuição de IP do pool IPAM à conta vendida. AWS

Ferramentas

Serviços da AWS

  • O AWS CodeBuild é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.

  • O AWS CodePipeline ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.

  • AWS Control Towerorquestra as capacidades de vários outros Serviços da AWS, incluindo AWS Organizations AWS Service Catalog, e. Centro de Identidade do AWS IAM Ele pode ajudar você a configurar e administrar um ambiente AWS com várias contas, seguindo as melhores práticas prescritivas.

  • O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • AWS SDK para Python (Boto3)é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS

  • AWS Service Catalogajuda você a gerenciar centralmente catálogos de serviços de TI aprovados. AWS Os usuários finais podem implantar rapidamente somente os serviços de TI aprovados de que precisam, seguindo as restrições definidas pela organização.

  • AWS Step Functionsé um serviço de orquestração sem servidor que ajuda você a combinar AWS Lambda funções e outras Serviços da AWS para criar aplicativos essenciais para os negócios.

  • A Amazon Virtual Private Cloud (Amazon VPC) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS. O Amazon VPC IP Address Manager (IPAM) é um recurso de VPC que facilita o planejamento, o rastreamento e o monitoramento de endereços IP para suas cargas de trabalho. AWS

Outras ferramentas

  • GitHubé uma plataforma para desenvolvedores que os desenvolvedores podem usar para criar, armazenar, gerenciar e compartilhar seu código.

  • HashiCorp O Terraform é uma ferramenta de infraestrutura como código (IaC) que ajuda você a criar e gerenciar recursos na nuvem e no local. Isso inclui componentes de baixo nível, como instâncias de computação, armazenamento e rede, e componentes de alto nível, como entradas de DNS e recursos de software como serviço (SaaS).

  • Python é uma linguagem de programação de computador de uso geral. É possível usá-lo para criar aplicações, automatizar tarefas e desenvolver serviços na Nuvem AWS.

Repositório de código

Práticas recomendadas

Ao implantar o AFT, recomendamos seguir as práticas recomendadas para garantir uma implementação segura, eficiente e bem-sucedida. As diretrizes e recomendações principais para implementar e operar o AFT incluem:

  • Análise completa das entradas: analise e compreenda cuidadosamente cada entrada. A configuração correta das entradas é essencial para a instalação e o funcionamento do AFT.

  • Atualizações regulares de modelos — Mantenha os modelos atualizados com os AWS recursos mais recentes e as versões do Terraform. As atualizações regulares ajudam você a aproveitar as novas funcionalidades e manter a segurança.

  • Versionamento: especifique a versão do módulo do AFT e, se possível, realize testes em uma implantação separada do AFT.

  • Escopo: use o AFT apenas para implantar barreiras de proteção e personalizações para a infraestrutura. Não o use para implantar sua aplicação.

  • Análise de código e validação: o pipeline do AFT exige uma configuração do Terraform que tenha passado por análise de código e validação. Execute a análise de código, a validação e os testes antes de enviar a configuração para os repositórios do AFT.

  • Módulos do Terraform — Crie código reutilizável do Terraform como módulos e sempre especifique as versões do Terraform e do AWS provedor de acordo com os requisitos da sua organização.

Épicos

TarefaDescriptionHabilidades necessárias

Implantar AWS Control Tower.

Instale e configure AWS Control Tower em seu AWS ambiente para garantir o gerenciamento e a governança centralizados do seu Contas da AWS. Para obter mais informações, consulte Introdução AWS Control Tower na AWS Control Tower documentação.

Administrador de nuvem

Implante o AWS Control Tower Account Factory for Terraform (AFT).

Configure o AFT em uma nova conta gerencial dedicada do AFT. Para obter mais informações, consulte Configurar e iniciar seu AWS Control Tower Account Factory for Terraform na AWS Control Tower documentação.

Administrador de nuvem

Conclua as etapas necessárias após a implantação do AFT.

Depois que a implantação da infraestrutura AFT estiver concluída, conclua as etapas em Etapas de pós-implantação na AWS Control Tower documentação.

Administrador de nuvem
TarefaDescriptionHabilidades necessárias

Delegue um administrador para o IPAM.

Para delegar uma conta de administrador IPAM em sua AWS organização, use as seguintes etapas:

  1. Usando a conta AWS Organizations de gerenciamento, abra o console IPAM em https://console.aws.amazon.com/ipam/.

  2. No Console de gerenciamento da AWS, escolha o Região da AWS em que você deseja trabalhar com o IPAM.

  3. No painel de navegação, selecione Organization settings (Configurações da organização).

  4. Selecione Delegar. A opção Delegar só estará disponível se você estiver conectado ao console como a conta AWS Organizations de gerenciamento.

  5. Insira o Conta da AWS ID de uma conta IPAM. O administrador do IPAM deve estar em uma conta de AWS Organizations membro.

  6. Escolha Salvar alterações.

Como alternativa, você pode usar AWS CLI e executar o seguinte comando:

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

Para obter mais informações, consulte Integrar o IPAM com contas em uma AWS organização na documentação da Amazon VPC enable-ipam-organization-admine -account na AWS CLI Referência de comando.

Importante

Para continuar usando o IPAM, você deve fazer login na conta de administrador delegado. O perfil de SSO ou as variáveis de AWS ambiente especificadas na próxima etapa devem permitir que você faça login nessa conta e conceda permissões para criar um pool regional e de nível superior do IPAM.

Administrador da AWS

Crie um grupo regional e de nível superior do IPAM.

O GitHub repositório desse padrão contém um modelo do Terraform que você pode usar para criar seu pool de nível superior e pool regional do IPAM. Em seguida, você pode compartilhar os pools com uma organização, unidade organizacional (OU) ou outro recurso usando AWS Resource Access Manager (AWS RAM). Conta da AWS

Use as seguintes etapas:

  1. Execute os seguintes comandos :

    # Navigate to the IPAM module cd ipam/terraform # Initiate the IPAM module terraform init
  2. Abra o arquivo main.tf, modifique o código conforme descrito nos comentários a seguir e salve-o.

    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

Anote o ID do grupo de recursos apresentado depois da criação. O ID será necessário ao realizar a solicitação da conta. Se você esquecer o ID do grupo de recursos, poderá obtê-lo posteriormente no Console de gerenciamento da AWS.

Importante

Certifique-se de que os pools criados CIDRs não se sobreponham a nenhum outro pool em sua região de trabalho. Você pode criar um grupo sem um CIDR, mas não poderá usar o grupo para alocações até que você tenha provisionado um CIDR para ele. Você pode adicionar CIDRs a um pool a qualquer momento editando o pool.

Administrador da AWS
TarefaDescriptionHabilidades necessárias

Inicie a criação da personalização da conta.

Para iniciar uma nova personalização de conta, execute os seguintes comandos no seu 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 engenheiro

Crie o arquivo aft-providers.jinja.

Adicione código dinâmico ao arquivo aft-providers.jinja que especifique o backend e o provedor do Terraform a serem utilizados.

Use as seguintes etapas:

  1. Crie um novo arquivo aft-providers.jinja no diretório terraform.

  2. Abra o arquivo, adicione o código apresentado a seguir e salve-o.

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

Crie o arquivo backend.jinja.

Adicione código dinâmico ao arquivo backend.jinja que especifique o backend e o provedor do Terraform a serem utilizados.

Use as seguintes etapas:

  1. Crie um novo arquivo backend.jinja no diretório terraform.

  2. Abra o arquivo, adicione o código apresentado a seguir e salve-o.

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

Crie o arquivo main.tf.

Crie um novo main.tf arquivo e adicione o código que define duas fontes de dados que recuperam dois valores de AWS Systems Manager (aws_ssm) e cria a VPC.

Use as seguintes etapas:

  1. Crie um novo arquivo main.tf no diretório terraform.

  2. Abra o arquivo, adicione o código apresentado a seguir e salve-o.

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

Crie o arquivo variables.tf.

Crie um arquivo variables.tf que declare as variáveis usadas pelo módulo do Terraform.

Use as seguintes etapas:

  1. Crie um novo arquivo variables.tf no diretório terraform.

  2. Abra o arquivo, adicione o código apresentado a seguir e salve-o.

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

Crie o arquivo terraform.tfvars.

Crie um arquivo terraform.tfvars que defina os valores das variáveis que serão transferidas para o arquivo main.tf.

Use as seguintes etapas:

  1. Crie um novo arquivo terraform.tfvars no diretório terraform.

  2. Abra o arquivo, adicione o código apresentado a seguir e salve-o.

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

Crie o arquivo outputs.tf.

Crie um novo outputs.tf arquivo que exponha alguns valores em CodeBuild.

Use as seguintes etapas:

  1. Crie um novo arquivo outputs.tf no diretório terraform.

  2. Abra o arquivo, adicione o código apresentado a seguir e salve-o.

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

Confirme a personalização.

Para confirmar a nova personalização para o repositório de personalizações de conta, execute os seguintes comandos:

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

Aplique a personalização.

Adicione código ao arquivo account-requests.tf para solicitar uma nova conta com a personalização para a conta recém-criada. Os campos personalizados criam parâmetros do Systems Manager na conta de venda que são necessários para criar a VPC com o CIDR alocado pelo IPv4 IPAM correto.

Use as seguintes etapas:

  1. A partir do seu terminal, acesse o diretório aft-account-request/terraform.

  2. Abra o arquivo account-requests.tf, adicione e modifique o código apresentado a seguir usando seus valores, e salve o arquivo.

    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

    Verifique se o vpc-ipam-netmask valor é menor ou igual à alocação netmask do pool IPAM e se há IPs disponibilidade suficiente no pool IPAM para alocar para a VPC.

  3. Para confirmar a nova conta no repositório de solicitações de conta, use os seguintes comandos:

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

Valide a personalização.

Faça login na conta fornecida recentemente e verifique se a personalização foi aplicada com êxito.

Use as seguintes etapas:

  1. Abra sua página de Centro de Identidade do AWS IAM login e autentique-se como o usuário que você especificou no arquivo. account-requests.tf

  2. Na lista de contas do IAM Identity Center, escolha a conta que você vendia anteriormente e faça login usando a AWS AdministratorAccess função.

  3. Navegue até o console da VPC e selecione Seu. VPCs

  4. Selecione o ID da VPC que você acabou de criar.

  5. Escolha a guia CIDRs. Você deve ver um CIDR alocado por IPAM IPv4 .

  6. (Opcional) Faça login na conta de administrador delegado do IPAM e verifique se a alocação é apresentada no console do IPAM.

DevOps engenheiro

Solução de problemas

ProblemaSolução

Você recebe falhas na criação ou no gerenciamento de recursos devido a permissões insuficientes.

Analise as funções e políticas AWS Identity and Access Management (IAM) anexadas ao Step Functions e a outros serviços envolvidos na implantação. CodeBuild Confirme que todos têm as permissões necessárias. Se houver problemas de permissão, ajuste as políticas do IAM para conceder o acesso necessário.

Você atinge as AWS service (Serviço da AWS) cotas durante a implantação.

Antes de implantar o pipeline, verifique as AWS service (Serviço da AWS) cotas de recursos como buckets do Amazon Simple Storage Service (Amazon S3), funções e funções do IAM. AWS Lambda Se necessário, solicite aumento das cotas. Para obter mais informações, consulte AWS service (Serviço da AWS) Quotas na Referência geral da AWS .

Recursos relacionados

AWS service (Serviço da AWS) documentação

Outros recursos