

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Crea una pipeline per immagini di container rinforzate utilizzando Image EC2 Builder e Terraform
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform"></a>

*Mike Saintcross e Andrew Ranes, Amazon Web Services*

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

Questo modello crea una pipeline di Image [Builder che produce un'EC2 immagine](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-image-pipeline.html) del contenitore di base [Amazon Linux](https://aws.amazon.com/amazon-linux-2/) 2 rinforzata. Terraform viene utilizzato come strumento Infrastructure as Code (IaC) per configurare e fornire l'infrastruttura utilizzata per creare immagini di container rinforzate. La ricetta ti aiuta a distribuire un'immagine di container Amazon Linux 2 basata su Docker che è stata rafforzata secondo Red Hat Enterprise Linux (RHEL) 7 STIG Version 3 Release 7 ‒ Medium. (Vedere la [STIG-Build-Linux-Medium versione 2022.2.1](https://docs.aws.amazon.com/imagebuilder/latest/userguide/toe-stig.html#linux-os-stig) nella sezione dei *componenti Linux STIG* della documentazione di EC2 Image Builder.) *Questa viene definita immagine dorata del contenitore.*

La build include due [ EventBridge regole Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html). Una regola avvia la pipeline di immagini del contenitore quando il risultato di [Amazon Inspector](https://docs.aws.amazon.com/inspector/latest/user/findings-managing.html) **è** alto **o** critico, in modo che le immagini non sicure vengano sostituite. Questa regola richiede l'abilitazione della scansione avanzata di Amazon Inspector e Amazon Elastic Container Registry (Amazon [ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning-enhanced.html). L'altra regola invia notifiche a una coda Amazon [Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-types.html) dopo che un'immagine è stata inviata con successo al repository Amazon ECR, per aiutarti a utilizzare le immagini più recenti dei container.

**Nota**  
Amazon Linux 2 sta per terminare il supporto. Per ulteriori informazioni, consulta [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).

## Prerequisiti e limitazioni
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-prereqs"></a>

**Prerequisiti**
+ Un [account AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) in cui puoi implementare l'infrastruttura.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) installata per impostare le credenziali AWS per la distribuzione locale.
+ Terraform è [stato scaricato](https://developer.hashicorp.com/terraform/downloads) e configurato seguendo [le istruzioni](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) nella documentazione di Terraform.
+ [Git](https://git-scm.com/) (se stai effettuando il provisioning da una macchina locale).
+ Un [ruolo](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) all'interno dell'account AWS che puoi utilizzare per creare risorse AWS.
+ Tutte le variabili definite nel [file.tfvars.](https://developer.hashicorp.com/terraform/tutorials/configuration-language/variables)  Oppure puoi definire tutte le variabili quando applichi la configurazione Terraform.

**Limitazioni**
+ Questa soluzione crea un'infrastruttura Amazon Virtual Private Cloud (Amazon VPC) che include un gateway [NAT e un gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) Internet per la connettività [Internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) dalla sua sottorete privata. Non puoi utilizzare gli [endpoint VPC](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html), perché il [processo di bootstrap di AWS Task Orchestrator ed Executor () AWSTOE installa la versione 2 dell'interfaccia a riga di comando di AWS da](https://aws.amazon.com/premiumsupport/knowledge-center/image-builder-pipeline-execution-error/) Internet.

**Versioni del prodotto**
+ Amazon Linux 2
+ AWS CLI versione 1.1 o successiva

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

**Stack tecnologico Target**

Questo modello crea 43 risorse, tra cui:
+ Due bucket Amazon Simple Storage Service (Amazon [S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html): uno per i file dei componenti della pipeline e uno per l'accesso al server e i log di flusso di Amazon VPC
+ Un [repository Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ Un cloud privato virtuale (VPC) che contiene una sottorete pubblica, una sottorete privata, tabelle di routing, un gateway NAT e un gateway Internet
+ Una pipeline, una ricetta e componenti di EC2 Image Builder
+ Un'immagine del contenitore
+ Una chiave AWS Key Management Service (AWS KMS) per [la crittografia delle](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) immagini
+ Una coda SQS
+ Tre ruoli: uno per eseguire la pipeline di EC2 Image Builder, un profilo di istanza per EC2 Image Builder e uno per le regole EventBridge 
+ Due regole EventBridge 

**Struttura del modulo Terraform**

Per il codice sorgente, vedere il GitHub repository [Terraform Image EC2 Builder](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline) 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
```

**Dettagli del modulo**
+ `components.tf`contiene una risorsa di caricamento Amazon S3 per caricare il contenuto della `/files` directory. Qui puoi anche aggiungere in modo modulare file YAML di componenti personalizzati.
+ `/files`contiene i `.yml` file che definiscono i componenti utilizzati in. `components.tf`
+ `image.tf`contiene le definizioni per il sistema operativo con immagine di base. Qui è possibile modificare le definizioni per una diversa pipeline di immagini di base.
+ `infr-config.tf`e `dist-config.tf` contengono le risorse per l'infrastruttura AWS minima necessaria per avviare e distribuire l'immagine.
+ `infra-network-config.tf`contiene l'infrastruttura VPC minima in cui distribuire l'immagine del contenitore.
+ `hardening-pipeline.tfvars`contiene le variabili Terraform da utilizzare al momento dell'applicazione.
+ `pipeline.tf`crea e gestisce una pipeline EC2 Image Builder in Terraform.
+ `recipes.tf`è dove puoi specificare diverse miscele di componenti per creare ricette di contenitori.
+ `roles.tf`contiene le definizioni delle policy di AWS Identity and Access Management (IAM) per il profilo dell'istanza Amazon Elastic Compute Cloud (Amazon EC2) e il ruolo di distribuzione della pipeline.
+ `trigger-build.tf`contiene EventBridge le regole e le risorse di coda SQS.

**Architettura Target**

![\[Architettura e flusso di lavoro per la creazione di una pipeline per immagini di container rinforzate\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/4b16bdfa-4f34-41e9-a69a-d023253c8585/images/23443eca-132f-46ac-98bd-32a9e9359a77.png)


Il diagramma illustra il seguente flusso di lavoro:

1. EC2 Image Builder crea un'immagine del contenitore utilizzando la ricetta definita, che installa gli aggiornamenti del sistema operativo e applica RHEL Medium STIG all'immagine di base di Amazon Linux 2.

1. L'immagine protetta viene pubblicata in un registro Amazon ECR privato e una EventBridge regola invia un messaggio a una coda SQS quando l'immagine è stata pubblicata correttamente.

1. Se Amazon Inspector è configurato per una scansione avanzata, esegue la scansione del registro Amazon ECR.

1. Se Amazon Inspector genera un risultato di gravità **critica** o **elevata** per l'immagine, una EventBridge regola attiva la pipeline di Image Builder per riavviare la pipeline di EC2 Image Builder e pubblicare un'immagine appena protetta.

**Automazione e scalabilità**
+ Questo modello descrive come effettuare il provisioning dell'infrastruttura e creare la pipeline sul computer. Tuttavia, è destinato a essere utilizzato su larga scala. Invece di distribuire i moduli Terraform localmente, puoi utilizzarli in un ambiente multi-account, come un ambiente [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html) con [Account Factory for](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/) Terraform. In tal caso, è necessario utilizzare un [bucket S3 con stato di backend](https://developer.hashicorp.com/terraform/language/settings/backends/s3) per gestire i file di stato Terraform anziché gestire lo stato di configurazione localmente.
+ Per un utilizzo scalabile, distribuisci la soluzione su un account centrale, ad esempio un account Shared Services o Common Services, da un modello di account Control Tower o landing zone e concedi agli account dei consumatori l'autorizzazione ad accedere al repository Amazon ECR e alla chiave AWS KMS. Per ulteriori informazioni sulla configurazione, consulta l'articolo Re:post [Come posso consentire a un account secondario di inviare o estrarre immagini nel mio archivio di immagini Amazon ECR](https://repost.aws/knowledge-center/secondary-account-access-ecr)? Ad esempio, in un [distributore automatico di account](https://www.hashicorp.com/resources/terraform-landing-zones-for-self-service-multi-aws-at-eventbrite) o Account Factory for Terraform, aggiungi le autorizzazioni a ogni linea di base dell'account o alla baseline di personalizzazione dell'account per fornire l'accesso al repository Amazon ECR e alla chiave di crittografia.
+ Dopo aver distribuito la pipeline di immagini del contenitore, puoi modificarla utilizzando le funzionalità di Image EC2 Builder [come](https://docs.aws.amazon.com/imagebuilder/latest/userguide/manage-components.html) i componenti, che ti aiutano a impacchettare più componenti nella build Docker.
+ La chiave AWS KMS utilizzata per crittografare l'immagine del contenitore deve essere condivisa tra gli account in cui è destinata l'immagine.
+ Puoi aggiungere il supporto per altre immagini duplicando l'intero modulo Terraform e modificando i seguenti attributi: `recipes.tf`
  + Modifica su un altro `parent_image = "amazonlinux:latest"` tipo di immagine.
  + Modifica `repository_name` in modo che punti a un repository Amazon ECR esistente. Questo crea un'altra pipeline che distribuisce un tipo di immagine principale diverso nel tuo repository Amazon ECR esistente.

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

**Strumenti**
+ Terraform (fornitura IaC)
+ Git (se si effettua il provisioning locale)
+ AWS CLI versione 1 o versione 2 (se il provisioning è locale)

**Codice**

Il codice per questo pattern si trova nel GitHub repository [Terraform Image EC2 Builder](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline) Container Hardening Pipeline. Per utilizzare il codice di esempio, segui le istruzioni nella sezione successiva.

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

### Fornisci l'infrastruttura
<a name="provision-the-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Imposta le credenziali locali. | Configura le tue credenziali temporanee AWS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Clonare il repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Aggiorna le variabili. | Aggiorna le variabili nel `hardening-pipeline.tfvars` file in modo che corrispondano all'ambiente e alla configurazione desiderata. È necessario fornire il proprio`account_id`. Tuttavia, è necessario modificare anche il resto delle variabili per adattarle alla distribuzione desiderata. Tutte le variabili sono obbligatorie.<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>Ecco una descrizione di ogni variabile:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Inizializza Terraform. | Dopo aver aggiornato i valori delle variabili, puoi inizializzare la directory di configurazione Terraform. L'inizializzazione di una directory di configurazione scarica e installa il provider AWS, definito nella configurazione.<pre>terraform init</pre>Dovresti vedere un messaggio che dice che Terraform è stato inizializzato con successo e identifica la versione del provider che è stata installata. | AWS DevOps | 
| Implementa l'infrastruttura e crea un'immagine del contenitore. | Usa il seguente comando per inizializzare, convalidare e applicare i moduli Terraform all'ambiente utilizzando le variabili definite nel file: `.tfvars`<pre>terraform init && terraform validate && terraform apply -var-file *.tfvars -auto-approve</pre> | AWS DevOps | 
| Personalizza il contenitore. | È possibile creare una nuova versione di una ricetta contenitore dopo che EC2 Image Builder ha distribuito la pipeline e la ricetta iniziale.È possibile aggiungere uno qualsiasi degli oltre 31 componenti disponibili in EC2 Image Builder per personalizzare la build del contenitore. Per ulteriori informazioni, vedere la sezione *Componenti* di [Creare una nuova versione di una ricetta contenitore nella documentazione](https://docs.aws.amazon.com/imagebuilder/latest/userguide/create-container-recipes.html) di EC2 Image Builder. | Amministratore AWS | 

### Convalida le risorse
<a name="validate-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Convalida il provisioning dell'infrastruttura AWS. | Dopo aver completato con successo il primo `apply` comando Terraform, se stai effettuando il provisioning localmente, dovresti vedere questo frammento nel terminale del tuo computer locale:<pre>Apply complete! Resources: 43 added, 0 changed, 0 destroyed.</pre> | AWS DevOps | 
| Convalida le singole risorse dell'infrastruttura AWS. | Per convalidare le singole risorse che sono state distribuite, se esegui il provisioning a livello locale, puoi eseguire il seguente comando:<pre>terraform state list</pre>Questo comando restituisce un elenco di 43 risorse. | AWS DevOps | 

### Rimuovi risorse
<a name="remove-resources"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rimuovi l'infrastruttura e l'immagine del contenitore. | Quando hai finito di lavorare con la configurazione di Terraform, puoi eseguire il seguente comando per rimuovere le risorse:<pre>terraform init && terraform validate && terraform destroy -var-file *.tfvars -auto-approve</pre> | AWS DevOps | 

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


| Problema | Soluzione | 
| --- | --- | 
| Errore durante la convalida delle credenziali del provider | Quando esegui Terraform `apply` o il `destroy` comando dal tuo computer locale, potresti riscontrare un errore simile al seguente:<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>Questo errore è causato dalla scadenza del token di sicurezza per le credenziali utilizzate nella configurazione del computer locale.Per risolvere l'errore, consulta [Impostare e visualizzare le impostazioni di configurazione nella documentazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) dell'interfaccia a riga di comando di AWS. | 

## Risorse correlate
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-resources"></a>
+ [Terraform EC2 Image Builder Container Hardening](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline) Pipeline (repository) GitHub 
+ [EC2 Documentazione di Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)
+ [AWS Control Tower Account Factory per Terraform](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/) (post sul blog AWS)
+ [Bucket S3 con stato di backend (documentazione Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3))
+ [Installazione o aggiornamento della versione più recente dell'interfaccia a riga di comando di AWS (documentazione dell'interfaccia a riga](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) di comando di AWS)
+ [Scarica Terraform](https://developer.hashicorp.com/terraform/downloads)