Automatice las asignaciones de CIDR, IPAM y IPv4 CIDR de Amazon VPC para nuevos mediante AFT Cuentas de AWS - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Automatice las asignaciones de CIDR, IPAM y IPv4 CIDR de Amazon VPC para nuevos mediante AFT Cuentas de AWS

Kien Pham y Alex Pazik, Amazon Web Services

Resumen

Este patrón muestra cómo automatizar las asignaciones de IPv4 CIDR de Amazon VPC IP Address Manager (IPAM) para las nuevas mediante Cuentas de AWS AWS Control Tower Account Factory for Terraform (AFT). Esto se hace mediante una personalización a nivel de cuenta que asigna un bloque IPv4 CIDR de IPAM a una nueva nube privada virtual (VPC) mediante el módulo. aft-account-customizations

Con IPAM, puede organizar, asignar, monitorear y auditar las direcciones IP a gran escala, lo que le permite planificar, rastrear y monitorear fácilmente las direcciones IP de sus cargas de trabajo. AWS Puede crear un grupo de IPAM e IPAM para asignar un bloque IPv4 CIDR a una nueva VPC durante el proceso de venta de cuentas.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte AWS Services by Region. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas y elija el enlace del servicio.

Versiones de producto

Arquitectura

En el siguiente diagrama se muestran el flujo de trabajo y los componentes de este patrón.

Flujo de trabajo para crear la asignación de CIDR de IPAM IPv4 de Amazon VPC.

El flujo de trabajo consta de las tareas principales siguientes:

  1. Cambios desencadenantes: los cambios en la personalización de Terraform e IPAM se transfieren al repositorio y se publican. GitHub Esta tarea activa la AWS CodeBuild canalización automáticamente.

  2. Automatice la construcción: en su interior CodeBuild, se activan varios proyectos de compilación AWS Step Functions.

  3. Aplica la personalización: Step Functions se coordina con CodeBuild ella para planificar y aplicar los cambios de Terraform. Esta tarea utiliza el módulo AFT Terraform para coordinar la asignación de IP del grupo de IPAM a la AWS cuenta vendida.

Tools (Herramientas)

Servicios de AWS

  • AWS CodeBuild es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.

  • AWS CodePipeline permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.

  • AWS Control Towerorganiza las capacidades de varios otros Servicios de AWS, incluidos AWS Organizations, y. AWS Service Catalog AWS IAM Identity Center Puede ayudarlo a configurar y administrar un entorno de AWS múltiples cuentas, siguiendo las mejores prácticas prescriptivas.

  • Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • AWS SDK para Python (Boto3)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.

  • AWS Service Catalogle ayuda a gestionar de forma centralizada los catálogos de servicios de TI AWS aprobados. Los usuarios finales pueden implementar rápidamente solo los servicios de TI aprobados que necesitan, de acuerdo con las limitaciones establecidas por su organización.

  • AWS Step Functionses un servicio de organización sin servidor que le ayuda a combinar AWS Lambda funciones y otras Servicios de AWS para crear aplicaciones esenciales para la empresa.

  • Amazon Virtual Private Cloud (Amazon VPC) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS. El administrador de direcciones IP de Amazon VPC (IPAM) es una función de VPC que le facilita la planificación, el seguimiento y la supervisión de las direcciones IP de sus cargas de trabajo. AWS

Otras herramientas

  • GitHubes una plataforma para desarrolladores que los desarrolladores pueden usar para crear, almacenar, administrar y compartir su código.

  • HashiCorp Terraform es una herramienta de infraestructura como código (IaC) que le ayuda a crear y administrar recursos locales y en la nube. Esto incluye componentes de bajo nivel, como instancias de procesamiento, almacenamiento y redes, y componentes de alto nivel, como entradas de DNS y característica de software como servicio (SaaS).

  • Python es un lenguaje de programación informático de uso general. Puede usar esta herramienta para crear aplicaciones, automatizar tareas y desarrollar servicios en Nube de AWS.

Repositorio de código

Prácticas recomendadas

