Buat pipeline untuk gambar kontainer yang diperkeras menggunakan EC2 Image Builder dan Terraform - AWS Prescriptive Guidance

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

Mike Saintcross dan Andrew Ranes, Amazon Web Services

Ringkasan

Pola ini membangun pipeline EC2 Image Builder yang menghasilkan image container dasar 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 di bagian komponen STIG Linux dari dokumentasi EC2 Image Builder.) Ini disebut sebagai gambar wadah emas.

Build ini mencakup dua EventBridge aturan Amazon. Satu aturan memulai pipeline image container ketika temuan Amazon Inspector 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. Aturan lain mengirimkan pemberitahuan ke antrian Amazon Simple Queue Service (Amazon SQS) 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.

Prasyarat dan batasan

Prasyarat

  • Akun AWS tempat Anda dapat menerapkan infrastruktur.

  • AWS Command Line Interface (AWS CLI) diinstal untuk menyetel kredensi AWS Anda untuk penerapan lokal.

  • Terraform diunduh dan diatur dengan mengikuti instruksi dalam dokumentasi Terraform.

  • Git (jika Anda menyediakan dari mesin lokal).

  • Peran dalam akun AWS yang dapat Anda gunakan untuk membuat sumber daya AWS.

  • Semua variabel didefinisikan dalam file.tfvars.  Atau, Anda dapat menentukan semua variabel saat menerapkan konfigurasi Terraform.

Batasan

Versi produk

  • Amazon Linux 2

  • AWS CLI versi 1.1 atau yang lebih baru

Arsitektur

Tumpukan teknologi target

Pola ini menciptakan 43 sumber daya, termasuk:

  • Dua bucket Amazon Simple Storage Service (Amazon S3): satu untuk file komponen pipeline dan satu untuk akses server dan log aliran Amazon VPC

  • Repositori ECR Amazon

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

├── 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.tfberisi sumber daya unggah Amazon S3 untuk mengunggah konten direktori. /files Anda juga dapat menambahkan file YAMM komponen kustom secara modular di sini juga.

  • /filesberisi .yml file yang menentukan komponen yang digunakan dalamcomponents.tf.

  • image.tfberisi definisi untuk sistem operasi gambar dasar. Di sinilah Anda dapat memodifikasi definisi untuk pipeline gambar dasar yang berbeda.

  • infr-config.tfdan dist-config.tf berisi sumber daya untuk infrastruktur AWS minimum yang diperlukan untuk memutar dan mendistribusikan gambar.

  • infra-network-config.tfberisi infrastruktur VPC minimum untuk menyebarkan gambar kontainer ke dalam.

  • hardening-pipeline.tfvarsberisi variabel Terraform yang akan digunakan pada waktu penerapan.

  • pipeline.tfmembuat dan mengelola pipeline EC2 Image Builder di Terraform.

  • recipes.tfadalah tempat Anda dapat menentukan campuran komponen yang berbeda untuk membuat resep wadah.

  • roles.tfberisi definisi kebijakan AWS Identity and Access Management (IAM) untuk profil instans Amazon Elastic Compute Cloud EC2 (Amazon) dan peran penerapan pipeline.

  • trigger-build.tfberisi EventBridge aturan dan sumber daya antrian SQS.

Arsitektur target

Arsitektur dan alur kerja untuk membangun pipa untuk gambar kontainer yang diperkeras

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.

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

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

  4. 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 Factory untuk lingkungan Terraform. Dalam hal ini, Anda harus menggunakan bucket S3 status backend 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 penyiapan, lihat artikel re:Post Bagaimana cara mengizinkan akun sekunder untuk mendorong atau menarik gambar di repositori gambar Amazon ECR saya? Misalnya, di mesin penjual otomatis akun 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, 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

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. Untuk menggunakan kode sampel, ikuti instruksi di bagian selanjutnya.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan kredensil lokal.

