Gunakan Terraform untuk mengaktifkan Amazon secara otomatis GuardDuty untuk organisasi - AWS Prescriptive Guidance

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

Gunakan Terraform untuk mengaktifkan Amazon secara otomatis GuardDuty untuk organisasi

Aarthi Kannan, Amazon Web Services

Ringkasan

Amazon GuardDuty terus memantau akun Amazon Web Services (AWS) Anda dan menggunakan intelijen ancaman untuk mengidentifikasi aktivitas tak terduga dan berpotensi berbahaya dalam lingkungan AWS Anda. Mengaktifkan secara manual GuardDuty untuk beberapa akun atau organisasi, di beberapa Wilayah AWS, atau melalui AWS Management Console dapat menjadi rumit. Anda dapat mengotomatiskan proses dengan menggunakan alat infrastruktur sebagai kode (IAc), seperti Terraform, yang dapat menyediakan dan mengelola multi-akun, layanan Multi-wilayah, dan sumber daya di cloud.

AWS merekomendasikan penggunaan AWS Organizations untuk menyiapkan dan mengelola beberapa akun GuardDuty. Pola ini mematuhi rekomendasi itu. Salah satu manfaat dari pendekatan ini adalah bahwa, ketika akun baru dibuat atau ditambahkan ke organisasi, GuardDuty akan diaktifkan secara otomatis di akun ini untuk semua Wilayah yang didukung, tanpa perlu intervensi manual.

Pola ini menunjukkan cara menggunakan HashiCorp Terraform untuk mengaktifkan Amazon GuardDuty untuk tiga atau lebih akun Amazon Web Services (AWS) dalam suatu organisasi. Kode sampel yang disediakan dengan pola ini melakukan hal berikut:

  • Mengaktifkan GuardDuty semua akun AWS yang merupakan anggota organisasi target saat ini di AWS Organizations

  • Mengaktifkan fitur Auto-Enable GuardDuty, yang secara otomatis mengaktifkan GuardDuty akun apa pun yang ditambahkan ke organisasi target di masa mendatang

  • Memungkinkan Anda memilih Wilayah tempat Anda ingin mengaktifkan GuardDuty

  • Menggunakan akun keamanan organisasi sebagai administrator yang GuardDuty didelegasikan

  • Membuat bucket Amazon Simple Storage Service (Amazon S3) di akun logging dan GuardDuty mengonfigurasi untuk mempublikasikan temuan agregat dari semua akun di bucket ini

  • Menetapkan kebijakan siklus hidup yang mentransisikan temuan dari bucket S3 ke penyimpanan Amazon S3 Glacier Flexible Retrieval setelah 365 hari, secara default

Anda dapat menjalankan kode sampel ini secara manual, atau Anda dapat mengintegrasikannya ke dalam pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) Anda.

Target audiens

Pola ini direkomendasikan untuk pengguna yang memiliki pengalaman dengan Terraform, Python, dan GuardDuty AWS Organizations.

Prasyarat dan batasan

Prasyarat

  • Akun AWS aktif.

  • Organisasi disiapkan di AWS Organizations, dan berisi setidaknya tiga akun berikut:

    • Akun manajemen — Ini adalah akun tempat Anda menerapkan kode Terraform, baik mandiri maupun sebagai bagian dari pipeline. CI/CD Status Terraform juga disimpan di akun ini.

    • Akun keamanan — Akun ini digunakan sebagai administrator yang GuardDuty didelegasikan. Untuk informasi selengkapnya, lihat Pertimbangan penting untuk administrator yang GuardDuty didelegasikan (dokumentasi)GuardDuty .

    • Akun logging — Akun ini berisi bucket S3 tempat GuardDuty mempublikasikan temuan agregat dari semua akun anggota.

    Untuk informasi selengkapnya tentang cara menyiapkan organisasi dengan konfigurasi yang diperlukan, lihat Membuat struktur akun (AWS Well-Architected Labs).

  • Bucket Amazon S3 dan tabel Amazon DynamoDB yang berfungsi sebagai backend jarak jauh untuk menyimpan status Terraform di akun manajemen. Untuk informasi lebih lanjut tentang penggunaan backend jarak jauh untuk status Terraform, lihat Backend S3 (dokumentasi Terraform). Untuk contoh kode yang mengatur manajemen status jarak jauh dengan backend S3, lihat remote-state-s3-backend (Terraform Registry). Perhatikan persyaratan berikut:

    • Bucket S3 dan tabel DynamoDB harus berada di Region yang sama.

    • Saat membuat tabel DynamoDB, kunci partisi LockID harus (case-sensitive), dan tipe kunci partisi harus String. Semua pengaturan tabel lainnya harus pada nilai default mereka. Untuk informasi selengkapnya, lihat Tentang kunci utama dan Membuat tabel (dokumentasi DynamoDB).

  • Bucket S3 yang akan digunakan untuk menyimpan log akses untuk bucket S3 yang GuardDuty akan mempublikasikan temuan. Untuk informasi selengkapnya, lihat Mengaktifkan pencatatan akses server Amazon S3 (dokumentasi Amazon S3). Jika Anda menerapkan ke zona landing zone AWS Control Tower, Anda dapat menggunakan kembali bucket S3 di akun arsip log untuk tujuan ini.

  • Terraform versi 0.14.6 atau yang lebih baru diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Memulai — AWS (dokumentasi Terraform).

  • Python versi 3.9.6 atau yang lebih baru diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Rilis sumber (situs web Python).

  • AWS SDK untuk Python (Boto3) diinstal. Untuk informasi selengkapnya, lihat Instalasi (dokumentasi Boto3).

  • jq diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Unduh jq (dokumentasi jq).