Al implementar AFT, le recomendamos que siga las prácticas recomendadas para garantizar una implementación segura, eficiente y correcta. Las pautas y recomendaciones clave para implementar y operar la AFT incluyen los siguientes pasos:

  • Revisión exhaustiva de las entradas: revise y comprenda cuidadosamente cada entrada. La configuración correcta de las entradas es crucial para la configuración y el funcionamiento de la AFT.

  • Actualizaciones periódicas de las plantillas: mantenga las plantillas actualizadas con las últimas AWS funciones y versiones de Terraform. Las actualizaciones periódicas lo ayudarán a aprovechar las nuevas funciones y a mantener la seguridad.

  • Control de versiones: fije la versión de su módulo de AFT y, si es posible, utilice una implementación de AFT independiente para realizar las pruebas.

  • Alcance: utilice AFT únicamente para implementar barreras de protección y personalizaciones de infraestructura. No use AFT para implementar la aplicación.

  • Lint y validación: la canalización de AFT requiere una configuración de Terraform de tipo Lint y que esté validada. Ejecute Lint, valide y pruebe todo antes de enviar la configuración a los repositorios de AFT.

  • Módulos de Terraform: cree código de Terraform reutilizable como módulos y especifique siempre las versiones de Terraform y del AWS proveedor para que se ajusten a los requisitos de su organización.

Epics

TareaDescripciónHabilidades requeridas

Implemente AWS Control Tower.

Instálelo y AWS Control Tower configúrelo en su AWS entorno para garantizar la administración y el gobierno centralizados de su Cuentas de AWS. Para obtener más información, consulte Primeros pasos AWS Control Tower en la AWS Control Tower documentación.

Administrador de la nube

Implemente AWS Control Tower Account Factory para Terraform (AFT).

Configure AFT en una nueva cuenta de administración de AFT dedicada. Para obtener más información, consulte Configurar e iniciar su AWS Control Tower Account Factory para Terraform en la AWS Control Tower documentación.

Administrador de la nube

Complete la AFT después de la implementación.

Una vez que se complete el despliegue de la infraestructura AFT, complete los pasos que se indican en la documentación sobre los pasos posteriores al despliegue. AWS Control Tower

Administrador de la nube
TareaDescripciónHabilidades requeridas

Delegue un administrador de IPAM

Para delegar una cuenta de administrador de IPAM en su AWS organización, siga los siguientes pasos:

  1. Con la cuenta AWS Organizations de administración, abra la consola de IPAM en. https://console.aws.amazon.com/ipam/

  2. En Consola de administración de AWS, elija el lugar Región de AWS en el que desee trabajar con el IPAM.

  3. En el panel de navegación, elija Configuración de la organización.

  4. Elija Delegar. La opción Delegar solo está disponible si ha iniciado sesión en la consola como cuenta de AWS Organizations administración.

  5. Introduzca el Cuenta de AWS ID de una cuenta de IPAM. El administrador de IPAM debe estar en una cuenta de AWS Organizations miembro.

  6. Seleccione Save changes (Guardar cambios).

Como alternativa, puede usar AWS CLI y ejecutar el siguiente comando:

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

Para obtener más información, consulte Integrar el IPAM con las cuentas de una AWS organización en la documentación de Amazon VPC enable-ipam-organization-adminy -account en AWS CLI la Referencia de comandos.

importante

Para seguir utilizando IPAM, debe iniciar sesión en la cuenta de administrador delegado. El perfil de SSO o las variables de AWS entorno especificadas en el siguiente paso deben permitirle iniciar sesión en esa cuenta y conceder permisos para crear un grupo regional y de alto nivel de IPAM.

Administrador de AWS

Cree un grupo regional y de nivel superior de IPAM.

El GitHub repositorio de este patrón contiene una plantilla de Terraform que puede usar para crear su grupo de nivel superior y su grupo regional de IPAM. A continuación, puede compartir los grupos con una organización, unidad organizativa (OU) u otro recurso mediante AWS Resource Access Manager (). Cuenta de AWSAWS RAM

Utilice los siguientes pasos:

  1. Ejecute los siguientes comandos :

    # Navigate to the IPAM module cd ipam/terraform # Initiate the IPAM module terraform init
  2. Abra el archivo main.tf, modifique el código como se describe en los comentarios siguientes y guarde el archivo.

    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 el ID del grupo de recursos que se muestra después de la creación. Necesitará ese ID al enviar la solicitud de cuenta. Si olvida el ID del grupo de recursos, puede obtenerlo más adelante en la Consola de administración de AWS.

importante

Asegúrese de que los grupos creados CIDRs no se superpongan con ningún otro grupo de su región de trabajo. Puede crear un grupo sin un CIDR, pero no podrá utilizar el grupo para asignaciones hasta que le haya aprovisionado un CIDR. Puede añadir elementos CIDRs a un grupo en cualquier momento editando el grupo.

Administrador de AWS
TareaDescripciónHabilidades requeridas

Comience a crear la personalización de la cuenta.

Para iniciar una nueva personalización de la cuenta, ejecute los siguientes comandos desde su 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 ingeniero

Cree el archivo aft-providers.jinja.

Agregue código dinámico al archivo aft-providers.jinja que especifique el backend y el proveedor de Terraform que va a usar.