Siapkan kredensi sementara AWS Anda.

  1. Lihat apakah AWS CLI diinstal:

    $ aws --version aws-cli/1.16.249 Python/3.6.8...
    • Versi AWS CLI harus 1.1 atau lebih baru.

    • Jika perintah tidak ditemukan, instal AWS CLI.

  2. Jalankan aws configure dan berikan nilai-nilai berikut:

    $ aws configure AWS Access Key ID [*************xxxx]: <Your AWS access key ID> AWS Secret Access Key [**************xxxx]: <Your AWS secret access key> Default region name: [us-east-1]: <Your desired Region for deployment> Default output format [None]: <Your desired output format>
AWS DevOps

Kloning repositori.

  1. Kloning repositori yang disediakan dengan pola ini. Anda dapat menggunakan HTTPS atau Secure Shell (SSH).

    HTTPS:

    git clone https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline

    SSH:

    git clone git@github.com:aws-samples/terraform-ec2-image-builder-container-hardening-pipeline.git
  2. Arahkan ke direktori lokal Anda yang berisi solusi ini:

    cd terraform-ec2-image-builder-container-hardening-pipeline
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 sendiriaccount_id. Namun, Anda juga harus memodifikasi variabel lainnya agar sesuai dengan penerapan yang Anda inginkan. Semua variabel diperlukan.

account_id = "<DEPLOYMENT-ACCOUNT-ID>" aws_region = "us-east-1" vpc_name = "example-hardening-pipeline-vpc" kms_key_alias = "image-builder-container-key" ec2_iam_role_name = "example-hardening-instance-role" hardening_pipeline_role_name = "example-hardening-pipeline-role" aws_s3_ami_resources_bucket = "example-hardening-ami-resources-bucket-0123" image_name = "example-hardening-al2-container-image" ecr_name = "example-hardening-container-repo" recipe_version = "1.0.0" ebs_root_vol_size = 10

Berikut adalah deskripsi dari masing-masing variabel:

  • account_idNomor akun AWS yang ingin Anda gunakan solusinya.

  • aws_regionWilayah AWS tempat Anda ingin menerapkan solusinya.

  • vpc_name- Nama untuk infrastruktur VPC Anda.

  • kms_key_alias- Nama kunci AWS KMS yang akan digunakan oleh konfigurasi infrastruktur EC2 Image Builder.

  • ec2_iam_role_name- Nama untuk peran yang akan digunakan sebagai profil EC2 instance.

  • hardening_pipeline_role_name- Nama untuk peran yang akan digunakan untuk menyebarkan pipa pengerasan.

  • aws_s3_ami_resources_bucket- Nama untuk bucket S3 yang akan menampung semua file yang diperlukan untuk membangun pipeline dan gambar kontainer.

  • image_name- Nama gambar kontainer. Nilai ini harus antara 3 dan 50 karakter dan harus berisi karakter alfanumerik dan tanda hubung saja.

  • ecr_name- Nama registri Amazon ECR untuk menyimpan gambar kontainer.

  • recipe_version- Versi resep gambar. Nilai default adalah 1.0.0.

  • ebs_root_vol_sizeUkuran (dalam gigabyte) volume root Amazon Elastic Block Store (Amazon EBS). Nilai default adalah 10 gigabyte.

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.

terraform init

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

terraform init && terraform validate && terraform apply -var-file *.tfvars -auto-approve
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+ komponen yang tersedia dalam EC2 Image Builder untuk menyesuaikan build container. Untuk informasi selengkapnya, lihat bagian Komponen Buat versi baru resep kontainer di dokumentasi EC2 Image Builder.

Administrator AWS
TugasDeskripsiKeterampilan 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:

Apply complete! Resources: 43 added, 0 changed, 0 destroyed.
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:

terraform state list

Perintah ini mengembalikan daftar 43 sumber daya.

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Hapus infrastruktur dan gambar kontainer.

Setelah selesai bekerja dengan konfigurasi Terraform, Anda dapat menjalankan perintah berikut untuk menghapus sumber daya:

terraform init && terraform validate && terraform destroy -var-file *.tfvars -auto-approve
AWS DevOps

Pemecahan Masalah

IsuSolusi

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:

Error: configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.

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 dalam dokumentasi AWS CLI.

Sumber daya terkait