Otomatiskan alokasi Amazon VPC IPv4 IPAM CIDR untuk yang baru dengan menggunakan AFT Akun AWS - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Otomatiskan alokasi Amazon VPC IPv4 IPAM CIDR untuk yang baru dengan menggunakan AFT Akun AWS

Kien Pham dan Alex Pazik, Amazon Web Services

Ringkasan

Pola ini menunjukkan cara mengotomatiskan alokasi CIDR Amazon VPC IP Address Manager (IPAM IPv4 ) untuk yang baru dengan Akun AWS menggunakan Account AWS Control Tower Factory for Terraform (AFT). Ini dilakukan dengan menggunakan kustomisasi tingkat akun yang mengalokasikan blok IPv4 CIDR dari IPAM ke virtual private cloud (VPC) baru menggunakan modul. aft-account-customizations

Dengan IPAM, Anda dapat mengatur, menetapkan, memantau, dan mengaudit alamat IP dalam skala besar, memungkinkan Anda untuk dengan mudah merencanakan, melacak, dan memantau alamat IP untuk beban kerja Anda AWS . Anda dapat membuat kolam IPAM dan IPAM untuk digunakan untuk mengalokasikan blok IPv4 CIDR ke VPC baru selama proses penjual akun.

Prasyarat dan batasan

Prasyarat

Batasan

Versi produk

  • AWS Control Tower landing zone versi 3.0 atau lebih baru, lebih awal dari versi 4.0

  • AFT versi 1.13.0 atau yang lebih baru, lebih awal dari versi 2.0.0

  • Terraform OSS versi 1.2.0 atau yang lebih baru, lebih awal dari versi 2.0.0

  • Terraform AWS Provider (terraform-provider-aws) versi 5.11.0 atau yang lebih baru, lebih awal dari versi 6.0.0

  • Modul Terraform untuk IPAM (aws-ia/ipam/aws) versi 2.1.0 atau yang lebih baru

Arsitektur

Diagram berikut menunjukkan alur kerja dan komponen pola ini.

Alur kerja untuk membuat alokasi CIDR Amazon VPC IPv4 IPAM.

Alur kerja terdiri dari tugas-tugas utama berikut:

  1. Memicu perubahan - Perubahan pada kustomisasi Terraform dan IPAM berkomitmen ke GitHub repositori dan didorong. Tugas ini memicu AWS CodeBuild pipeline secara otomatis.

  2. Otomatiskan build — Di dalam CodeBuild, beberapa proyek build dipicu AWS Step Functions.

  3. Terapkan kustomisasi — Step Functions berkoordinasi CodeBuild dengan merencanakan dan menerapkan perubahan Terraform. Tugas ini menggunakan modul AFT Terraform untuk mengoordinasikan penetapan IP kumpulan IPAM ke akun penjual otomatis. AWS

Alat

Layanan AWS

  • AWS CodeBuildadalah layanan build yang dikelola sepenuhnya yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.

  • AWS CodePipelinemembantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.

  • AWS Control Towermengatur kemampuan beberapa lainnya, termasuk Layanan AWS AWS Organizations,, dan. AWS Service Catalog AWS IAM Identity Center Ini dapat membantu Anda mengatur dan mengatur lingkungan AWS multi-akun, mengikuti praktik terbaik preskriptif.

  • Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.

  • AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.

  • AWS SDK untuk Python (Boto3)adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS

  • AWS Service Catalogmembantu Anda mengelola katalog layanan TI secara terpusat yang disetujui. AWS Pengguna akhir dapat dengan cepat men-deploy hanya layanan IT yang disetujui yang mereka butuhkan, mengikuti batasan yang ditetapkan oleh organisasi Anda.

  • AWS Step Functionsadalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan AWS Lambda fungsi dan lainnya Layanan AWS untuk membangun aplikasi bisnis yang penting.

  • Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS Amazon VPC IP Address Manager (IPAM) adalah fitur VPC yang memudahkan Anda merencanakan, melacak, dan memantau alamat IP untuk beban kerja Anda. AWS

Alat-alat lainnya

  • GitHubadalah platform pengembang yang dapat digunakan pengembang untuk membuat, menyimpan, mengelola, dan membagikan kode mereka.

  • HashiCorp Terraform adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal. Ini termasuk komponen tingkat rendah seperti instance komputasi, penyimpanan, dan jaringan dan komponen tingkat tinggi seperti entri DNS dan fitur perangkat lunak layanan (SaaS).

  • Python adalah bahasa pemrograman komputer tujuan umum. Anda dapat menggunakannya untuk membangun aplikasi, mengotomatiskan tugas, dan mengembangkan layanan di AWS Cloudaplikasi.

Repositori kode

Praktik terbaik