Batasan

  • Pola ini mendukung sistem operasi macOS dan Amazon Linux 2. Pola ini belum diuji untuk digunakan dalam sistem operasi Windows.

    catatan

    Amazon Linux 2 mendekati akhir dukungan. Untuk informasi selengkapnya, lihat Amazon Linux 2 FAQs.

  • GuardDuty harus belum diaktifkan di salah satu akun, di salah satu Wilayah target.

  • Solusi IAc dalam pola ini tidak menerapkan prasyarat.

  • Pola ini dirancang untuk landing zone AWS yang mematuhi praktik terbaik berikut:

    • Landing zone dibuat dengan menggunakan AWS Control Tower.

    • Akun AWS terpisah digunakan untuk keamanan dan pencatatan.

Versi produk

  • Terraform versi 0.14.6 atau yang lebih baru. Kode sampel telah diuji untuk versi 1.2.8.

  • Python versi 3.9.6 atau yang lebih baru.

Arsitektur

Bagian ini memberikan gambaran tingkat tinggi dari solusi ini dan arsitektur yang ditetapkan oleh kode sampel. Diagram berikut menunjukkan sumber daya yang digunakan di berbagai akun di organisasi, dalam satu Wilayah AWS.

Diagram arsitektur yang menunjukkan sumber daya dalam manajemen, keamanan, pencatatan, dan akun anggota.
  1. Terraform membuat peran GuardDutyTerraformOrgRoleAWS Identity and Access Management (IAM) di akun keamanan dan akun logging.

  2. Terraform membuat bucket S3 di Wilayah AWS default di akun logging. Bucket ini digunakan sebagai tujuan penerbitan untuk mengumpulkan semua GuardDuty temuan di semua Wilayah dan dari semua akun di organisasi. Terraform juga membuat kunci AWS Key Management Service (AWS KMS) di akun keamanan yang digunakan untuk mengenkripsi temuan di bucket S3 dan mengonfigurasi pengarsipan otomatis temuan dari bucket S3 ke dalam penyimpanan S3 Glacier Flexible Retrieval.

  3. Dari akun manajemen, Terraform menetapkan akun keamanan sebagai administrator yang didelegasikan untuk. GuardDuty Ini berarti bahwa akun keamanan sekarang mengelola GuardDuty layanan untuk semua akun anggota, termasuk akun manajemen. Akun anggota individu tidak dapat menangguhkan atau menonaktifkan GuardDuty sendiri.

  4. Terraform membuat GuardDuty detektor di akun keamanan, untuk administrator yang GuardDuty didelegasikan.

  5. Jika belum diaktifkan, Terraform mengaktifkan perlindungan S3 di. GuardDuty Untuk informasi selengkapnya, lihat perlindungan Amazon S3 di Amazon GuardDuty (GuardDuty dokumentasi).

  6. Terraform mendaftarkan semua akun anggota aktif saat ini di organisasi sebagai anggota. GuardDuty

  7. Terraform mengonfigurasi administrator yang GuardDuty didelegasikan untuk mempublikasikan temuan agregat dari semua akun anggota ke bucket S3 di akun logging.

  8. Terraform mengulangi langkah 3 hingga 7 untuk setiap Wilayah AWS yang Anda pilih.

Otomatisasi dan skala

Kode sampel yang disediakan dimodulasi sehingga Anda dapat mengintegrasikannya ke dalam CI/CD pipeline untuk penerapan otomatis.

Alat

