Crie um pipeline para imagens de contêiner reforçadas usando o EC2 Image Builder e o Terraform - Recomendações da AWS

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

Criado por Mike Saintcross (AWS) e Andrew Ranes () AWS

Repositório de código: Terraform EC2 Image Builder Container Hardening Pipeline

Ambiente: produção

Origem: Packer, Chef ou Pure Ansible

Alvo: EC2 Image Builder

Tipo R: redefinir arquitetura

Workload: código aberto

Tecnologias: Segurança, identidade, conformidade; DevOps

AWSserviços: Amazon EC2 Container Registry; EC2 Image Builder

Resumo

Esse padrão cria um pipeline do EC2 Image Builder que produz uma imagem reforçada de contêiner base do Amazon Linux 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 receita ajuda você a implantar uma imagem de contêiner Amazon Linux 2 baseada em Docker que foi reforçada de acordo com o Red Hat Enterprise Linux RHEL () STIG 7 Version 3 Release 7 ‒ Medium. (Consulte STIG-Build-Linux-Medium versão 2022.2.1 na seção de componentes Linux da documentação STIG do Image Builder.) EC2 Isso é chamado de imagem de contêiner dourado.

A compilação inclui duas EventBridge regras da Amazon. Uma regra inicia o pipeline de imagens do contêiner quando a descoberta do Amazon Inspector é Alta ou Crítica para que imagens não seguras sejam substituídas. Essa regra exige que o escaneamento aprimorado do Amazon Inspector e do Amazon Elastic Container Registry ECR (Amazon) esteja habilitado. A outra regra envia notificações para uma fila do Amazon Simple Queue Service (AmazonSQS) após um envio bem-sucedido de imagens para o ECR repositório da Amazon, para ajudá-lo a usar as imagens de contêiner mais recentes.

Observação: o Amazon Linux 2 está chegando ao fim do suporte. Para obter mais informações, consulte o Amazon Linux 2 FAQs.

Pré-requisitos e limitações

Pré-requisitos

Limitações

Versões do produto

  • Amazon Linux 2

  • AWSCLIversão 1.1 ou posterior

Arquitetura

Pilha de tecnologias de destino

Esse padrão cria 43 recursos, incluindo:

  • Dois buckets do Amazon Simple Storage Service (Amazon S3): um para os arquivos de componentes do pipeline e outro para acesso ao servidor e registros de fluxo da Amazon VPC

  • Um ECRrepositório da Amazon

  • Uma nuvem privada virtual (VPC) que contém uma sub-rede pública, uma sub-rede privada, tabelas de rotas, um NAT gateway e um gateway de internet

  • Um pipeline, receita e componentes do EC2 Image Builder

  • Uma imagem do contêiner

  • Uma AWS chave do Key Management Service (AWSKMS) para criptografia de imagens

  • Uma fila do SQS

  • Três funções: uma para executar o pipeline do EC2 Image Builder, um perfil de instância para o EC2 Image Builder e outra para EventBridge regras

  • Duas EventBridge regras

Estrutura do módulo Terraform

Para obter o código-fonte, consulte o GitHub repositório 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

Detalhes do módulo

  • components.tfcontém um recurso de upload do Amazon S3 para carregar o conteúdo do /files diretório. Você também pode adicionar YAML arquivos de componentes personalizados de forma modular aqui.

  • /filescontém os .yml arquivos que definem os componentes usados emcomponents.tf.

  • image.tfconté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.tfe dist-config.tf contêm os recursos para a AWS infraestrutura mínima necessária para ativar e distribuir a imagem.

  • infra-network-config.tfcontém a VPC infraestrutura mínima na qual implantar a imagem do contêiner.

  • hardening-pipeline.tfvarscontém as variáveis do Terraform a serem usadas no momento da aplicação.

  • pipeline.tfcria 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.tfcontém as definições da política AWS Identity and Access Management (IAM) para o perfil de instância do Amazon Elastic Compute Cloud (AmazonEC2) e a função de implantação do pipeline.

  • trigger-build.tfcontém as EventBridge regras e os recursos da SQS fila.

Arquitetura de destino

Arquitetura e fluxo de trabalho para criar um pipeline para imagens de contêineres reforçadas

