Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyebarkan dan mengelola AWS Control Tower kontrol dengan menggunakan AWS CDK dan CloudFormation
Iker Reina Fuente dan Ivan Girardi, Amazon Web Services
Ringkasan
Pola ini menjelaskan bagaimana menggunakan AWS CloudFormation dan AWS Cloud Development Kit (AWS CDK) menerapkan dan mengelola AWS Control Tower kontrol preventif, detektif, dan proaktif sebagai infrastruktur sebagai kode (IAc). Kontrol (juga dikenal sebagai pagar pembatas) adalah aturan tingkat tinggi yang menyediakan tata kelola berkelanjutan untuk lingkungan Anda secara keseluruhan. AWS Control Tower Misalnya, Anda dapat menggunakan kontrol untuk meminta pencatatan untuk Anda Akun AWS dan kemudian mengonfigurasi pemberitahuan otomatis jika peristiwa terkait keamanan tertentu terjadi.
AWS Control Tower membantu Anda menerapkan kontrol preventif, detektif, dan proaktif yang mengatur AWS sumber daya Anda dan memantau kepatuhan di beberapa. Akun AWS Setiap kontrol memberlakukan satu aturan. Dalam pola ini, Anda menggunakan template IAc yang disediakan untuk menentukan kontrol mana yang ingin Anda terapkan di lingkungan Anda.
AWS Control Tower kontrol berlaku untuk seluruh unit organisasi (OU), dan kontrol mempengaruhi setiap Akun AWS dalam OU. Oleh karena itu, ketika pengguna melakukan tindakan apa pun di akun mana pun di landing zone Anda, tindakan tersebut tunduk pada kontrol yang mengatur OU.
Menerapkan AWS Control Tower kontrol membantu membangun fondasi keamanan yang kuat untuk AWS landing zone Anda. Dengan menggunakan pola ini untuk menerapkan kontrol sebagai IAc CloudFormation dan AWS CDK, Anda dapat menstandarisasi kontrol di landing zone Anda dan menerapkan dan mengelolanya dengan lebih efisien. Solusi ini menggunakan cdk_nag
Untuk menerapkan AWS Control Tower kontrol sebagai IAc, Anda juga dapat menggunakan HashiCorp Terraform sebagai gantinya. AWS CDK Untuk informasi selengkapnya, lihat Menerapkan dan mengelola AWS Control Tower kontrol menggunakan Terraform.
Audiens yang dituju
Pola ini direkomendasikan untuk pengguna yang memiliki pengalaman dengan AWS Control Tower, CloudFormation, AWS CDK, dan AWS Organizations.
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS dikelola sebagai organisasi di AWS Organizations dan AWS Control Tower landing zone. Untuk petunjuk, lihat Memulai dalam AWS Control Tower dokumentasi.
AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi.
Manajer paket node (npm), diinstal dan dikonfigurasi
untuk file. AWS CDK Prasyarat untuk. AWS CDK
Izin untuk mengambil peran AWS Identity and Access Management (IAM) yang ada dalam akun penerapan.
Izin untuk mengambil peran IAM dalam akun manajemen organisasi yang dapat digunakan untuk bootstrap. AWS CDK Peran harus memiliki izin untuk memodifikasi dan menyebarkan CloudFormation sumber daya. Untuk informasi selengkapnya, lihat Bootstrapping di dokumentasi. AWS CDK
Izin untuk membuat peran dan kebijakan IAM di akun manajemen organisasi. Untuk informasi selengkapnya, lihat Izin yang diperlukan untuk mengakses sumber daya IAM dalam dokumentasi IAM.
Batasan
Pola ini memberikan instruksi untuk menerapkan solusi ini di seluruh Akun AWS, dari akun penerapan ke akun manajemen organisasi. Untuk tujuan pengujian, Anda dapat menerapkan solusi ini secara langsung di akun manajemen, tetapi instruksi untuk konfigurasi ini tidak disediakan secara eksplisit.
Untuk AWS Control Tower kontrol, pola ini memerlukan penggunaan pengidentifikasi global yang dalam format berikut:
arn:<PARTITION>:controlcatalog:::control/<CONTROL_CATALOG_OPAQUE_ID>Versi sebelumnya dari pola ini menggunakan pengidentifikasi regional yang tidak lagi didukung. Kami menyarankan Anda bermigrasi dari pengenal Regional ke pengidentifikasi global. Pengidentifikasi global membantu Anda mengelola kontrol dan memperluas jumlah kontrol yang dapat Anda gunakan.
catatan
Dalam kebanyakan kasus, nilainya
<PARTITION>adalahaws.
Versi produk
AWS Control Tower versi 3.2 atau yang lebih baru
Python versi 3.9 atau yang lebih baru
npm versi 8.9.0 atau yang lebih baru
Arsitektur
Bagian ini memberikan gambaran tingkat tinggi dari solusi ini dan arsitektur yang ditetapkan oleh kode sampel. Diagram berikut menunjukkan kontrol yang digunakan di berbagai akun di OU.

