

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

# Buat pipeline untuk gambar kontainer yang diperkeras menggunakan EC2 Image Builder dan Terraform
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform"></a>

*Mike Saintcross dan Andrew Ranes, Amazon Web Services*

## Ringkasan
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-summary"></a>

Pola ini membangun [pipeline EC2 Image Builder yang menghasilkan image](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-image-pipeline.html) container dasar [Amazon Linux 2](https://aws.amazon.com/amazon-linux-2/) yang diperkeras. Terraform digunakan sebagai alat infrastruktur sebagai kode (IAc) untuk mengonfigurasi dan menyediakan infrastruktur yang digunakan untuk membuat gambar kontainer yang diperkeras. Resepnya membantu Anda menyebarkan image container Amazon Linux 2 berbasis Docker yang telah dikeraskan menurut Red Hat Enterprise Linux (RHEL) 7 STIG Versi 3 Release 7 - Medium. (Lihat [STIG-Build-Linux-Medium versi 2022.2.1](https://docs.aws.amazon.com/imagebuilder/latest/userguide/toe-stig.html#linux-os-stig) di bagian *komponen STIG Linux* dari dokumentasi EC2 Image Builder.) Ini disebut sebagai gambar wadah *emas*.

Build ini mencakup dua [ EventBridge aturan Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html). Satu aturan memulai pipeline image container ketika [temuan Amazon Inspector](https://docs.aws.amazon.com/inspector/latest/user/findings-managing.html) **High** atau **Critical** sehingga gambar yang tidak aman diganti. Aturan ini mengharuskan pemindaian yang ditingkatkan Amazon Inspector dan Amazon Elastic Container Registry (Amazon [ECR) Registry ECR) agar diaktifkan](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning-enhanced.html). Aturan lain mengirimkan pemberitahuan ke antrian Amazon Simple Queue Service (Amazon [SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-types.html) setelah push gambar berhasil ke repositori Amazon ECR, untuk membantu Anda menggunakan gambar kontainer terbaru.

**catatan**  
Amazon Linux 2 mendekati akhir dukungan. Untuk informasi selengkapnya, lihat [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).

## Prasyarat dan batasan
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-prereqs"></a>

**Prasyarat**
+ [Akun AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) tempat Anda dapat menerapkan infrastruktur.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) diinstal untuk menyetel kredensi AWS Anda untuk penerapan lokal.
+ Terraform [diunduh](https://developer.hashicorp.com/terraform/downloads) dan diatur dengan mengikuti [instruksi](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) dalam dokumentasi Terraform.
+ [Git](https://git-scm.com/) (jika Anda menyediakan dari mesin lokal).
+ [Peran](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) dalam akun AWS yang dapat Anda gunakan untuk membuat sumber daya AWS.
+ Semua variabel didefinisikan dalam [file.tfvars](https://developer.hashicorp.com/terraform/tutorials/configuration-language/variables).  Atau, Anda dapat menentukan semua variabel saat menerapkan konfigurasi Terraform.

**Batasan**
+ Solusi ini menciptakan infrastruktur Amazon Virtual Private Cloud (Amazon VPC) yang mencakup gateway [NAT dan gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) internet untuk konektivitas [internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) dari subnet pribadinya. Anda tidak dapat menggunakan [titik akhir VPC](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html), karena proses [bootstrap oleh AWS Task Orchestrator dan Executor () menginstal AWSTOE](https://aws.amazon.com/premiumsupport/knowledge-center/image-builder-pipeline-execution-error/) AWS CLI versi 2 dari internet.

**Versi produk**
+ Amazon Linux 2
+ AWS CLI versi 1.1 atau yang lebih baru

## Arsitektur
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-architecture"></a>

**Tumpukan teknologi target**

Pola ini menciptakan 43 sumber daya, termasuk:
+ Dua bucket Amazon Simple Storage Service (Amazon [S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html): satu untuk file komponen pipeline dan satu untuk akses server dan log aliran Amazon VPC
+ [Repositori ECR Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ Virtual Private Cloud (VPC) yang berisi subnet publik, subnet pribadi, tabel rute, gateway NAT, dan gateway internet
+ Pipeline, resep, dan komponen EC2 Image Builder
+ Gambar wadah
+ Kunci AWS Key Management Service (AWS KMS) untuk [enkripsi](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) gambar
+ Antrian SQS
+ Tiga peran: satu untuk menjalankan pipeline EC2 Image Builder, satu profil instance untuk EC2 Image Builder, dan satu untuk EventBridge aturan
+ Dua EventBridge aturan

**Struktur modul Terraform**

Untuk kode sumber, lihat GitHub repositori [Terraform Image EC2 Builder Container Hardening Pipeline](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline).

```
├── components.tf
├── config.tf
├── dist-config.tf
├── files
│   └──assumption-policy.json
├── hardening-pipeline.tfvars
├── image.tf
├── infr-config.tf
├── infra-network-config.tf
├── kms-key.tf
├── main.tf
├── outputs.tf
├── pipeline.tf
├── recipes.tf
├── roles.tf
├── sec-groups.tf
├── trigger-build.tf
└── variables.tf
```

**Rincian modul**
+ `components.tf`berisi sumber daya unggah Amazon S3 untuk mengunggah konten direktori. `/files` Anda juga dapat menambahkan file YAMM komponen kustom secara modular di sini juga.
+ `/files`berisi `.yml` file yang menentukan komponen yang digunakan dalam`components.tf`.
+ `image.tf`berisi definisi untuk sistem operasi gambar dasar. Di sinilah Anda dapat memodifikasi definisi untuk pipeline gambar dasar yang berbeda.
+ `infr-config.tf`dan `dist-config.tf` berisi sumber daya untuk infrastruktur AWS minimum yang diperlukan untuk memutar dan mendistribusikan gambar.
+ `infra-network-config.tf`berisi infrastruktur VPC minimum untuk menyebarkan gambar kontainer ke dalam.
+ `hardening-pipeline.tfvars`berisi variabel Terraform yang akan digunakan pada waktu penerapan.
+ `pipeline.tf`membuat dan mengelola pipeline EC2 Image Builder di Terraform.
+ `recipes.tf`adalah tempat Anda dapat menentukan campuran komponen yang berbeda untuk membuat resep wadah.
+ `roles.tf`berisi definisi kebijakan AWS Identity and Access Management (IAM) untuk profil instans Amazon Elastic Compute Cloud EC2 (Amazon) dan peran penerapan pipeline.
+ `trigger-build.tf`berisi EventBridge aturan dan sumber daya antrian SQS.

**Arsitektur target**

![\[Arsitektur dan alur kerja untuk membangun pipa untuk gambar kontainer yang diperkeras\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/4b16bdfa-4f34-41e9-a69a-d023253c8585/images/23443eca-132f-46ac-98bd-32a9e9359a77.png)


Diagram menggambarkan alur kerja berikut:

1. EC2 Image Builder membuat image kontainer dengan menggunakan resep yang ditentukan, yang menginstal pembaruan sistem operasi dan menerapkan RHEL Medium STIG ke image dasar Amazon Linux 2.

1. Gambar yang dikeraskan dipublikasikan ke registri ECR Amazon pribadi, dan EventBridge aturan mengirim pesan ke antrian SQS ketika gambar telah berhasil diterbitkan.

1. Jika Amazon Inspector dikonfigurasi untuk pemindaian yang disempurnakan, Amazon Inspector memindai registri Amazon ECR.

1. Jika Amazon Inspector menghasilkan temuan tingkat keparahan **Kritis** atau **Tinggi** untuk gambar, EventBridge aturan akan memicu pipeline Image Builder untuk berjalan lagi dan memublikasikan EC2 gambar yang baru dikeraskan.

**Otomatisasi dan skala**
+ Pola ini menjelaskan cara menyediakan infrastruktur dan membangun pipeline di komputer Anda. Namun, ini dimaksudkan untuk digunakan dalam skala. Alih-alih menerapkan modul Terraform secara lokal, Anda dapat menggunakannya di lingkungan multi-akun, seperti [AWS Control Tower dengan [Account](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/)](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html) Factory untuk lingkungan Terraform. Dalam hal ini, Anda harus menggunakan [bucket S3 status backend](https://developer.hashicorp.com/terraform/language/settings/backends/s3) untuk mengelola file status Terraform alih-alih mengelola status konfigurasi secara lokal.
+ Untuk penggunaan yang diskalakan, terapkan solusi ke satu akun pusat, seperti akun Layanan Bersama atau Layanan Umum, dari Control Tower atau model akun landing zone, dan berikan izin kepada akun konsumen untuk mengakses repositori Amazon ECR dan kunci AWS KMS. Untuk informasi lebih lanjut tentang pengaturan, lihat artikel re:Post [Bagaimana cara mengizinkan akun sekunder untuk mendorong atau menarik gambar di repositori gambar Amazon ECR saya](https://repost.aws/knowledge-center/secondary-account-access-ecr)? Misalnya, di [mesin penjual otomatis akun](https://www.hashicorp.com/resources/terraform-landing-zones-for-self-service-multi-aws-at-eventbrite) atau Account Factory untuk Terraform, tambahkan izin ke setiap baseline akun atau baseline penyesuaian akun untuk menyediakan akses ke repositori Amazon ECR dan kunci enkripsi tersebut.
+ Setelah pipeline image container di-deploy, Anda dapat memodifikasinya dengan menggunakan fitur EC2 Image Builder seperti [komponen](https://docs.aws.amazon.com/imagebuilder/latest/userguide/manage-components.html), yang membantu Anda mengemas lebih banyak komponen ke dalam build Docker.
+ Kunci AWS KMS yang digunakan untuk mengenkripsi image kontainer harus dibagikan di seluruh akun tempat gambar dimaksudkan untuk digunakan.
+ Anda dapat menambahkan dukungan untuk gambar lain dengan menduplikasi seluruh modul Terraform dan memodifikasi atribut berikut: `recipes.tf`
  + Ubah `parent_image = "amazonlinux:latest"` ke jenis gambar lain.
  + Ubah `repository_name` untuk menunjuk ke repositori Amazon ECR yang ada. Ini membuat pipeline lain yang menerapkan jenis gambar induk yang berbeda ke repositori Amazon ECR Anda yang ada.

## Alat
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-tools"></a>

**Alat**
+ Terraform (penyediaan IAc)
+ Git (jika penyediaan secara lokal)
+ AWS CLI versi 1 atau versi 2 (jika disediakan secara lokal)

**Kode**

Kode untuk pola ini ada di GitHub repositori [Terraform Image EC2 Builder Container Hardening Pipeline](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline). Untuk menggunakan kode sampel, ikuti instruksi di bagian selanjutnya.

## Epik
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-epics"></a>

### Penyediaan infrastruktur
<a name="provision-the-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan kredensil lokal. | Siapkan kredensi sementara AWS Anda.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Kloning repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Perbarui variabel. | Perbarui variabel dalam `hardening-pipeline.tfvars` file agar sesuai dengan lingkungan Anda dan konfigurasi yang Anda inginkan. Anda harus menyediakan milik Anda sendiri`account_id`. Namun, Anda juga harus memodifikasi variabel lainnya agar sesuai dengan penerapan yang Anda inginkan. Semua variabel diperlukan.<pre>account_id     = "<DEPLOYMENT-ACCOUNT-ID>"<br />aws_region     = "us-east-1"<br />vpc_name       = "example-hardening-pipeline-vpc"<br />kms_key_alias = "image-builder-container-key"<br />ec2_iam_role_name = "example-hardening-instance-role"<br />hardening_pipeline_role_name = "example-hardening-pipeline-role"<br />aws_s3_ami_resources_bucket = "example-hardening-ami-resources-bucket-0123"<br />image_name = "example-hardening-al2-container-image"<br />ecr_name = "example-hardening-container-repo"<br />recipe_version = "1.0.0" <br />ebs_root_vol_size = 10</pre>Berikut adalah deskripsi dari masing-masing variabel:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Inisialisasi Terraform. | Setelah memperbarui nilai variabel, Anda dapat menginisialisasi direktori konfigurasi Terraform. Menginisialisasi direktori konfigurasi mengunduh dan menginstal penyedia AWS, yang ditentukan dalam konfigurasi.<pre>terraform init</pre>Anda akan melihat pesan yang mengatakan Terraform telah berhasil diinisialisasi dan mengidentifikasi versi penyedia yang diinstal. | AWS DevOps | 
| Menyebarkan infrastruktur dan membuat gambar kontainer. | Gunakan perintah berikut untuk menginisialisasi, memvalidasi, dan menerapkan modul Terraform ke lingkungan dengan menggunakan variabel yang ditentukan dalam file Anda: `.tfvars`<pre>terraform init && terraform validate && terraform apply -var-file *.tfvars -auto-approve</pre> | AWS DevOps | 
| Sesuaikan wadahnya. | Anda dapat membuat versi baru resep kontainer setelah EC2 Image Builder menerapkan pipeline dan resep awal.Anda dapat menambahkan salah satu dari 31\$1 komponen yang tersedia dalam EC2 Image Builder untuk menyesuaikan build container. Untuk informasi selengkapnya, lihat bagian *Komponen* [Buat versi baru resep kontainer](https://docs.aws.amazon.com/imagebuilder/latest/userguide/create-container-recipes.html) di dokumentasi EC2 Image Builder. | Administrator AWS | 

### Validasi sumber daya
<a name="validate-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi penyediaan infrastruktur AWS. | Setelah Anda berhasil menyelesaikan `apply` perintah Terraform pertama Anda, jika Anda menyediakan secara lokal, Anda akan melihat cuplikan ini di terminal mesin lokal Anda:<pre>Apply complete! Resources: 43 added, 0 changed, 0 destroyed.</pre> | AWS DevOps | 
| Validasi sumber daya infrastruktur AWS individual. | Untuk memvalidasi sumber daya individual yang digunakan, jika Anda menyediakan secara lokal, Anda dapat menjalankan perintah berikut:<pre>terraform state list</pre>Perintah ini mengembalikan daftar 43 sumber daya. | AWS DevOps | 

### Hapus sumber daya
<a name="remove-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus infrastruktur dan gambar kontainer. | Setelah selesai bekerja dengan konfigurasi Terraform, Anda dapat menjalankan perintah berikut untuk menghapus sumber daya:<pre>terraform init && terraform validate && terraform destroy -var-file *.tfvars -auto-approve</pre> | AWS DevOps | 

## Pemecahan masalah
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Kesalahan memvalidasi kredensi penyedia | Saat Anda menjalankan Terraform `apply` atau `destroy` perintah dari mesin lokal Anda, Anda mungkin mengalami kesalahan yang mirip dengan berikut ini:<pre>Error: configuring Terraform AWS Provider: error validating provider <br />credentials: error calling sts:GetCallerIdentity: operation error STS: <br />GetCallerIdentity, https response error StatusCode: 403, RequestID: <br />123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: <br />The security token included in the request is invalid.</pre>Kesalahan ini disebabkan oleh kedaluwarsa token keamanan untuk kredensil yang digunakan dalam konfigurasi mesin lokal Anda.Untuk mengatasi kesalahan, lihat [Mengatur dan melihat setelan konfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) dalam dokumentasi AWS CLI. | 

## Sumber daya terkait
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-resources"></a>
+ [Pipa Pengerasan Kontainer EC2 Image Builder Terraform (repositori](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline)) GitHub 
+ [EC2 Dokumentasi Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)
+ [AWS Control Tower Account Factory untuk Terraform](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/) (postingan blog AWS)
+ [Bucket S3 status backend (dokumentasi Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3))
+ [Menginstal atau memperbarui versi terbaru AWS CLI (dokumentasi](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) AWS CLI)
+ [Unduh Terraform](https://developer.hashicorp.com/terraform/downloads)