Terapkan dan kelola AWS Control Tower kontrol dengan menggunakan Terraform - AWS Prescriptive Guidance

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

Terapkan dan kelola AWS Control Tower kontrol dengan menggunakan Terraform

Iker Reina Fuente dan Ivan Girardi, Amazon Web Services

Ringkasan

Pola ini menjelaskan cara menggunakan AWS Control Tower kontrol, HashiCorp Terraform, dan infrastruktur sebagai kode (IAc) untuk mengimplementasikan dan mengelola kontrol keamanan preventif, detektif, dan proaktif. 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 melalui Terraform, Anda dapat menstandarisasi kontrol di landing zone Anda dan menerapkan dan mengelolanya dengan lebih efisien.

Untuk menerapkan AWS Control Tower kontrol sebagai IAc, Anda juga dapat menggunakan AWS Cloud Development Kit (AWS CDK) alih-alih Terraform. Untuk informasi selengkapnya, lihat Menerapkan dan mengelola AWS Control Tower kontrol dengan menggunakan AWS CDK dan AWS CloudFormation.

Audiens yang dituju

Pola ini direkomendasikan untuk pengguna yang memiliki pengalaman dengan AWS Control Tower, Terraform, 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.

  • Peran AWS Identity and Access Management (IAM) dalam akun manajemen yang memiliki izin untuk menerapkan pola ini. Untuk informasi selengkapnya tentang izin yang diperlukan dan kebijakan sampel, lihat Izin hak istimewa terkecil untuk peran IAM di bagian Informasi tambahan dari pola ini.

  • Izin untuk mengambil peran IAM dalam akun manajemen.

  • Terraform CLI, diinstal (dokumentasi Terraform).

  • AWS Penyedia Terraform, dikonfigurasi (dokumentasi Terraform).

  • Backend Terraform, dikonfigurasi (dokumentasi Terraform).

Batasan

  • 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

  • Terraform versi 1.5 atau yang lebih baru

  • AWS Penyedia Terraform versi 4.67 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 pencegahan 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 kontrol 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 adalah 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 CloudFormationmembantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan Wilayah.

  • 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 lainnya

  • HashiCorp Terraform adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.

Repositori kode

Kode untuk pola ini tersedia di GitHub Deploy dan kelola AWS Control Tower kontrol dengan menggunakan repositori Terraform.

Praktik terbaik

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori.

Dalam shell bash, masukkan perintah berikut. Ini mengkloning AWS Control Tower kontrol Deploy dan mengelola dengan menggunakan repositori Terraform dari. GitHub

git clone https://github.com/aws-samples/aws-control-tower-controls-terraform.git
DevOps insinyur

Edit file konfigurasi backend Terraform.

  1. Di repositori kloning, buka file backend.tf.

  2. Edit file untuk mengatur konfigurasi backend Terraform. Konfigurasi yang Anda tentukan dalam file ini tergantung pada lingkungan Anda. Untuk informasi selengkapnya, lihat Konfigurasi backend (dokumentasi Terraform).  

  3. Simpan dan tutup file backend.tf.

DevOps insinyur, Terraform

Edit file konfigurasi penyedia Terraform.

  1. Di repositori kloning, buka file provider.tf.

  2. Edit file untuk mengatur konfigurasi penyedia Terraform. Untuk informasi selengkapnya, lihat Konfigurasi penyedia (Dokumentasi Terraform). Tetapkan Wilayah AWS sebagai Wilayah tempat AWS Control Tower API tersedia.

  3. Simpan dan tutup file provider.tf.

DevOps insinyur, Terraform

Edit file konfigurasi.

  1. Di repositori kloning, buka file variabel.tfvars.

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

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

  4. Di controls bagian, dalam control_names parameter, masukkan pengidentifikasi global yang Anda salin.

  5. Di controls bagian, dalam organizational_unit_ids 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.

  6. Simpan dan tutup file variabel.tfvars. Untuk contoh file variabel.tfvars yang diperbarui, lihat bagian Informasi tambahan dari pola ini.

DevOps insinyur, AWS Umum, Terraform

Asumsikan peran IAM dalam akun manajemen.

Di akun manajemen, asumsikan peran IAM yang memiliki izin untuk menyebarkan file konfigurasi Terraform. Untuk informasi selengkapnya tentang izin yang diperlukan dan kebijakan sampel, lihat Izin hak istimewa terkecil untuk peran IAM di bagian Informasi tambahan. Untuk informasi selengkapnya tentang mengasumsikan peran IAM dalam AWS CLI, lihat Menggunakan peran IAM dalam. AWS CLI

DevOps insinyur, AWS Umum

Menyebarkan file konfigurasi.

  1. Masukkan perintah berikut untuk menginisialisasi Terraform.

    $ terraform init -upgrade
  2. Masukkan perintah berikut untuk melihat pratinjau perubahan dibandingkan keadaan saat ini.

    $ terraform plan -var-file="variables.tfvars"
  3. Tinjau perubahan konfigurasi dalam paket Terraform dan konfirmasikan bahwa Anda ingin menerapkan perubahan ini di organisasi.

  4. Masukkan perintah berikut untuk menyebarkan sumber daya.

    $ terraform apply -var-file="variables.tfvars"
DevOps insinyur, AWS Umum, Terraform
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan perintah destroy.