Saat Anda menerapkan AFT, kami menyarankan Anda mengikuti praktik terbaik untuk membantu memastikan implementasi yang aman, efisien, dan berhasil. Pedoman dan rekomendasi utama untuk mengimplementasikan dan mengoperasikan AFT meliputi:

  • Tinjauan masukan secara menyeluruh — Tinjau dan pahami setiap masukan dengan cermat. Konfigurasi input yang benar sangat penting untuk pengaturan dan fungsi AFT.

  • Pembaruan template reguler - Simpan template diperbarui dengan AWS fitur terbaru dan versi Terraform. Pembaruan rutin membantu Anda memanfaatkan fungsionalitas baru dan menjaga keamanan.

  • Versioning — Sematkan versi modul AFT Anda dan gunakan penerapan AFT terpisah untuk pengujian jika memungkinkan.

  • Cakupan — Gunakan AFT hanya untuk menyebarkan pagar pembatas infrastruktur dan penyesuaian. Jangan menggunakannya untuk menyebarkan aplikasi Anda.

  • Linting dan validasi — Pipeline AFT memerlukan konfigurasi Terraform yang dilinted dan divalidasi. Jalankan lint, validasi, dan uji sebelum mendorong konfigurasi ke repositori AFT.

  • Modul Terraform — Buat kode Terraform yang dapat digunakan kembali sebagai modul, dan selalu tentukan versi Terraform dan AWS penyedia agar sesuai dengan kebutuhan organisasi Anda.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan AWS Control Tower.

Siapkan dan konfigurasikan AWS Control Tower di AWS lingkungan Anda untuk memastikan manajemen dan tata kelola terpusat Anda. Akun AWS Untuk informasi selengkapnya, lihat Memulai AWS Control Tower dalam AWS Control Tower dokumentasi.

Administrator awan

Terapkan AWS Control Tower Account Factory untuk Terraform (AFT).

Siapkan AFT di akun manajemen AFT khusus yang baru. Untuk informasi selengkapnya, lihat C onfigure dan luncurkan AWS Control Tower Account Factory for Terraform Anda di dokumentasi. AWS Control Tower

Administrator awan

Selesaikan pasca-penyebaran AFT.

Setelah penerapan infrastruktur AFT selesai, selesaikan langkah-langkah dalam langkah-langkah pasca-penerapan dalam dokumentasi. AWS Control Tower

Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Delegasikan administrator IPAM.

Untuk mendelegasikan akun administrator IPAM di AWS organisasi Anda, gunakan langkah-langkah berikut:

  1. Menggunakan akun AWS Organizations manajemen, buka konsol IPAM di https://console.aws.amazon.com/ipam/.

  2. Di Konsol Manajemen AWS, pilih Wilayah AWS di mana Anda ingin bekerja dengan IPAM.

  3. Di panel navigasi, pilih Pengaturan organisasi.

  4. Pilih Delegasikan. Opsi Delegasi hanya tersedia jika Anda masuk ke konsol sebagai akun AWS Organizations manajemen.

  5. Masukkan Akun AWS ID untuk akun IPAM. Administrator IPAM harus berada di akun AWS Organizations anggota.

  6. Pilih Simpan perubahan.

Atau, Anda dapat menggunakan AWS CLI dan menjalankan perintah berikut:

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

Untuk informasi selengkapnya, lihat Mengintegrasikan IPAM dengan akun di AWS organisasi dalam dokumentasi VPC Amazon enable-ipam-organization-admindan -account di AWS CLI Referensi Perintah.

penting

Untuk terus menggunakan IPAM, Anda harus masuk ke akun administrator yang didelegasikan. Profil SSO atau variabel AWS lingkungan yang ditentukan pada langkah berikutnya harus memungkinkan Anda masuk ke akun tersebut dan memberikan izin untuk membuat kumpulan tingkat atas dan regional IPAM.

Administrator AWS

Buat kolam tingkat atas dan regional IPAM.

GitHub Repositori pola ini berisi template Terraform yang dapat Anda gunakan untuk membuat kumpulan tingkat atas IPAM dan kumpulan regional Anda. Kemudian Anda dapat berbagi pool dengan organisasi, unit organisasi (OU) Akun AWS, atau sumber daya lainnya dengan menggunakan AWS Resource Access Manager (AWS RAM).

Gunakan langkah-langkah berikut:

  1. Jalankan perintah berikut:

    # Navigate to the IPAM module cd ipam/terraform # Initiate the IPAM module terraform init
  2. Buka main.tf file, ubah kode seperti yang dijelaskan dalam komentar berikut, dan simpan 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

Catat ID kumpulan sumber daya yang dihasilkan setelah pembuatan. Anda akan memerlukan ID saat mengirimkan permintaan akun. Jika Anda lupa ID kumpulan sumber daya, Anda bisa mendapatkannya nanti dari file Konsol Manajemen AWS.

penting

Pastikan bahwa kolam yang dibuat CIDRs tidak tumpang tindih dengan kolam lain di Wilayah kerja Anda. Anda dapat membuat pool tanpa CIDR, tetapi Anda tidak akan dapat menggunakan pool untuk alokasi sampai Anda telah menyediakan CIDR untuk itu. Anda dapat menambahkan CIDRs ke kolam kapan saja dengan mengedit kolam.

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Mulailah membuat kustomisasi akun.

Untuk memulai kustomisasi akun baru, jalankan perintah berikut dari terminal Anda:

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