Layanan AWS

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

  • Amazon GuardDuty adalah layanan pemantauan keamanan berkelanjutan yang menganalisis dan memproses log untuk mengidentifikasi aktivitas tak terduga dan berpotensi tidak sah di lingkungan AWS Anda.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke sumber daya AWS dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

  • AWS Key Management Service (AWS KMS) membantu Anda membuat dan mengontrol kunci kriptografi untuk melindungi data Anda.

  • AWS Organizations adalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

  • AWS SDK for Python (Boto3) adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, pustaka, atau skrip Python Anda dengan layanan AWS.

Alat dan layanan lainnya

  • HashiCorp Terraform adalah aplikasi antarmuka baris perintah yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.

  • Python adalah bahasa pemrograman tujuan umum.

  • jq adalah prosesor baris perintah yang membantu Anda bekerja dengan file JSON.

Repositori kode

Kode untuk pola ini tersedia di GitHub, di organizations-with-terraform repositori amazon-guardduty-for-aws-.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori.

Dalam shell Bash, jalankan perintah berikut. Di Kloning repositori di bagian Informasi tambahan, Anda dapat menyalin perintah lengkap yang berisi URL repositori. GitHub Ini mengkloning amazon-guardduty-for-aws- organizations-with-terraform repositori dari. GitHub

git clone <github-repository-url>
DevOps insinyur

Edit file konfigurasi Terraform.

  1. Dalam root folder repositori kloning, replikasi file configuration.json.sample dengan menjalankan perintah berikut.

    cp configuration.json.sample configuration.json
  2. Edit file configuration.json baru, dan tentukan nilai untuk masing-masing variabel berikut:

    • management_acc_id— ID Akun akun manajemen.

    • delegated_admin_acc_id— ID Akun akun keamanan.

    • logging_acc_id— ID Akun dari akun logging.

    • target_regions— Daftar Wilayah AWS yang dipisahkan koma di mana Anda ingin mengaktifkan. GuardDuty

    • organization_idAWS Organizations ID dari organisasi tempat Anda mengaktifkan GuardDuty.

    • default_region— Wilayah tempat status Terraform Anda disimpan di akun manajemen. Ini adalah Wilayah yang sama tempat Anda menerapkan bucket S3 dan tabel DynamoDB untuk backend Terraform.

    • role_to_assume_for_role_creation— Nama yang ingin Anda tetapkan ke peran IAM baru di akun keamanan dan pencatatan. Anda membuat peran baru ini di cerita selanjutnya. Terraform mengasumsikan peran ini untuk membuat peran GuardDutyTerraformOrgRole IAM dalam akun keamanan dan pencatatan.

    • finding_publishing_frequency— Frekuensi di mana GuardDuty menerbitkan temuan ke bucket S3.

    • guardduty_findings_bucket_region— Wilayah Pilihan tempat Anda ingin membuat bucket S3 untuk temuan yang dipublikasikan.

    • logging_acc_s3_bucket_name— Nama yang disukai untuk ember S3 untuk temuan yang dipublikasikan.

    • security_acc_kms_key_alias— Alias AWS KMS untuk kunci yang digunakan untuk mengenkripsi temuan. GuardDuty

    • s3_access_log_bucket_name— Nama bucket S3 yang sudah ada sebelumnya tempat Anda ingin mengumpulkan log akses untuk bucket S3 yang digunakan untuk temuan. GuardDuty Bucket ini harus berada di Wilayah AWS yang sama dengan bucket GuardDuty temuan.

    • tfm_state_backend_s3_bucket— Nama bucket S3 yang sudah ada sebelumnya untuk menyimpan status backend jarak jauh Terraform.

    • tfm_state_backend_dynamodb_table— Nama tabel DynamoDB yang sudah ada sebelumnya untuk mengunci status Terraform.

  3. Simpan dan tutup file konfigurasi .

DevOps insinyur, AWS Umum, Terraform, Python

Hasilkan CloudFormation template untuk peran IAM baru.

Pola ini mencakup solusi IAc untuk membuat dua CloudFormation template. Template ini membuat dua peran IAM yang digunakan Terraform selama proses penyiapan. Template ini mematuhi praktik terbaik keamanan izin hak istimewa paling sedikit.

  1. Di shell Bash, di root folder repositori, navigasikan ke. cfn-templates/ Folder ini berisi file CloudFormation template dengan rintisan.

  2. Jalankan perintah berikut. Ini menggantikan stub dengan nilai yang Anda berikan dalam file configuration.json.

    bash scripts/replace_config_stubs.sh
  3. Konfirmasikan bahwa CloudFormation templat berikut telah dibuat di cfn-templates/ folder:

    • management-account-role.yaml — File ini berisi definisi peran dan izin terkait untuk peran IAM di akun manajemen, yang memiliki izin minimum yang diperlukan untuk menyelesaikan pola ini.

    • role-to-assume-for-role-creation.yaml — File ini berisi definisi peran dan izin terkait untuk peran IAM dalam akun keamanan dan logging. Terraform mengasumsikan peran ini untuk membuat peran dalam akun GuardDutyTerraformOrgRoleini.

