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
LockIDharus (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.

Terraform membuat peran GuardDutyTerraformOrgRoleAWS Identity and Access Management (IAM) di akun keamanan dan akun logging.
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.
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.
Terraform membuat GuardDuty detektor di akun keamanan, untuk administrator yang GuardDuty didelegasikan.
Jika belum diaktifkan, Terraform mengaktifkan perlindungan S3 di. GuardDuty Untuk informasi selengkapnya, lihat perlindungan Amazon S3 di Amazon GuardDuty (GuardDuty dokumentasi).
Terraform mendaftarkan semua akun anggota aktif saat ini di organisasi sebagai anggota. GuardDuty
Terraform mengonfigurasi administrator yang GuardDuty didelegasikan untuk mempublikasikan temuan agregat dari semua akun anggota ke bucket S3 di akun logging.
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
| Tugas | Deskripsi | Keterampilan 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
| DevOps insinyur |
Edit file konfigurasi Terraform. |
| 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.
| DevOps insinyur, AWS Umum |
Buat peran IAM. | Mengikuti petunjuk dalam Membuat tumpukan (CloudFormation dokumentasi), lakukan hal berikut:
| 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
Skrip full-setup.sh melakukan tindakan berikut:
| DevOps insinyur, Python |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Jalankan skrip pembersihan. | Jika Anda menggunakan pola ini GuardDuty untuk mengaktifkan organisasi dan ingin menonaktifkan GuardDuty, di
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 catatanSkrip 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
Mengelola beberapa akun (GuardDuty dokumentasi)
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')