Menyebarkan dan mengelola AWS Control Tower kontrol dengan menggunakan AWS CDK dan CloudFormation - AWS Prescriptive Guidance

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 memindai aplikasi selama penerapan. AWS CDK Alat ini memeriksa aplikasi untuk kepatuhan terhadap praktik AWS terbaik.

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.

Diagram arsitektur kontrol yang diterapkan di semua akun AWS di unit organisasi.

AWS Control Tower kontrol dikategorikan menurut perilaku dan bimbingannya.

Ada tiga jenis utama perilaku kontrol:

  1. 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.

  2. 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

  3. 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 repositori. Anda menggunakan file cdk.json untuk berinteraksi dengan AWS CDK aplikasi, dan Anda menggunakan file package.json untuk menginstal paket npm.

Praktik terbaik

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat peran IAM di akun manajemen.

  1. Buat kebijakan IAM di akun manajemen dengan izin yang ditentukan dalam kebijakan IAM di bagian Informasi tambahan. Untuk petunjuk, lihat Membuat kebijakan IAM dalam dokumentasi IAM. Catat Nama Sumber Daya Amazon (ARN) dari kebijakan tersebut. Berikut ini adalah contoh ARN.

    arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
  2. Buat peran IAM di akun manajemen, lampirkan kebijakan izin IAM yang Anda buat pada langkah sebelumnya, dan lampirkan kebijakan kepercayaan khusus dalam kebijakan Trust di bagian Informasi tambahan. Untuk petunjuknya, lihat Membuat peran menggunakan kebijakan kepercayaan khusus dalam dokumentasi IAM. Berikut ini adalah contoh ARN untuk peran baru.

    arn:aws:iam:: <MANAGEMENT-ACCOUNT-ID>:role/<ROLE-NAME>
DevOps insinyur, AWS Umum

Bootstrap AWS CDK.

  1. Di akun manajemen, asumsikan peran yang memiliki izin untuk bootstrap AWS CDK.

  2. Masukkan perintah berikut, ganti yang berikut ini:

    • <MANAGEMENT-ACCOUNT-ID>adalah ID akun manajemen organisasi.

    • <AWS-CONTROL-TOWER-REGION>adalah Wilayah AWS tempat AWS Control Tower dikerahkan. Untuk daftar lengkap kode Wilayah, lihat Titik akhir Regional di Referensi AWS Umum.

    • <DEPLOYMENT-ACCOUNT-ID>adalah ID dari akun penerapan.

    • <DEPLOYMENT-ROLE-NAME>adalah nama peran IAM yang Anda gunakan akun penerapan.

    • <POLICY-NAME>adalah nama kebijakan yang Anda buat di akun manajemen.

    $ npx cdk bootstrap aws://<MANAGEMENT-ACCOUNT-ID>/<AWS-CONTROL-TOWER-REGION> \ --trust arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME> \ --cloudformation-execution-policies arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
DevOps insinyur, AWS Umum, Python

Kloning repositori.

Dalam shell bash, masukkan perintah berikut. Ini mengkloning AWS Control Tower kontrol Deploy menggunakan AWS CDK repositori dari. GitHub

git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git
DevOps insinyur, AWS Umum

Edit file AWS CDK konfigurasi.

  1. Di repositori kloning, buka file constants.py.

  2. Dalam ACCOUNT_ID parameter, masukkan ID akun manajemen Anda.

  3. Dalam <AWS-CONTROL-TOWER-REGION> parameter, masukkan Wilayah AWS tempat AWS Control Tower dikerahkan.

  4. Dalam ROLE_ARN parameter, masukkan ARN dari peran yang Anda buat di akun manajemen.

  5. Buka Semua pengidentifikasi global dalam AWS Control Tower dokumentasi.

  6. Dalam daftar berformat JSON, cari kontrol yang ingin Anda terapkan, lalu salin pengenal globalnya (juga dikenal sebagai nilai {CONTROL_CATALOG_OPAQUE_ID}). Misalnya, pengidentifikasi global untuk kontrol AWS-GR_AUDIT_BUCKET_ENCRYPTION_ENABLED adalah. k4izcjxhukijhajp6ks5mjxk

  7. Di GUARDRAILS_CONFIGURATION bagian, dalam Enable-Control parameter, masukkan pengidentifikasi global yang Anda salin. Masukkan pengenal dalam tanda kutip ganda, dan pisahkan beberapa pengidentifikasi dengan koma.

  8. Di GUARDRAILS_CONFIGURATION bagian, dalam OrganizationalUnitIds parameter, masukkan ID unit organisasi tempat Anda ingin mengaktifkan kontrol, sepertiou-1111-11111111. Masukkan ID dalam tanda kutip ganda, dan pisahkan beberapa IDs dengan koma. Untuk informasi selengkapnya tentang cara mengambil OU IDs, lihat Melihat detail OU.

  9. Simpan dan tutup file constants.py. Untuk contoh file constants.py yang diperbarui, lihat bagian Informasi tambahan dari pola ini.

DevOps insinyur, AWS Umum
TugasDeskripsiKeterampilan 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:

  1. Masukkan perintah berikut untuk membuat lingkungan virtual.

    $ python3 -m venv .venv
  2. Setelah lingkungan virtual dibuat, masukkan perintah berikut untuk mengaktifkannya.

    $ source .venv/bin/activate

Jika Anda menggunakan Windows:

  1. Masukkan perintah berikut untuk mengaktifkan lingkungan virtual.

    % .venv\Scripts\activate.bat
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.

$ ./scripts/install_deps.sh
DevOps insinyur, AWS Umum, Python

Menyebarkan tumpukan.

Masukkan perintah berikut untuk mensintesis dan menyebarkan tumpukan. CloudFormation

$ npx cdk synth $ npx cdk deploy
DevOps insinyur, AWS Umum, Python

Sumber daya terkait

AWS dokumentasi

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": {} } ] }