AWS Control Tower kontrol dikategorikan menurut perilaku dan bimbingannya.
Ada tiga jenis utama perilaku kontrol:
Kontrol preventif dirancang untuk mencegah tindakan terjadi. Ini diimplementasikan dengan kebijakan kontrol layanan (SCPs) atau kebijakan kontrol sumber daya (RCPs) di AWS Organizations. Status kontrol preventif ditegakkan atau tidak diaktifkan. Kontrol preventif didukung di semua Wilayah AWS.
Kontrol Detektif dirancang untuk mendeteksi peristiwa tertentu ketika terjadi dan mencatat tindakan. AWS CloudTrail Ini diimplementasikan dengan AWS Config aturan. Status kontrol detektif jelas, melanggar, atau tidak diaktifkan. Kontrol Detektif hanya berlaku pada yang Wilayah AWS didukung oleh. AWS Control Tower
Kontrol proaktif memindai sumber daya yang akan disediakan oleh AWS CloudFormation dan memeriksa apakah mereka sesuai dengan kebijakan dan tujuan perusahaan Anda. Sumber daya yang tidak sesuai tidak akan disediakan. Ini diimplementasikan dengan AWS CloudFormation kait. Status kontrol proaktif adalah LULUS, GAGAL, atau SKIP.
Panduan kontrol mengacu pada praktik yang direkomendasikan untuk bagaimana menerapkan setiap kontrol ke Anda OUs. AWS Control Tower menyediakan tiga kategori panduan: wajib, sangat direkomendasikan, dan elektif. Bimbingan kontrol tidak tergantung pada perilakunya. Untuk informasi selengkapnya, lihat Mengontrol perilaku dan panduan.
Alat
Layanan AWS
AWS Cloud Development Kit (AWS CDK)adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode. AWS CDK Toolkit adalah alat utama untuk berinteraksi dengan aplikasi Anda AWS CDK .
AWS CloudFormationmembantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS
AWS Configmemberikan tampilan rinci tentang sumber daya di Anda Akun AWS dan bagaimana mereka dikonfigurasi. Ini membantu Anda mengidentifikasi bagaimana sumber daya terkait satu sama lain dan bagaimana konfigurasinya telah berubah dari waktu ke waktu.
AWS Control Towermembantu Anda mengatur dan mengatur lingkungan AWS multi-akun, mengikuti praktik terbaik preskriptif.
AWS Organizationsadalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa Akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.
Alat-alat lainnya
cdk_nag
adalah alat sumber terbuka yang menggunakan kombinasi paket aturan untuk memeriksa kepatuhan AWS CDK aplikasi terhadap praktik terbaik. npm
adalah registri perangkat lunak yang berjalan di lingkungan Node.js dan digunakan untuk berbagi atau meminjam paket dan mengelola penyebaran paket pribadi. Python adalah bahasa
pemrograman komputer tujuan umum.
Repositori kode
Kode untuk pola ini tersedia di AWS Control Tower kontrol GitHub Deploy menggunakan AWS CDK
Praktik terbaik
Ikuti prinsip hak istimewa paling sedikit (dokumentasi IAM). Contoh kebijakan IAM dan kebijakan kepercayaan yang disediakan dalam pola ini mencakup izin minimum yang diperlukan, dan AWS CDK tumpukan yang dibuat di akun manajemen dibatasi oleh izin ini.
Ikuti Praktik terbaik untuk AWS Control Tower administrator (AWS Control Tower dokumentasi).
Ikuti Praktik terbaik untuk mengembangkan dan menerapkan infrastruktur cloud dengan AWS CDK (AWS CDK dokumentasi).
Saat mem-bootstrap AWS CDK, sesuaikan template bootstrap untuk menentukan kebijakan dan akun tepercaya yang harus memiliki kemampuan untuk membaca dan menulis ke sumber daya apa pun di akun manajemen. Untuk informasi selengkapnya, lihat Menyesuaikan bootstrap.
Gunakan alat analisis kode, seperti cfn_nag
, untuk memindai templat yang dihasilkan. CloudFormation Alat cfn-nag mencari pola dalam CloudFormation template yang mungkin menunjukkan infrastruktur tidak aman. Anda juga dapat menggunakan cdk-nag untuk memeriksa CloudFormation template Anda dengan menggunakan modul cloudformation-include.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat peran IAM di akun manajemen. |
| DevOps insinyur, AWS Umum |
Bootstrap AWS CDK. |
| DevOps insinyur, AWS Umum, Python |
Kloning repositori. | Dalam shell bash, masukkan perintah berikut. Ini mengkloning AWS Control Tower kontrol Deploy menggunakan AWS CDK
| DevOps insinyur, AWS Umum |
Edit file AWS CDK konfigurasi. |
| DevOps insinyur, AWS Umum |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Asumsikan peran IAM dalam akun penerapan. | Di akun penerapan, asumsikan peran IAM yang memiliki izin untuk menyebarkan AWS CDK tumpukan di akun manajemen. Untuk informasi selengkapnya tentang mengasumsikan peran IAM dalam AWS CLI, lihat Menggunakan peran IAM dalam. AWS CLI | DevOps insinyur, AWS Umum |
Aktifkan lingkungan. | Jika Anda menggunakan Linux atau macOS:
Jika Anda menggunakan Windows:
| DevOps insinyur, AWS Umum |
Instal dependensi. | Setelah lingkungan virtual diaktifkan, masukkan perintah berikut untuk menjalankan skrip install_deps.sh. Skrip ini menginstal dependensi yang diperlukan.
| DevOps insinyur, AWS Umum, Python |
Menyebarkan tumpukan. | Masukkan perintah berikut untuk mensintesis dan menyebarkan tumpukan. CloudFormation
| DevOps insinyur, AWS Umum, Python |
Sumber daya terkait
AWS dokumentasi
Tentang kontrol (AWS Control Tower dokumentasi)
Pustaka kontrol (AWS Control Tower dokumentasi)
AWS CDK Perintah Toolkit (AWS CDK dokumentasi)
Terapkan dan kelola AWS Control Tower kontrol dengan menggunakan Terraform (Panduan Preskriptif)AWS
Sumber daya lainnya
Informasi tambahan
Contoh file constants.py
Berikut ini adalah contoh dari file constants.py diperbarui. Sampel ini mengaktifkan kontrol AWS-GR_DISALLOW_CROSS_REGION_NETWORKING (global ID:) dan kontrol AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED (ID global:). dvuaav61i5cnfazfelmvn9m6k 50z1ot237wl8u1lv5ufau6qqo Untuk daftar global IDs, lihat Semua pengidentifikasi global dalam AWS Control Tower dokumentasi.
ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "dvuaav61i5cnfazfelmvn9m6k": { # AWS-GR_DISALLOW_CROSS_REGION_NETWORKING "Parameters": { "ExemptedPrincipalArns": ["arn:aws:iam::111122223333:role/RoleName"] }, "Tags": [{"key": "Environment", "value": "Production"}] }, ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "50z1ot237wl8u1lv5ufau6qqo", # AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED ... }, "OrganizationalUnitIds": ["ou-2222-22222222"...], }, ]
Kebijakan IAM
Kebijakan contoh berikut memungkinkan tindakan minimum yang diperlukan untuk mengaktifkan atau menonaktifkan AWS Control Tower kontrol saat menerapkan AWS CDK tumpukan dari akun penerapan ke akun manajemen.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "controltower:EnableControl", "controltower:DisableControl", "controltower:GetControlOperation", "controltower:ListEnabledControls", "organizations:AttachPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:DescribeOrganization", "organizations:DescribeOrganizationalUnit", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy", "ssm:GetParameters" ], "Resource": "*" } ] }
Kebijakan kepercayaan
Kebijakan kepercayaan khusus berikut memungkinkan peran IAM tertentu dalam akun penerapan untuk mengambil peran IAM dalam akun manajemen. Ganti yang berikut ini:
<DEPLOYMENT-ACCOUNT-ID>adalah ID dari akun penerapan<DEPLOYMENT-ROLE-NAME>adalah nama peran dalam akun penyebaran yang diizinkan untuk mengambil peran dalam akun manajemen
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>" }, "Action": "sts:AssumeRole", "Condition": {} } ] }