Masukkan perintah berikut untuk menghapus sumber daya yang digunakan oleh pola ini.

$ terraform destroy -var-file="variables.tfvars"
DevOps insinyur, AWS Umum, Terraform

Pemecahan Masalah

IsuSolusi

Error: creating ControlTower Control ValidationException: Guardrail <control ID> is already enabled on organizational unit <OU ID> kesalahan

Kontrol yang Anda coba aktifkan sudah diaktifkan di OU target. Kesalahan ini dapat terjadi jika pengguna secara manual mengaktifkan kontrol melalui AWS Management Console, melalui AWS Control Tower atau melalui AWS Organizations. Untuk menerapkan file konfigurasi Terraform, Anda dapat menggunakan salah satu opsi berikut.

Opsi 1: Perbarui file status Terraform saat ini

Anda dapat mengimpor sumber daya ke file status Terraform saat ini. Saat Anda menjalankan kembali apply perintah, Terraform akan melewati sumber daya ini. Lakukan hal berikut untuk mengimpor sumber daya ke status Terraform saat ini:

  1. Di akun AWS Control Tower manajemen, masukkan perintah berikut untuk mengambil daftar Nama Sumber Daya Amazon (ARNs) untuk OUs, di <root-ID> mana root organisasi. Untuk informasi selengkapnya tentang mengambil ID ini, lihat Melihat detail root.

    aws organizations list-organizational-units-for-parent --parent-id <root-ID>
  2. Untuk setiap OU yang dikembalikan pada langkah sebelumnya, masukkan perintah berikut, di <OU-ARN> mana ARN dari OU.

    aws controltower list-enabled-controls --target-identifier <OU-ARN>
  3. Salin ARNs dan lakukan impor Terraform dalam modul yang diperlukan sehingga disertakan dalam status Terraform. Untuk petunjuk, lihat Impor (dokumentasi Terraform).

  4. Ulangi langkah-langkah dalam Menyebarkan konfigurasi di bagian Epik.

Opsi 2: Nonaktifkan kontrol

Jika Anda bekerja di lingkungan non-produksi, Anda dapat menonaktifkan kontrol di konsol. Aktifkan kembali dengan mengulangi langkah-langkah di Deploy konfigurasi di bagian Epics. Pendekatan ini tidak direkomendasikan untuk lingkungan produksi karena ada periode waktu ketika kontrol akan dinonaktifkan. Jika Anda ingin menggunakan opsi ini di lingkungan produksi, Anda dapat menerapkan kontrol sementara, seperti menerapkan SCP sementara. AWS Organizations

Sumber daya terkait

AWS dokumentasi

Sumber daya lainnya

Informasi tambahan

Contoh variabel.file tfvars

Berikut ini adalah contoh dari file variabel.tfvars yang diperbarui. Sampel ini mengaktifkan kontrol AWS-GR_ENCRYPTED_VOLUME (global ID:) dan kontrol AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED (ID global:503uicglhjkokaajywfpt6ros). 50z1ot237wl8u1lv5ufau6qqo Untuk daftar global IDs, lihat Semua pengidentifikasi global dalam AWS Control Tower dokumentasi.

Contoh berikut juga memungkinkan kontrol yang memiliki parameter seperti CT.S3.PV.5 (global ID:7mo7a2h2ebsq71l8k6uzr96ou) dan CT.SECRETSMANAGER.PV.1 (global ID:). dvhe47fxg5o6lryqrq9g6sxg4 Untuk daftar kontrol dengan parameter, lihat Kontrol dengan parameter dalam AWS Control Tower dokumentasi.

controls = [ { control_names = [ "503uicglhjkokaajywfpt6ros", # AWS-GR_ENCRYPTED_VOLUMES ... ], organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...], }, { control_names = [ "50z1ot237wl8u1lv5ufau6qqo", # AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED ... ], organizational_unit_ids = ["ou-1111-11111111"...], }, ] controls_with_params = [ { control_names = [ { "7mo7a2h2ebsq71l8k6uzr96ou" = { # CT.S3.PV.5 parameters = { "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"], "ExemptedResourceArns" : [], } } }, { "dvhe47fxg5o6lryqrq9g6sxg4" = { # CT.SECRETSMANAGER.PV.1 parameters = { "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"], } } }, ... ], organizational_unit_ids = ["ou-1111-11111111"...] }, { control_names = [ { "dvuaav61i5cnfazfelmvn9m6k" = { # AWS-GR_DISALLOW_CROSS_REGION_NETWORKING parameters = { "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"], } } }, { "41ngl8m5c4eb1myoz0t707n7h" = { # AWS-GR_DISALLOW_VPC_INTERNET_ACCESS parameters = { "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"], } } }, ... ], organizational_unit_ids = ["ou-2222-22222222"...] } ]

Izin hak istimewa paling sedikit untuk peran IAM

Pola ini mengharuskan Anda mengambil peran IAM dalam akun manajemen. Praktik terbaik adalah mengambil peran dengan izin sementara dan membatasi izin sesuai dengan prinsip hak istimewa paling sedikit. Kebijakan contoh berikut memungkinkan tindakan minimum yang diperlukan untuk mengaktifkan atau menonaktifkan AWS Control Tower kontrol.

{ "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:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy" ], "Resource": "*" } ] }