DevOps insinyur, AWS Umum

Buat peran IAM.

Mengikuti petunjuk dalam Membuat tumpukan (CloudFormation dokumentasi), lakukan hal berikut:

  1. Terapkan tumpukan role-to-assume-for-role-creation.yaml di akun keamanan dan pencatatan.

  2. Terapkan management-account-roletumpukan.yaml di akun manajemen. Saat Anda berhasil membuat tumpukan dan melihat status CREATE_COMPLETE tumpukan, dalam output, catat Amazon Resource Name (ARN) dari peran baru ini.

DevOps insinyur, AWS Umum

Asumsikan peran IAM dalam akun manajemen.

Sebagai praktik terbaik keamanan, kami sarankan Anda mengambil peran management-account-roleIAM baru sebelum melanjutkan. Di AWS Command Line Interface (AWS CLI), masukkan perintah di Asumsikan peran IAM akun manajemen di bagian Informasi Tambahan.

DevOps insinyur, AWS Umum

Jalankan skrip pengaturan.

Di root folder repositori, jalankan perintah berikut untuk memulai skrip pengaturan.

bash scripts/full-setup.sh

Skrip full-setup.sh melakukan tindakan berikut:

  • Mengekspor semua nilai konfigurasi sebagai variabel lingkungan

  • Menghasilkan file kode backend.tf dan terraform.tfvars untuk setiap modul Terraform

  • Mengaktifkan akses tepercaya untuk GuardDuty dalam organisasi melalui AWS CLI.

  • Mengimpor negara organisasi ke negara bagian Terraform

  • Membuat bucket S3 untuk mempublikasikan temuan di akun logging

  • Membuat kunci AWS KMS untuk mengenkripsi temuan di akun keamanan

  • GuardDuty Aktifkan di seluruh organisasi, di semua Wilayah yang dipilih, seperti yang dijelaskan di bagian Arsitektur

DevOps insinyur, Python
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan skrip pembersihan.

Jika Anda menggunakan pola ini GuardDuty untuk mengaktifkan organisasi dan ingin menonaktifkan GuardDuty, di root folder repositori, jalankan perintah berikut untuk memulai skrip cleanup-gd.sh.

bash scripts/cleanup-gd.sh

Skrip ini dinonaktifkan GuardDuty di organisasi target, menghapus sumber daya apa pun yang diterapkan, dan mengembalikan organisasi ke status sebelumnya sebelum menggunakan Terraform untuk mengaktifkan. GuardDuty

catatan

Skrip ini tidak menghapus file status Terraform atau mengunci file dari backend lokal dan jarak jauh. Jika Anda perlu melakukannya, Anda harus melakukan tindakan ini secara manual. Selain itu, skrip ini tidak menghapus organisasi yang diimpor atau akun yang dikelola olehnya. Akses tepercaya untuk GuardDuty tidak dinonaktifkan sebagai bagian dari skrip pembersihan.

DevOps insinyur, AWS Umum, Terraform, Python

Hapus peran IAM.

Hapus tumpukan yang dibuat dengan templat role-to-assume-for-role-creation.yaml dan .yaml. management-account-role CloudFormation Untuk informasi selengkapnya, lihat Menghapus tumpukan (CloudFormation dokumentasi).

DevOps insinyur, AWS Umum

Sumber daya terkait

Dokumentasi AWS

Pemasaran AWS

Sumber daya lainnya

Informasi tambahan

Kloning repositori

Jalankan perintah berikut untuk mengkloning GitHub repositori.

git clone https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform

Asumsikan peran IAM akun manajemen

Untuk mengasumsikan peran IAM dalam akun manajemen, jalankan perintah berikut. Ganti <IAM role ARN> dengan ARN dari peran IAM.

export ROLE_CREDENTIALS=$(aws sts assume-role --role-arn <IAM role ARN> --role-session-name AWSCLI-Session --output json) export AWS_ACCESS_KEY_ID=$(echo $ROLE_CREDENTIALS | jq .Credentials.AccessKeyId | sed 's/"//g') export AWS_SECRET_ACCESS_KEY=$(echo $ROLE_CREDENTIALS | jq .Credentials.SecretAccessKey | sed 's/"//g') export AWS_SESSION_TOKEN=$(echo $ROLE_CREDENTIALS | jq .Credentials.SessionToken | sed 's/"//g')