Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Cree una canalización para imágenes de contenedores reforzadas con EC2 Image Builder y Terraform
Creada por Mike Saintcross (AWS) y Andrew Ranes () AWS
Repositorio de código: Terraform EC2 Image Builder Container Hardening Pipeline | Entorno: producción | Origen: Packer, Chef o Pure Ansible |
Objetivo: EC2 Image Builder | Tipo R: renovar arquitectura | Carga de trabajo: código abierto |
Tecnologías: seguridad, identidad, cumplimiento; DevOps | AWSservicios: Amazon EC2 Container Registry; EC2 Image Builder |
Resumen
Este patrón crea una canalización de EC2 Image Builder que produce una imagen de contenedor base de Amazon Linux 2
La versión incluye dos EventBridge reglas de Amazon. Una regla inicia el proceso de imágenes de contenedor cuando el resultado de Amazon Inspector es Alto o Crítico, con el fin de sustituir las imágenes no seguras. Esta regla requiere que se habilite el escaneo mejorado de Amazon Inspector y Amazon Elastic Container Registry (AmazonECR). La otra regla envía notificaciones a una cola de Amazon Simple Queue Service (AmazonSQS) después de que una imagen se envíe correctamente al ECR repositorio de Amazon, para ayudarte a usar las últimas imágenes del contenedor.
Nota: Amazon Linux 2 está a punto de finalizar el soporte. Para obtener más información, consulte Amazon Linux 2 FAQs
Requisitos previos y limitaciones
Requisitos previos
Una AWScuenta en
la que puede implementar la infraestructura. AWSSe instaló una interfaz de línea de comandos (AWSCLI) para configurar sus AWS credenciales para la implementación local.
Terraform descargado
y configurado según las instrucciones de la documentación de Terraform. Git
(si aprovisiona desde una máquina local). Un rol dentro de la AWS cuenta que puede usar para crear AWS recursos.
Todas las variables definidas en el archivo .tfvars.
También puede definir todas las variables al aplicar la configuración de Terraform.
Limitaciones
Esta solución crea una infraestructura de Amazon Virtual Private Cloud (AmazonVPC) que incluye una NATpuerta de enlace y una puerta de enlace a Internet para la conectividad a Internet desde su subred privada. No puede usar VPCpuntos de conexión, ya que el proceso de arranque de AWS Task Orchestrator and Executor (AWSTOE
) instala AWS CLI la versión 2 desde Internet.
Versiones de producto
Amazon Linux 2
AWSCLIversión 1.1 o posterior
Arquitectura
Pila de tecnología de destino
Este patrón crea 43 recursos, incluidos:
Dos depósitos de Amazon Simple Storage Service (Amazon S3): uno para los archivos de los componentes de la canalización y otro para el acceso al servidor y los registros de flujo de Amazon VPC
Una nube privada virtual (VPC) que contiene una subred pública, una subred privada, tablas de enrutamiento, una puerta de enlace y una NAT puerta de enlace a Internet
Una canalización, una receta y componentes de EC2 Image Builder
Una imagen de contenedor
Una AWS clave del Servicio de administración de claves (AWSKMS) para el cifrado de imágenes
Una cola de SQS
Tres funciones: una para ejecutar la canalización de EC2 Image Builder, una para el perfil de instancia para EC2 Image Builder y otra para EventBridge las reglas
Dos EventBridge reglas
Estructura del módulo Terraform
Para ver el código fuente, consulte el GitHub repositorio Terraform EC2 Image Builder Container Hardening
├── 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
Detalles del módulo
components.tf
contiene un recurso de carga de Amazon S3 para cargar el contenido del directorio/files
. Aquí también puede añadir YAML archivos de componentes personalizados de forma modular./files
contiene los archivos.yml
que definen los componentes usados encomponents.tf
.image.tf
contiene las definiciones del sistema operativo de la imagen base. Aquí es donde puede modificar las definiciones para crear un proceso de imagen base diferente.infr-config.tf
ydist-config.tf
contienen los recursos necesarios para la AWS infraestructura mínima necesaria para generar y distribuir la imagen.infra-network-config.tf
contiene la VPC infraestructura mínima para implementar la imagen del contenedor.hardening-pipeline.tfvars
contiene las variables de Terraform que se usarán en el momento de la aplicación.pipeline.tf
crea y administra una canalización EC2 de Image Builder en Terraform.recipes.tf
es donde puede especificar diferentes combinaciones de componentes para crear recetas de contenedores.roles.tf
contiene las definiciones de la política de AWS Identity and Access Management (IAM) para el perfil de instancia y la función de implementación de canalización de Amazon Elastic Compute Cloud (AmazonEC2).trigger-build.tf
contiene las EventBridge reglas y los recursos de SQS cola.
Arquitectura de destino
![Arquitectura y flujo de trabajo para crear un proceso de imágenes de contenedores reforzadas](images/pattern-img/4b16bdfa-4f34-41e9-a69a-d023253c8585/images/23443eca-132f-46ac-98bd-32a9e9359a77.png)
El diagrama ilustra el flujo de trabajo siguiente:
EC2Image Builder crea una imagen de contenedor mediante la receta definida, que instala las actualizaciones del sistema operativo y aplica RHEL Medium STIG a la imagen base de Amazon Linux 2.
La imagen protegida se publica en un ECR registro privado de Amazon y una EventBridge regla envía un mensaje a una SQS cola cuando la imagen se ha publicado correctamente.
Si Amazon Inspector está configurado para un escaneo mejorado, escanea el ECR registro de Amazon.
Si Amazon Inspector genera un resultado de gravedad crítica o alta para la imagen, una EventBridge regla activa la canalización de EC2 Image Builder para que se ejecute de nuevo y publique una imagen recién reforzada.
Automatizar y escalar
Este patrón describe cómo aprovisionar la infraestructura y construir el proceso en su equipo. Sin embargo, está pensado para ser utilizado a escala. En lugar de implementar los módulos de Terraform de forma local, puede usarlos en un entorno de varias cuentas, como un entorno de AWSControl Tower with Account Factory para Terraform
. En ese caso, deberá usar un bucket de S3 con estado de backend para administrar los archivos de estado de Terraform en lugar de gestionar el estado de configuración de forma local. Para un uso escalonado, despliegue la solución en una cuenta central, como una cuenta de Shared Services o Common Services, desde un modelo de cuenta de Control Tower o landing zone, y conceda permiso a las cuentas de los consumidores para acceder al ECR repositorio y la AWS KMS clave de Amazon. Para obtener más información sobre la configuración, consulta el artículo de Re:post ¿Cómo puedo permitir que una cuenta secundaria inserte o extraiga imágenes en mi repositorio de imágenes de AmazonECR?
Por ejemplo, en una máquina expendedora de cuentas o en Account Factory para Terraform, añade permisos a cada línea base de cuenta o línea base de personalización de la cuenta para proporcionar acceso a ese ECR repositorio de Amazon y a la clave de cifrado. Una vez desplegada la canalización de imágenes del contenedor, puede modificarla mediante las funciones de EC2 Image Builder, como los componentes, que le ayudan a empaquetar más componentes en la compilación de Docker.
La AWS KMS clave que se usa para cifrar la imagen del contenedor debe compartirse entre las cuentas en las que se va a usar la imagen.
Puede añadir compatibilidad con otras imágenes duplicando todo el módulo Terraform y modificando los siguientes atributos
recipes.tf
:Modifique
parent_image = "amazonlinux:latest"
a otro tipo de imagen.Modificar
repository_name
para que apunte a un ECR repositorio de Amazon existente. Esto crea otra canalización que despliega un tipo de imagen principal diferente en tu ECR repositorio de Amazon existente.
Herramientas
Herramientas
Terraform (aprovisionamiento de iAC)
Git (si se aprovisiona localmente)
AWSCLIversión 1 o versión 2 (si se aprovisiona localmente)
Código
El código de este patrón se encuentra en el GitHub repositorio Terraform EC2 Image Builder Container Hardening
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Configure las credenciales locales. | Configura tus credenciales AWS temporales.
| AWS DevOps |
Clonar el repositorio. |
| AWS DevOps |
Actualice variables. | Actualice las variables del archivo
Aquí tiene una descripción de cada variable:
| AWS DevOps |
Inicialice Terraform. | Tras actualizar los valores de las variables, puede inicializar el directorio de configuración de Terraform. Al inicializar un directorio de configuración, se descarga e instala el AWS proveedor, que se define en la configuración.
Aparecerá un mensaje indicando que Terraform se ha inicializado correctamente e identificando la versión del proveedor instalada. | AWS DevOps |
Implemente la infraestructura y cree una imagen de contenedor. | Use el siguiente comando para inicializar, validar y aplicar los módulos de Terraform al entorno mediante las variables definidas en su archivo
| AWS DevOps |
Personalice el contenedor. | Puede crear una nueva versión de una receta de contenedor después de que EC2 Image Builder haya implementado la canalización y la receta inicial. Puede añadir cualquiera de los más de 31 componentes disponibles en EC2 Image Builder para personalizar la construcción del contenedor. Para obtener más información, consulte la sección Componentes de Crear una nueva versión de una receta de contenedor en la documentación de EC2 Image Builder. | AWSadministrador |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Valide el aprovisionamiento de la AWS infraestructura. | Una vez que haya completado correctamente su primer comando
| AWS DevOps |
Valide los recursos de AWS infraestructura individuales. | Para validar los recursos individuales implementados, si aprovisiona de forma local, puede ejecutar el siguiente comando:
Este comando devuelve una lista de 43 recursos. | AWS DevOps |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Elimine la imagen de la infraestructura y el contenedor. | Cuando haya terminado de trabajar con la configuración de Terraform, puede ejecutar el siguiente comando para eliminar los recursos:
| AWS DevOps |
Resolución de problemas
Problema | Solución |
---|---|
Error al validar las credenciales del proveedor | Al ejecutar los comandos
Este error se debe a la caducidad del token de seguridad de las credenciales usadas en la configuración de la máquina local. Para resolver el error, consulte Establecer y ver los ajustes de configuración en la AWS CLI documentación. |
Recursos relacionados
Terraform EC2 Image Builder Container Hardening Pipeline (repositorio
) GitHub AWSControl Tower Account Factory para Terraform
(AWSentrada del blog) Bucket de S3 de estado de backend
(documentación de Terraform) Instalación o actualización de la última versión de la AWS CLI (AWSCLIdocumentación)