O diagrama a seguir mostra o fluxo de trabalho:

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

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

  3. Se o Amazon Inspector estiver configurado para escaneamento aprimorado, ele escaneia o registro da Amazon. ECR

  4. 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 implantar os módulos do Terraform localmente, você pode usá-los em um ambiente com várias contas, como um ambiente AWSControl Tower com Account Factory for Terraform. Nesse caso, você deve usar um bucket S3 de estado de backend 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 landing zone, e conceda às contas dos consumidores permissão para acessar o ECR repositório e AWS KMS a chave da Amazon. 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 da Amazon ECR? Por exemplo, em uma máquina de venda automática de contas ou Account Factory for Terraform, adicione 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 da AmazonECR.

  • Depois que o pipeline de imagem do contêiner for implantado, você poderá modificá-lo usando os recursos do EC2 Image Builder, como componentes, que ajudam a empacotar mais componentes na compilação do Docker.

  • A AWS KMS chave 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 ECR repositório existente da Amazon. Isso cria outro pipeline que implanta um tipo diferente de imagem principal em seu ECR repositório Amazon existente.

Ferramentas

Ferramentas

  • Terraform (provisionamento de IaC)

  • Git (se estiver provisionando localmente)

  • AWSCLIversã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 Pipeline. Para usar o código de amostra, siga as instruções da próxima seção.

Épicos

TarefaDescriçãoHabilidades necessárias

Configure as credenciais locais.

Configure suas credenciais AWS temporárias.

  1. Veja se o AWS CLI está instalado:

    $ aws --version aws-cli/1.16.249 Python/3.6.8...
    • AWSCLIa versão deve ser 1.1 ou posterior.

    • Se o comando não for encontrado, instale AWS CLI o.

  2. Execute aws configure e forneça os seguintes valores:

    $ 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

Clonar o repositório.

  1. Clone o repositório que é fornecido com esse padrão. Você pode usar HTTPS ou 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. Navegue até o diretório local que contém esta solução:

    cd terraform-ec2-image-builder-container-hardening-pipeline
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 seuaccount_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.

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

Aqui está uma descrição de cada variável:

  • account_id‒ O número da AWS conta na qual você deseja implantar a solução.

  • aws_region‒ A AWS região na qual você deseja implantar a solução.

  • vpc_name‒ O nome da sua VPC infraestrutura.

  • kms_key_alias‒ O nome da AWS KMS chave a ser usada pela configuração da infraestrutura do EC2 Image Builder.

  • ec2_iam_role_name‒ O nome da função que será usada como perfil da EC2 instância.

  • hardening_pipeline_role_name: o nome da função que será usada para implementar o pipeline de fortalecimento.

  • aws_s3_ami_resources_bucket‒ O nome de um bucket do S3 que hospedará todos os arquivos necessários para criar as imagens do pipeline e do contêiner.

  • image_name‒ O nome da imagem do contêiner. Esse valor deve ter entre 3 e 50 caracteres e conter somente caracteres alfanuméricos e hifens.

  • ecr_name‒ O nome do ECR registro da Amazon no qual armazenar as imagens do contêiner.

  • recipe_version - A versão semântica da fórmula de imagem. O valor padrão é 1.0.0.

  • ebs_root_vol_size‒ O tamanho (em gigabytes) do volume raiz do Amazon Elastic Block Store EBS (Amazon). O valor padrão é 10 gigabytes.

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 AWS provedor, que é definido na configuração.

terraform init

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

terraform init && terraform validate && terraform apply -var-file *.tfvars -auto-approve
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 na documentação do EC2 Image Builder.

AWSadministrador
TarefaDescriçãoHabilidades necessárias

Valide o provisionamento AWS da infraestrutura.

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:

Apply complete! Resources: 43 added, 0 changed, 0 destroyed.
AWS DevOps

Valide os recursos de AWS infraestrutura individuais.

Para validar os recursos individuais que foram implantados, se você estiver provisionando localmente, execute o seguinte comando:

terraform state list

Este comando retorna uma lista de 43 recursos.

AWS DevOps
TarefaDescriçãoHabilidades 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:

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

Solução de problemas

ProblemaSoluçã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:

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.

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 na AWS CLI documentação.

Recursos relacionados