Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Implementasikan Account Factory for Terraform (AFT) dengan menggunakan pipeline bootstrap
Vinicius Elias dan Edgar Costa Filho, Amazon Web Services
Ringkasan
Pemberitahuan: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya
Pola ini menyediakan metode sederhana dan aman untuk menerapkan AWS Control Tower Account Factory for Terraform (AFT) dari akun manajemen. AWS Organizations Inti dari solusi ini adalah AWS CloudFormation template yang mengotomatiskan konfigurasi AFT dengan membuat pipeline Terraform, yang disusun agar mudah beradaptasi untuk penerapan awal atau pembaruan berikutnya.
Keamanan dan integritas data adalah prioritas utama di AWS, sehingga file status Terraform, yang merupakan komponen penting yang melacak status infrastruktur dan konfigurasi terkelola, disimpan dengan aman di bucket Amazon Simple Storage Service (Amazon S3). Bucket ini dikonfigurasi dengan beberapa langkah keamanan, termasuk enkripsi sisi server dan kebijakan untuk memblokir akses publik, untuk membantu memastikan bahwa status Terraform Anda terlindungi dari akses yang tidak sah dan pelanggaran data.
Akun manajemen mengatur dan mengawasi seluruh lingkungan, sehingga merupakan sumber daya penting dalam. AWS Control Tower Pola ini mengikuti praktik AWS terbaik dan memastikan bahwa proses penyebaran tidak hanya efisien tetapi juga selaras dengan standar keamanan dan tata kelola, untuk menawarkan cara yang komprehensif, aman, dan efisien untuk menyebarkan AFT di lingkungan Anda. AWS
Untuk informasi lebih lanjut tentang AFT, lihat AWS Control Tower dokumentasi.
Prasyarat dan batasan
Prasyarat
Lingkungan AWS multi-akun dasar dengan akun berikut minimal: akun manajemen, akun Arsip Log, akun Audit, dan satu akun tambahan untuk manajemen AFT.
AWS Control Tower Lingkungan yang mapan. Akun manajemen harus dikonfigurasi dengan benar, karena CloudFormation template akan digunakan di dalamnya.
Izin yang diperlukan dalam akun AWS manajemen. Anda akan memerlukan izin yang cukup untuk membuat dan mengelola sumber daya seperti bucket S3, AWS Lambda fungsi, peran AWS Identity and Access Management (IAM), dan proyek. AWS CodePipeline
Keakraban dengan Terraform. Memahami konsep inti dan alur kerja Terraform adalah penting karena penerapan melibatkan pembuatan dan pengelolaan konfigurasi Terraform.
Batasan
Waspadai kuota AWS sumber daya di akun Anda. Penerapan dapat membuat beberapa sumber daya, dan menghadapi kuota layanan dapat menghambat proses penerapan.
Template ini dirancang untuk versi tertentu dari Terraform dan. Layanan AWS Memutakhirkan atau mengubah versi mungkin memerlukan modifikasi templat.
Template tidak mendukung layanan sistem kontrol versi (VCS) yang dikelola sendiri seperti GitHub Enterprise.
Versi produk
Terraform versi 1.6.6 atau yang lebih baru
AFT versi 1.11 atau yang lebih baru
Arsitektur
Tumpukan teknologi target
AWS CloudFormation
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Amazon EventBridge
IAM
AWS Lambda
Amazon S3
Arsitektur target
Diagram berikut menggambarkan implementasi yang dibahas dalam pola ini.