Buat aft-providers.jinja file.

Tambahkan kode dinamis ke aft-providers.jinja file yang menentukan backend dan penyedia Terraform untuk digunakan.

Gunakan langkah-langkah berikut:

  1. Buat aft-providers.jinja file baru di terraform direktori.

  2. Buka file, tambahkan kode berikut, dan simpan file.

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

Buat backend.jinja file.

Tambahkan kode dinamis ke backend.jinja file yang menentukan backend dan penyedia Terraform untuk digunakan.

Gunakan langkah-langkah berikut:

  1. Buat backend.jinja file baru di terraform direktori.

  2. Buka file, tambahkan kode berikut, dan simpan 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 insinyur

Buat main.tf file.

Buat main.tf file baru dan tambahkan kode yang mendefinisikan dua sumber data yang mengambil dua nilai dari AWS Systems Manager (aws_ssm) dan membuat VPC.

Gunakan langkah-langkah berikut:

  1. Buat main.tf file baru di terraform direktori.

  2. Buka file, tambahkan kode berikut, dan simpan 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 insinyur

Buat variables.tf file.

Buat variables.tf file yang mendeklarasikan variabel yang digunakan oleh modul Terraform.

Gunakan langkah-langkah berikut:

  1. Buat variables.tf file baru di terraform direktori.

  2. Buka file, tambahkan kode berikut, dan simpan 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 insinyur

Buat terraform.tfvars file.

Buat terraform.tfvars file yang mendefinisikan nilai-nilai variabel yang diteruskan ke main.tf file.

Gunakan langkah-langkah berikut:

  1. Buat terraform.tfvars file baru di terraform direktori.

  2. Buka file, tambahkan kode berikut, dan simpan file.

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

Buat outputs.tf file.

Buat outputs.tf file baru yang mengekspos beberapa nilai di CodeBuild.

Gunakan langkah-langkah berikut:

  1. Buat outputs.tf file baru di terraform direktori.

  2. Buka file, tambahkan kode berikut, dan simpan 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 insinyur

Komit kustomisasi.

Untuk melakukan penyesuaian baru ke repositori kustomisasi akun, jalankan perintah berikut:

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

Terapkan kustomisasi.

Tambahkan kode ke account-requests.tf file yang meminta akun baru dengan kustomisasi akun yang baru dibuat. Bidang kustom membuat parameter Systems Manager di akun vended yang diperlukan untuk membuat VPC dengan CIDR yang dialokasikan IPv4 IPAM yang benar.

Gunakan langkah-langkah berikut:

  1. Dari terminal Anda, navigasikan ke aft-account-request/terraform direktori.

  2. Buka account-requests.tf file, tambahkan dan modifikasi kode berikut dengan nilai Anda, dan simpan 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 }
    penting

    Pastikan vpc-ipam-netmask nilainya kurang dari atau sama dengan alokasi kolam IPAMnetmask, dan ada cukup IPs tersedia di kolam IPAM untuk dialokasikan ke VPC.

  3. Untuk memasukkan akun baru ke repositori permintaan akun, gunakan perintah berikut:

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

Validasi kustomisasi.

Masuk ke akun yang baru dijual dan verifikasi bahwa kustomisasi berhasil diterapkan.

Gunakan langkah-langkah berikut:

  1. Buka halaman AWS IAM Identity Center login Anda dan autentikasi sebagai pengguna yang Anda tentukan dalam file. account-requests.tf

  2. Dari daftar akun Pusat Identitas IAM, pilih akun yang Anda jual sebelumnya dan masuk menggunakan peran tersebut AWS AdministratorAccess.

  3. Arahkan ke konsol VPC, dan pilih Your. VPCs

  4. Pilih ID VPC dari VPC yang baru saja Anda buat.

  5. Pilih CIDRstab. Anda akan melihat CIDR yang dialokasikan IPv4 IPAM.

  6. (Opsional) Masuk ke akun administrator yang didelegasikan IPAM Anda dan verifikasi bahwa alokasi ditampilkan di konsol IPAM.

DevOps insinyur

Pemecahan masalah

IsuSolusi

Anda mengalami kegagalan dalam pembuatan atau manajemen sumber daya yang disebabkan oleh izin yang tidak memadai.

Tinjau peran dan kebijakan AWS Identity and Access Management (IAM) yang dilampirkan ke Step Functions CodeBuild, dan layanan lain yang terlibat dalam penerapan. Konfirmasikan bahwa mereka memiliki izin yang diperlukan. Jika ada masalah izin, sesuaikan kebijakan IAM untuk memberikan akses yang diperlukan.

Anda mencapai Layanan AWS kuota selama penerapan.

Sebelum Anda menerapkan pipeline, periksa Layanan AWS kuota untuk sumber daya seperti bucket Amazon Simple Storage Service (Amazon S3), peran IAM, dan fungsi. AWS Lambda Jika perlu, permintaan meningkat ke kuota. Untuk informasi lebih lanjut, lihat Layanan AWS kuota di Referensi AWS Umum.

Sumber daya terkait

Layanan AWS dokumentasi

Sumber daya lainnya