Utilice los siguientes pasos:

  1. Cree un archivo aft-providers.jinja nuevo en el directorio terraform.

  2. Abra el archivo, añada el siguiente código y guarde el archivo.

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

Cree el archivo backend.jinja.

Agregue código dinámico al archivo backend.jinja que especifique el backend y el proveedor de Terraform que va a usar.

Utilice los siguientes pasos:

  1. Cree un archivo backend.jinja nuevo en el directorio terraform.

  2. Abra el archivo, añada el siguiente código y guarde el archivo.

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

Cree el archivo main.tf.

Cree un main.tf archivo nuevo y añada código que defina dos fuentes de datos que recuperan dos valores de AWS Systems Manager (aws_ssm) y crean la VPC.

Utilice los siguientes pasos:

  1. Cree un archivo main.tf nuevo en el directorio terraform.

  2. Abra el archivo, añada el siguiente código y guarde el archivo.

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

Cree el archivo variables.tf.

Cree un archivo variables.tf que indique las variables que usa el módulo de Terraform.

Utilice los siguientes pasos:

  1. Cree un archivo variables.tf nuevo en el directorio terraform.

  2. Abra el archivo, añada el siguiente código y guarde el archivo.

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

Cree el archivo terraform.tfvars.

Cree un archivo terraform.tfvars que defina los valores de las variables que se pasan al archivo main.tf.

Utilice los siguientes pasos:

  1. Cree un archivo terraform.tfvars nuevo en el directorio terraform.

  2. Abra el archivo, añada el siguiente código y guarde el archivo.

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

Cree el archivo outputs.tf.

Cree un nuevo outputs.tf archivo que exponga algunos valores en CodeBuild.

Utilice los siguientes pasos:

  1. Cree un archivo outputs.tf nuevo en el directorio terraform.

  2. Abra el archivo, añada el siguiente código y guarde el archivo.

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

Confirme la personalización.

Para confirmar la nueva personalización en el repositorio de personalizaciones de la cuenta, ejecute los siguientes 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 ingeniero

Aplique la personalización.

Agregue el código al archivo account-requests.tf que solicita una nueva cuenta con la personalización de la cuenta recién creada. Los campos personalizados crean los parámetros de Systems Manager en la cuenta de venta que son necesarios para crear la VPC con el CIDR asignado por IPv4 IPAM correcto.

Utilice los siguientes pasos:

  1. En un terminal, vaya al directorio aft-account-request/terraform.

  2. Abra el archivo account-requests.tf, añada y modifique el siguiente código con sus valores y guarde el archivo.

    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

    Asegúrese de que el vpc-ipam-netmask valor sea menor o igual a la asignación netmask del grupo de IPAM y de que haya suficientes recursos IPs disponibles en el grupo de IPAM para asignarlos a la VPC.

  3. Para confirmar la nueva cuenta en el repositorio de solicitudes de cuentas, utilice los siguientes comandos:

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

Valide la personalización.

Inicie sesión en la cuenta recién creada y compruebe que la personalización se haya aplicado correctamente.

Utilice los siguientes pasos:

  1. Abra la página AWS IAM Identity Center de inicio de sesión y autentíquese como el usuario que especificó en el account-requests.tf archivo.

  2. En la lista de cuentas del Centro de Identidad de IAM, elija la cuenta que ha vendido anteriormente e inicie sesión con el rol. AWS AdministratorAccess

  3. Ve a la consola de VPC y selecciona Tu. VPCs

  4. Seleccione el ID de la VPC que acaba de crear.

  5. Elija la pestaña CIDRs. Debería ver un CIDR asignado a IPAM. IPv4

  6. (Opcional) Inicie sesión en su cuenta de administrador delegado de IPAM y compruebe que la asignación se muestra en la consola de IPAM.

DevOps ingeniero

Resolución de problemas

ProblemaSolución

Se producen errores en la creación o administración de los recursos a causa de permisos inadecuados.

Revise las funciones y políticas AWS Identity and Access Management (de IAM) asociadas a Step Functions y otros servicios involucrados en la implementación. CodeBuild Confirme que tengan los permisos necesarios. Si tiene problemas con los permisos, ajuste las políticas de IAM para conceder el acceso necesario.

Servicio de AWS Las cuotas se alcanzan durante la implementación.

Antes de implementar la canalización, compruebe Servicio de AWS las cuotas de recursos, como los buckets de Amazon Simple Storage Service (Amazon S3), las funciones y las funciones de IAM. AWS Lambda Si es necesario, solicite un aumento de las cuotas. Para obtener más información, consulte Servicio de AWS Service Quotas en la Referencia general de AWS .

Recursos relacionados

Servicio de AWS documentación

Otros recursos