

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Crie um pipeline para imagens de contêiner reforçadas usando o EC2 Image Builder e o 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*

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

Esse padrão cria um [pipeline do EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/start-build-image-pipeline.html) que produz uma imagem reforçada de contêiner base do [Amazon Linux](https://aws.amazon.com/amazon-linux-2/) 2. O Terraform é usado como uma ferramenta de infraestrutura como código (IaC) para configurar e provisionar a infraestrutura usada para criar imagens de contêiner reforçadas. A fórmula ajuda você a implementar uma imagem de contêiner Amazon Linux 2 baseada em Docker que foi reforçada de acordo com o Red Hat Enterprise Linux (RHEL) 7 STIG Version 3 Release 7 ‒ Medium. (Consulte a [STIG-Build-Linux-Medium versão 2022.2.1](https://docs.aws.amazon.com/imagebuilder/latest/userguide/toe-stig.html#linux-os-stig) na seção de *componentes Linux STIG* da documentação do EC2 Image Builder.) Isso é chamado de imagem de contêiner *dourado*.

A versão inclui duas [ EventBridge regras da Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html). Uma regra inicia o pipeline de imagens do contêiner quando a [descoberta do Amazon Inspector](https://docs.aws.amazon.com/inspector/latest/user/findings-managing.html) é **Alta** ou **Crítica** para que imagens não seguras sejam substituídas. Esta regra exige que a verificação [aprimorada do Amazon Inspector e do Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning-enhanced.html) seja ativada. A outra regra envia notificações para uma fila do Amazon Simple Queue Service (Amazon [SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-types.html) após um envio bem-sucedido de imagens para o repositório do Amazon ECR, para ajudá-lo a usar as imagens de contêiner mais recentes.

**nota**  
O Amazon Linux 2 está se aproximando do fim do suporte. Para obter mais informações, consulte o [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).

## Pré-requisitos e limitações
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-prereqs"></a>

**Pré-requisitos **
+ Uma [conta da AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) na qual você pode implementar a infraestrutura.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) instalada para definir suas credenciais da AWS para implantação local.
+ O Terraform [foi baixado](https://developer.hashicorp.com/terraform/downloads) e configurado seguindo as [instruções na documentação](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) do Terraform.
+ [Git](https://git-scm.com/) (se você estiver provisionando a partir de uma máquina local).
+ Uma [função](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) dentro da conta da AWS que você pode usar para criar recursos da AWS.
+ Todas as variáveis definidas no [arquivo.tfvars.](https://developer.hashicorp.com/terraform/tutorials/configuration-language/variables)  Ou você pode definir todas as variáveis ao aplicar a configuração do Terraform.

**Limitações**
+ Essa solução cria uma infraestrutura de Amazon Virtual Private Cloud (Amazon VPC) que inclui um [gateway NAT e um gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) da internet para conectividade com a [internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) a partir de sua sub-rede privada. Você não pode usar [VPC endpoints](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html), porque o [processo de bootstrap do AWS Task Orchestrator and Executor () instala](https://aws.amazon.com/premiumsupport/knowledge-center/image-builder-pipeline-execution-error/) a AWSTOE AWS CLI versão 2 da Internet.

**Versões do produto**
+ Amazon Linux 2
+ AWS CLI versão 1.1 ou superior

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

**Pilha de tecnologias de destino**

Esse padrão cria 43 recursos, incluindo:
+ Dois buckets do Amazon Simple Storage Service (Amazon [S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html): um para os arquivos de componentes do pipeline e outro para o acesso ao servidor e registros de fluxo do Amazon VPC
+ Um [Repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ Uma nuvem privada virtual (VPC) que contém uma sub-rede pública, uma sub-rede privada, tabelas de rotas, um gateway NAT e um gateway da Internet
+ Um pipeline, receita e componentes do EC2 Image Builder
+ Uma imagem do contêiner
+ [Uma chave do AWS Key Management Service (AWS KMS) para criptografia de imagens](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)
+ Uma fila do SQS.
+ Três funções: uma para executar o pipeline do EC2 Image Builder, um perfil de instância para EC2 Image Builder e uma para EventBridge regras
+ Duas EventBridge regras

**Estrutura do módulo Terraform**

Para o código-fonte, consulte o GitHub repositório [Terraform EC2 Image Builder Container Hardening](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline) 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
```

**Detalhes do módulo**
+ `components.tf`contém um recurso de upload do Amazon S3 para carregar o conteúdo do `/files` diretório. Você também pode adicionar modularmente arquivos YAML de componentes personalizados aqui.
+ `/files`contém os `.yml` arquivos que definem os componentes usados em`components.tf`.
+ `image.tf`contém as definições do sistema operacional da imagem base. É aqui que você pode modificar as definições de um pipeline de imagem base diferente.
+ `infr-config.tf`e `dist-config.tf` contenha os recursos para a infraestrutura mínima da AWS necessária para ativar e distribuir a imagem.
+ `infra-network-config.tf`contém a infraestrutura mínima de VPC na qual implementar a imagem do contêiner.
+ `hardening-pipeline.tfvars`contém as variáveis do Terraform a serem usadas no momento da aplicação.
+ `pipeline.tf`cria e gerencia um pipeline do EC2 Image Builder no Terraform.
+ `recipes.tf`é onde você pode especificar diferentes misturas de componentes para criar fórmulas em contêineres.
+ `roles.tf`contém as definições de política do AWS Identity and Access Management (IAM) para o perfil da instância do Amazon Elastic Compute Cloud (Amazon EC2) e a função de implantação do pipeline.
+ `trigger-build.tf`contém as EventBridge regras e os recursos da fila SQS.

**Arquitetura de destino**

![\[Arquitetura e fluxo de trabalho para criar um pipeline para imagens de contêineres reforçadas\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/4b16bdfa-4f34-41e9-a69a-d023253c8585/images/23443eca-132f-46ac-98bd-32a9e9359a77.png)


O diagrama a seguir mostra o fluxo de trabalho:

1. EC2 O Image Builder cria uma imagem de contêiner usando a receita definida, que instala atualizações do sistema operacional e aplica o RHEL Medium STIG à imagem base do Amazon Linux 2.

1. A imagem protegida é publicada em um registro privado do Amazon ECR, e uma EventBridge regra envia uma mensagem para uma fila do SQS quando a imagem é publicada com sucesso.

1. Se o Amazon Inspector estiver configurado para escaneamento aprimorado, ele escaneia o registro do Amazon ECR.

1. Se o Amazon Inspector gerar uma descoberta de severidade **crítica** ou **alta** para a imagem, uma EventBridge regra acionará o pipeline do Image Builder para ser executado novamente e publicar uma EC2 imagem recém-reforçada.

**Automação e escala**
+ Esse padrão descreve como provisionar a infraestrutura e criar o pipeline em seu computador. No entanto, ele se destina a ser usado em grande escala. Em vez de implementar os módulos do Terraform localmente, você pode usá-los em um ambiente de várias contas, como um ambiente do [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html) com [Account Factory for Terraform](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/). Nesse caso, você deve usar um [bucket S3 de estado de backend](https://developer.hashicorp.com/terraform/language/settings/backends/s3) para gerenciar arquivos de estado do Terraform em vez de gerenciar o estado de configuração localmente.
+ Para uso escalonado, implante a solução em uma conta central, como uma conta de Serviços Comuns ou Serviços Comuns, a partir de um modelo de conta Control Tower ou zona de pouso, e conceda às contas dos consumidores permissão para acessar o repositório do Amazon ECR e a chave do AWS KMS. Para obter mais informações sobre a configuração, consulte o artigo do re:POST [Como posso permitir que uma conta secundária envie ou extraia imagens no meu repositório de imagens do Amazon ECR](https://repost.aws/knowledge-center/secondary-account-access-ecr)? Por exemplo, em uma [máquina de venda automática de contas](https://www.hashicorp.com/resources/terraform-landing-zones-for-self-service-multi-aws-at-eventbrite) ou Account Factory for Terraform, adicionar permissões a cada linha de base da conta ou linha de base de personalização da conta para fornecer acesso ao repositório e à chave de criptografia do Amazon ECR.
+ Depois que o pipeline de imagem do contêiner for implantado, você poderá modificá-lo usando os recursos do EC2 Image Builder, como [componentes](https://docs.aws.amazon.com/imagebuilder/latest/userguide/manage-components.html), que ajudam a empacotar mais componentes na compilação do Docker.
+ A chave do AWS KMS usada para criptografar a imagem do contêiner deve ser compartilhada entre as contas nas quais a imagem deve ser usada.
+ Você pode adicionar suporte para outras imagens duplicando todo o módulo Terraform e modificando os seguintes atributos: `recipes.tf`
  + Modifique `parent_image = "amazonlinux:latest"` para outro tipo de imagem.
  + Modifique `repository_name` para apontar para um repositório Amazon ECR existente. Isso cria outro pipeline que implanta um tipo diferente de imagem principal em seu repositório Amazon ECR existente.

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

**Ferramentas**
+ Terraform (provisionamento de IaC)
+ Git (se estiver provisionando localmente)
+ AWS CLI versão 1 ou versão 2 (se estiver provisionando localmente)

**Código**

O código desse padrão está no GitHub repositório [Terraform EC2 Image Builder Container Hardening](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline) Pipeline. Para usar o código de amostra, siga as instruções da próxima seção.

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

### Provisionar a infraestrutura
<a name="provision-the-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure as credenciais locais. | Configure suas credenciais temporárias da AWS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Clonar o repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Atualizar variáveis. | Atualizar as variáveis no `hardening-pipeline.tfvars` arquivo para que correspondam ao seu ambiente e à configuração desejada. Você deve fornecer o seu`account_id`. No entanto, você também deve modificar o restante das variáveis para se adequar à implantação desejada. Todas as variáveis são obrigatórias.<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>Aqui está uma descrição de cada variável:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.html) | AWS DevOps | 
| Inicializar o Terraform. | Depois de atualizar os valores das variáveis, você pode inicializar o diretório de configuração do Terraform. A inicialização de um diretório de configuração baixa e instala o provedor da AWS, que é definido na configuração.<pre>terraform init</pre>Você verá uma mensagem dizendo que o Terraform foi inicializado com sucesso e identifica a versão do provedor que foi instalada. | AWS DevOps | 
| Implementar a infraestrutura e criar uma imagem de contêiner. | Usar o comando a seguir para inicializar, validar e aplicar os módulos do Terraform ao ambiente usando as variáveis definidas em seu arquivo: `.tfvars`<pre>terraform init && terraform validate && terraform apply -var-file *.tfvars -auto-approve</pre> | AWS DevOps | 
| Personalizar o contêiner. | Você pode criar uma nova versão de uma receita de contêiner depois que o EC2 Image Builder implantar o pipeline e a receita inicial.Você pode adicionar qualquer um dos mais de 31 componentes disponíveis no EC2 Image Builder para personalizar a construção do contêiner. Para obter mais informações, consulte a seção *Componentes* de [Criar uma nova versão de uma receita de contêiner](https://docs.aws.amazon.com/imagebuilder/latest/userguide/create-container-recipes.html) na documentação do EC2 Image Builder. | Administrador da AWS | 

### Validar recursos
<a name="validate-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Validar o provisionamento da infraestrutura da AWS. | Depois de concluir com êxito seu primeiro `apply` comando do Terraform, se você estiver provisionando localmente, deverá ver este trecho no terminal da sua máquina local:<pre>Apply complete! Resources: 43 added, 0 changed, 0 destroyed.</pre> | AWS DevOps | 
| Valide recursos individuais de infraestrutura da AWS. | Para validar os recursos individuais que foram implantados, se você estiver provisionando localmente, execute o seguinte comando:<pre>terraform state list</pre>Este comando retorna uma lista de 43 recursos. | AWS DevOps | 

### Remover o recurso .
<a name="remove-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remover a infraestrutura e a imagem do contêiner. | Ao terminar de trabalhar com sua configuração do Terraform, você pode executar o seguinte comando para remover recursos:<pre>terraform init && terraform validate && terraform destroy -var-file *.tfvars -auto-approve</pre> | AWS DevOps | 

## Solução de problemas
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erro ao validar as credenciais do provedor | Ao executar o Terraform `apply` ou o `destroy` comando em sua máquina local, você poderá encontrar um erro semelhante ao seguinte:<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>Esse erro é causado pela expiração do token de segurança das credenciais usadas na configuração da sua máquina local.Para resolver o erro, consulte [Definir e visualizar as configurações](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) na documentação da AWS CLI. | 

## Recursos relacionados
<a name="build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform-resources"></a>
+ [Pipeline de endurecimento de contêineres do Terraform EC2 Image Builder (repositório](https://github.com/aws-samples/terraform-ec2-image-builder-container-hardening-pipeline)) GitHub 
+ [EC2 Documentação do Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)
+ [AWS Control Tower Account Factory for Terraform](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/) (publicação no blog da AWS)
+ [Bucket S3 de estado de backend (documentação](https://developer.hashicorp.com/terraform/language/settings/backends/s3) do Terraform)
+ [Instalar ou atualizar a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (documentação da AWS CLI)
+ [Baixar o Terraform](https://developer.hashicorp.com/terraform/downloads)