Alur kerja terdiri dari tiga tugas utama: membuat sumber daya, menghasilkan konten, dan menjalankan pipeline.
Menciptakan sumber daya
CloudFormation Template yang disediakan dengan pola ini
CodePipeline Pipa untuk mengimplementasikan AFT
Bucket S3 untuk menyimpan file status Terraform yang terkait dengan implementasi AFT
Dua CodeBuild proyek untuk mengimplementasikan rencana Terraform dan menerapkan perintah di berbagai tahap pipa
Peran CodeBuild dan CodePipeline layanan IAM
Bucket S3 kedua untuk menyimpan artefak runtime pipeline
Bergantung pada penyedia VCS yang Anda pilih (CodeCommit atau VCS eksternal), template membuat sumber daya berikut.
Untuk CodeCommit:
CodeCommit Repositori untuk menyimpan kode bootstrap AFT Terraform
EventBridge Aturan untuk menangkap perubahan CodeCommit repositori di cabang
mainPeran IAM lain untuk aturan EventBridge
Untuk penyedia VCS eksternal lainnya, seperti GitHub:
AWS CodeConnections Koneksi
Selain itu, saat Anda memilih CodeCommit sebagai penyedia VCS, jika Anda menyetel Generate AFT Files parameternyatrue, template akan membuat sumber daya tambahan ini untuk menghasilkan konten:
Bucket S3 untuk menyimpan konten yang dihasilkan dan digunakan sebagai sumber repositori CodeCommit
Fungsi Lambda untuk memproses parameter yang diberikan dan menghasilkan konten yang sesuai
Fungsi IAM untuk menjalankan fungsi Lambda
Sumber daya CloudFormation kustom yang menjalankan fungsi Lambda saat template di-deploy
Menghasilkan konten
Untuk menghasilkan file bootstrap AFT dan kontennya, solusinya menggunakan fungsi Lambda dan bucket S3. Fungsi membuat folder di bucket, dan kemudian membuat dua file di dalam folder: main.tf danbackend.tf. Fungsi ini juga memproses CloudFormation parameter yang disediakan dan mengisi file-file ini dengan kode yang telah ditentukan, menggantikan nilai parameter masing-masing.
Untuk melihat kode yang digunakan sebagai template untuk menghasilkan file, lihat GitHub repositori
utama.tf
module "aft" { source = "github.com/aws-ia/terraform-aws-control_tower_account_factory?ref=<aft_version>" # Required variables ct_management_account_id = "<ct_management_account_id>" log_archive_account_id = "<log_archive_account_id>" audit_account_id = "<audit_account_id>" aft_management_account_id = "<aft_management_account_id>" ct_home_region = "<ct_home_region>" # Optional variables tf_backend_secondary_region = "<tf_backend_secondary_region>" aft_metrics_reporting = "<false|true>" # AFT Feature flags aft_feature_cloudtrail_data_events = "<false|true>" aft_feature_enterprise_support = "<false|true>" aft_feature_delete_default_vpcs_enabled = "<false|true>" # Terraform variables terraform_version = "<terraform_version>" terraform_distribution = "<terraform_distribution>" # VCS variables (if you have chosen an external VCS) vcs_provider = "<github|githubenterprise|gitlab|gitlabselfmanaged|bitbucket>" account_request_repo_name = "<org-name>/aft-account-request" account_customizations_repo_name = "<org-name>/aft-account-customizations" account_provisioning_customizations_repo_name = "<org-name>/aft-account-provisioning-customizations" global_customizations_repo_name = "<org-name>/aft-global-customizations" }
backend.tf
terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup.tfstate" } }
Selama pembuatan CodeCommit repositori, jika Anda menyetel Generate AFT Files parameternyatrue, template menggunakan bucket S3 dengan konten yang dihasilkan sebagai sumber main cabang untuk mengisi repositori secara otomatis.
Menjalankan pipa
Setelah sumber daya dibuat dan file bootstrap telah dikonfigurasi, pipeline berjalan. Tahap pertama (Sumber) mengambil kode sumber dari cabang utama repositori, dan tahap kedua (Build) menjalankan perintah Terraform plan dan menghasilkan hasil yang akan ditinjau. Pada tahap ketiga (Persetujuan), pipeline menunggu tindakan manual untuk menyetujui atau menolak tahap terakhir (Deploy). Pada tahap terakhir, pipeline menjalankan perintah Terraform dengan menggunakan hasil apply perintah Terraform plan sebelumnya sebagai input. Terakhir, peran lintas akun dan izin di akun manajemen digunakan untuk membuat sumber daya AFT di akun manajemen AFT.
catatan
Jika Anda memilih penyedia VCS eksternal, Anda harus mengotorisasi koneksi dengan kredenal penyedia VCS Anda. Untuk menyelesaikan penyiapan, ikuti langkah-langkah di Perbarui koneksi yang tertunda di dokumentasi konsol Alat AWS Pengembang.
Alat
Layanan AWS
AWS CloudFormationmembantu Anda menyiapkan sumber daya AWS, menyediakannya dengan cepat dan konsisten, serta mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan Wilayah.
AWS CodeBuildadalah layanan build yang dikelola sepenuhnya yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
AWS CodeCommitadalah layanan kontrol versi yang membantu Anda menyimpan dan mengelola repositori Git secara pribadi tanpa perlu mengelola sistem kontrol sumber Anda sendiri.
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 CodeConnectionsmemungkinkan AWS sumber daya dan layanan, seperti CodePipeline, untuk terhubung ke repositori kode eksternal, seperti. GitHub
AWS Lambdaadalah layanan komputasi yang menjalankan kode Anda sebagai respons terhadap peristiwa dan secara otomatis mengelola sumber daya komputasi, menyediakan cara cepat untuk membuat aplikasi modern tanpa server untuk produksi.
AWS SDK untuk Python (Boto3)
adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS
Alat-alat lainnya
Terraform
adalah alat infrastruktur sebagai kode (IAc) yang memungkinkan Anda membangun, mengubah, dan membuat versi infrastruktur dengan aman dan efisien. Ini termasuk komponen tingkat rendah seperti instance komputasi, penyimpanan, dan jaringan; dan komponen tingkat tinggi seperti entri DNS dan fitur SaaS. Python adalah bahasa
pemrograman yang mudah dipelajari dan kuat. Ini memiliki struktur data tingkat tinggi yang efisien dan menyediakan pendekatan sederhana namun efektif untuk pemrograman berorientasi objek.
Repositori kode
Kode untuk pola ini tersedia di repositori pipeline bootstrap GitHub AFT
Untuk repositori AFT resmi, lihat AWS Control Tower Account Factory untuk Terraform
Praktik terbaik
Saat Anda menerapkan AFT dengan menggunakan CloudFormation templat yang disediakan, kami sarankan Anda mengikuti praktik terbaik untuk membantu memastikan implementasi yang aman, efisien, dan berhasil. Pedoman dan rekomendasi utama untuk mengimplementasikan dan mengoperasikan AFT meliputi yang berikut ini.
Tinjauan parameter secara menyeluruh: Tinjau dan pahami setiap parameter dalam CloudFormation templat dengan cermat. Konfigurasi parameter yang akurat sangat penting untuk pengaturan dan fungsi AFT yang benar.
Pembaruan template reguler: Pertahankan template diperbarui dengan AWS fitur terbaru dan versi Terraform. Pembaruan rutin membantu Anda memanfaatkan fungsionalitas baru dan menjaga keamanan.
Pembuatan Versi: 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
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Siapkan AWS Control Tower lingkungan. | Siapkan dan konfigurasikan AWS Control Tower di AWS lingkungan Anda untuk memastikan manajemen dan tata kelola terpusat untuk Anda. Akun AWS Untuk informasi selengkapnya, lihat Memulai AWS Control Tower dalam AWS Control Tower dokumentasi. | Administrator awan |
Luncurkan akun manajemen AFT. | Gunakan AWS Control Tower Account Factory untuk meluncurkan akun baru Akun AWS yang berfungsi sebagai akun manajemen AFT Anda. Untuk informasi selengkapnya, lihat Menyediakan AWS Service Catalog akun dengan Account Factory di AWS Control Tower dokumentasi. | Administrator awan |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Luncurkan CloudFormation template. | Dalam epik ini, Anda menerapkan CloudFormation template yang disediakan dengan solusi ini untuk mengatur pipeline bootstrap AFT di akun AWS manajemen Anda. Pipeline menyebarkan solusi AFT di akun manajemen AFT yang Anda siapkan di epik sebelumnya. Langkah 1: Buka AWS CloudFormation konsol
Langkah 2: Buat tumpukan baru
Langkah 3: Konfigurasikan parameter tumpukan
Langkah 4: Tentukan pembuatan file
Langkah 5: Isi AWS Control Tower dan detail akun AFT
Langkah 6: Konfigurasikan opsi AFT
Langkah 7: Tentukan versi
Langkah 8: Tinjau dan buat tumpukan
Langkah 9: Pantau pembuatan tumpukan
Langkah 10: Verifikasi penyebaran
| Administrator awan |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Opsi 1: Isi repositori bootstrap AFT untuk VCS eksternal. | Jika Anda mengatur penyedia VCS ke VCS eksternal (bukan ke CodeCommit), ikuti langkah-langkah ini. (Opsional) Setelah Anda menerapkan CloudFormation template, Anda dapat mengisi atau memvalidasi konten di repositori bootstrap AFT yang baru dibuat, dan menguji apakah pipeline telah berhasil berjalan. Langkah 1: Perbarui koneksi
Langkah 2: Isi repositori
Langkah 2: Komit dan dorong perubahan Anda
| Administrator awan |
Opsi 2: Isi repositori bootstrap AFT untuk. CodeCommit | Jika Anda mengatur penyedia VCS CodeCommit, ikuti langkah-langkah ini. (Opsional) Setelah Anda menerapkan CloudFormation template, Anda dapat mengisi atau memvalidasi konten di repositori bootstrap AFT yang baru dibuat, dan menguji apakah pipeline telah berhasil berjalan. Jika Anda menyetel Langkah 1: Isi repositori
Langkah 2: Komit dan dorong perubahan Anda
| Administrator awan |
Validasi pipeline bootstrap AFT. | Langkah 1: Lihat pipa
Langkah 2: Setujui hasil rencana Terraform
Langkah 3: Tunggu penyebaran
Langkah 4: Periksa sumber daya yang dibuat
| Administrator awan |
Pemecahan Masalah
| Isu | Solusi |
|---|---|
Fungsi Lambda kustom yang disertakan dalam CloudFormation template gagal selama penerapan. | Periksa CloudWatch log Amazon untuk fungsi Lambda untuk mengidentifikasi kesalahan. Log memberikan informasi terperinci dan dapat membantu menentukan masalah spesifik. Konfirmasikan bahwa fungsi Lambda memiliki izin yang diperlukan dan bahwa variabel lingkungan telah disetel dengan benar. |
Anda mengalami kegagalan dalam pembuatan atau manajemen sumber daya yang disebabkan oleh izin yang tidak memadai. | Tinjau peran dan kebijakan IAM yang dilampirkan pada fungsi Lambda 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 menggunakan versi CloudFormation template yang sudah ketinggalan zaman dengan versi yang lebih baru Layanan AWS atau Terraform. | Perbarui CloudFormation template secara teratur agar kompatibel dengan rilis terbaru AWS dan Terraform. Periksa catatan rilis atau dokumentasi untuk setiap perubahan atau persyaratan khusus versi. |
Anda mencapai Layanan AWS kuota selama penerapan. | Sebelum Anda menerapkan pipeline, periksa Layanan AWS kuota untuk sumber daya seperti bucket S3, peran IAM, dan fungsi Lambda. Permintaan meningkat jika perlu. Untuk informasi lebih lanjut, lihat Layanan AWS kuota di AWS situs web. |
Anda mengalami kesalahan karena parameter input yang salah dalam CloudFormation template. | Periksa kembali semua parameter input untuk kesalahan ketik atau nilai yang salah. Konfirmasikan bahwa pengidentifikasi sumber daya, seperti nama akun IDs dan Wilayah, akurat. |
Sumber daya terkait
Untuk menerapkan pola ini dengan sukses, tinjau sumber daya berikut. Sumber daya ini memberikan informasi dan panduan tambahan yang dapat sangat berharga dalam menyiapkan dan mengelola AFT dengan menggunakan. AWS CloudFormation
AWSdokumentasi:
AWS Control Tower Panduan Pengguna menawarkan informasi rinci tentang pengaturan dan pengelolaan AWS Control Tower.
AWS CloudFormation dokumentasi memberikan wawasan tentang CloudFormation template, tumpukan, dan manajemen sumber daya.
Kebijakan dan praktik terbaik IAM:
Praktik terbaik keamanan di IAM menjelaskan cara membantu mengamankan AWS sumber daya dengan menggunakan peran dan kebijakan IAM.
Terraform pada: AWS
Dokumentasi AWS Penyedia Terraform
memberikan informasi komprehensif tentang penggunaan Terraform dengan. AWS
Layanan AWS kuota:
Layanan AWS kuota memberikan informasi tentang cara melihat Layanan AWS kuota dan cara meminta kenaikan.