

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
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization"></a>

*Aarthi Kannan, Amazon Web Services*

## Ringkasan
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-summary"></a>

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
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-prereqs"></a>

**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](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_organizations.html#delegated_admin_important))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](https://www.wellarchitectedlabs.com/cost/100_labs/100_1_aws_account_setup/2_account_structure/) (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](https://www.terraform.io/language/settings/backends/s3) (dokumentasi Terraform). Untuk contoh kode yang mengatur manajemen status jarak jauh dengan backend S3, lihat [remote-state-s3-backend](https://registry.terraform.io/modules/nozaq/remote-state-s3-backend/aws/latest) (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](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) dan [Membuat tabel (dokumentasi](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html) (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](https://learn.hashicorp.com/collections/terraform/aws-get-started) (dokumentasi Terraform).
+ Python versi 3.9.6 atau yang lebih baru diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [Rilis sumber](https://www.python.org/downloads/source/) (situs web Python).
+ AWS SDK untuk Python (Boto3) diinstal. Untuk informasi selengkapnya, lihat [Instalasi](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation) (dokumentasi Boto3).
+ jq diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [Unduh jq](https://stedolan.github.io/jq/download/) (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](https://aws.amazon.com/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
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-architecture"></a>

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.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c9b68627-b68e-47a6-9933-d0f36ea10ae2/images/86193749-eef9-4d63-8a7f-daa0cd03fbfe.png)


1. Terraform membuat peran **GuardDutyTerraformOrgRole**AWS Identity and Access Management (IAM) di akun keamanan dan akun logging.

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

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

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

1. Jika belum diaktifkan, Terraform mengaktifkan perlindungan S3 di. GuardDuty Untuk informasi selengkapnya, lihat [perlindungan Amazon S3 di Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html) (GuardDuty dokumentasi).

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

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

1. 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
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-tools"></a>

**Layanan AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.
+ [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) membantu Anda membuat dan mengontrol kunci kriptografi untuk melindungi data Anda.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
+ [AWS SDK for Python (](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)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](https://www.terraform.io/docs) adalah aplikasi antarmuka baris perintah yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.
+ [Python adalah bahasa](https://www.python.org/) pemrograman tujuan umum.
+ [jq](https://stedolan.github.io/jq/download/) 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-](https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform).

## Epik
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-epics"></a>

### Aktifkan GuardDuty dalam organisasi
<a name="enable-guardduty-in-the-organization"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Dalam shell Bash, jalankan perintah berikut. Di *Kloning repositori* di bagian [Informasi tambahan](#use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional), Anda dapat menyalin perintah lengkap yang berisi URL repositori. GitHub Ini mengkloning [amazon-guardduty-for-aws- organizations-with-terraform](https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform) repositori dari. GitHub<pre>git clone <github-repository-url></pre> | DevOps insinyur | 
| Edit file konfigurasi Terraform. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | 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.](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps insinyur, AWS Umum | 
| Buat peran IAM. | Mengikuti petunjuk dalam [Membuat tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) (CloudFormation dokumentasi), lakukan hal berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps insinyur, AWS Umum | 
| Asumsikan peran IAM dalam akun manajemen. | Sebagai praktik terbaik keamanan, kami sarankan Anda mengambil peran **management-account-role**IAM baru sebelum melanjutkan. Di AWS Command Line Interface (AWS CLI), masukkan perintah *di Asumsikan peran IAM akun manajemen* di [bagian](#use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional) Informasi Tambahan. | DevOps insinyur, AWS Umum | 
| Jalankan skrip pengaturan. | Di `root` folder repositori, jalankan perintah berikut untuk memulai skrip pengaturan.<pre>bash scripts/full-setup.sh</pre><br />Skrip **full-setup.sh** melakukan tindakan berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps insinyur, Python | 

### (Opsional) Nonaktifkan GuardDuty di organisasi
<a name="optional-disable-guardduty-in-the-organization"></a>


| Tugas | Deskripsi | Keterampilan 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**.<pre>bash scripts/cleanup-gd.sh</pre><br />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. GuardDutySkrip 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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation dokumentasi). | DevOps insinyur, AWS Umum | 

## Sumber daya terkait
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-resources"></a>

*Dokumentasi AWS*
+ [Mengelola beberapa akun](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_accounts.html) (GuardDuty dokumentasi)
+ [Memberikan hak istimewa paling sedikit (dokumentasi](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) IAM)

*Pemasaran AWS*
+ [Amazon GuardDuty](https://aws.amazon.com/guardduty/)
+ [AWS Organizations](https://aws.amazon.com/organizations/)

*Sumber daya lainnya*
+ [Terraform](https://www.terraform.io/)
+ [Dokumentasi CLI Terraform](https://www.terraform.io/cli)

## Informasi tambahan
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional"></a>

**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')
```