Crear una canalización de imagen segura

En esta página, se explica cómo puedes configurar la canalización de imagen segura para automatizar la generación de imágenes base de contenedor.

Descripción general

La canalización de imagen segura es una herramienta de código abierto que configura un framework de proyectos de Google Cloud, recursos y un repositorio de GitHub que puedes usar para crear y mantener proyectos personalizados. y las imágenes base seguras. Puedes consumir las imágenes de los proyectos de Google Cloud.

En la siguiente imagen, se ilustra el framework de los recursos que crea la canalización de imagen segura:

Canalización de imagen segura

Una vez que configures la canalización, creará los siguientes recursos:

  • Un repositorio de GitHub que aloja el código fuente de las imágenes de contenedor.

  • Tres proyectos de Google Cloud: proyecto de compilación, proyecto de etapa de pruebas y proyecto verificado. Cada vez que se actualiza una imagen en el repositorio de imágenes,Activadores de Cloud Build en el proyecto de compilación, compila y firma, y envía la imagen actualizada alArtifact Registry repositorio en el proyecto de etapa de pruebas. Cuando la imagen en el proyecto de etapa de pruebas se verifica de forma manual, la canalización envía la imagen al proyecto verificado.

Costos

La canalización de imágenes segura usa los siguientes productos de Google Cloud.

Usa la calculadora de precios para estimar los costos según el uso previsto.

Antes de comenzar

Permisos de IAM obligatorios

El usuario que configura la canalización de imagen segura requiere las funciones de administración de identidades y accesos de roles/organization.admin y roles/billing.admin para la organización de Google Cloud. Para obtener instrucciones sobre cómo otorgar funciones de IAM, consulta la sección sobre cómo otorgar, cambiar y revocar el acceso a los recursos.

Configura la canalización de imagen segura

El repositorio de GitHub de la canalización de imágenes seguras contiene la secuencia de comandos para automatizar la generación de imágenes base.

Para configurar la canalización de imagen segura, haz lo siguiente:

  1. Clona el repositorio de GitHub de la canalización de imágenes seguras en tu máquina local:

    git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
    
  2. Navega al directorio secure-image-pipeline.

    cd secure-image-pipeline/
    
  3. Copia env.sh.tmpl en env.sh:

    cp env.sh.tmpl env.sh
    
  4. Abre env.sh en el editor que desees.

  5. Edita los siguientes valores:

    • PARENT_ORGANIZATION: Ingresa el ID de tu organización de Google Cloud. La secuencia de comandos de la canalización segura de imágenes usa esta organización para generar imágenes y proyectos de Cloud.
    • BASEIMGFCT_PROJECT: Ingresa una string con la que la secuencia de comandos construya los ID de los proyectos que crea. La string debe tener entre 6 y 30 letras minúsculas, dígitos o guiones. Debe comenzar con una letra y no puede tener un guion final. Por ejemplo, si especificas foo, la secuencia de comandos crea tres proyectos con los ID foo-builder, foo-stage y foo-verified.
    • BASEIMGFCT_BUCKET: Ingresa un nombre para un bucket de Cloud Storage que la secuencia de comandos crea a fin de almacenar el código de automatización de Terraform. Asegúrate de que el nombre cumpla con los requisitos de nomenclatura de depósitos.
    • BASEIMGFCT_REGION: Ingresa el nombre de la región que se usará o usará el valor predeterminado.
    • BILLING_ACCOUNT: Ingresa la cuenta de facturación asociada con la organización.
    • GITHUB_TOKEN: Ingresa el token de acceso personal de GitHub. La secuencia de comandos usa este token a fin de crear un repositorio de GitHub que contenga el código fuente para las imágenes base.
  6. Ejecuta la secuencia de comandos de configuración:

    ./setup.sh
    
  7. Ingresa la siguiente información de la cuenta de GitHub cuando se te solicite:

    1. Es el nombre de tu organización de GitHub.

    2. Tu dirección de correo electrónico de GitHub.

    3. Es tu nombre de usuario de GitHub.

  8. La secuencia de comandos solicita permiso para crear un proyecto nuevo a fin de almacenar imágenes base.

    1. Ingrese "y".

    Esta operación tardará unos minutos en ejecutarse. Cuando termine, mostrará el mensaje Vincula tus repositorios de GitHub y presiona cualquier tecla para continuar.

  9. Presiona cualquier tecla para continuar.

    La secuencia de comandos abre una nueva ventana del navegador de Google Cloud Console para vincular tu repositorio de GitHub con tu proyecto de Cloud.

  10. Cambia a la ventana del navegador de Cloud Console.

  11. En la ventana emergente Administra las instalaciones de la app de GitHub, selecciona tu cuenta de GitHub.

  12. Haz clic en Agregar otro proyecto.

  13. En el menú desplegable Seleccionar un proyecto, selecciona el proyecto con el formato YOUR_PROJECT_NAME-builder.

  14. Marca la casilla de verificación de consentimiento y haz clic en Siguiente.

  15. En la lista de repositorios, selecciona el repositorio llamado baseimgfact-[some number]-containers y haz clic en Conectar (1) repositorios.

  16. En la página Crear activador de envío, haz clic en Omitir. La secuencia de comandos crea el activador de envío por ti automáticamente.

  17. Haga clic en Listo.

  18. Regrese a la terminal.

  19. Presiona cualquier tecla para continuar.

La secuencia de comandos lleva unos minutos en completar la ejecución.

Recursos que crea la canalización de imagen segura

Cuando la secuencia de comandos de configuración completa la ejecución, crea los siguientes recursos:

GitHub:

  • Un repositorio llamado baseimgfct-[some number]-containers que contenga el código fuente que se usa para crear imágenes de contenedor La secuencia de comandos setup inicia este repositorio con Dockerfiles simples, uno para cada una de las distribuciones populares de Linux.
  • Implementar claves: claves de implementación de acceso de escritura separadas para el repositorio

Proyectos de Google Cloud:

  • Un proyecto de Cloud llamado YOUR_PROJECT_NAME-builder que contiene recursos para compilar y enviar una imagen al proyecto de etapa de pruebas cada vez que se actualiza el código fuente en el repositorio de GitHub

    Este proyecto contiene los activadores de Cloud Build que invocan compilaciones cuando se realiza una solicitud de extracción o combinación en la rama principal en baseimgfct-[some number]-containers. Una solicitud de extracción compila y envía las imágenes al proyecto de etapa de pruebas. Una combinación compila y envía las imágenes al proyecto verificado.

    Permisos de IAM para YOUR_PROJECT_NAME-builder: te recomendamos que solo otorgues acceso a este proyecto a los miembros del equipo que se espera que realicen cambios en la canalización. Para obtener instrucciones sobre cómo otorgar acceso a los proyectos, consulta Otorga, cambia y revoca el acceso a los recursos.

  • Un proyecto de Cloud llamado YOUR_PROJECT_NAME-stage que se usa para almacenar en etapa intermedia las imágenes a fin de realizar una revisión manual antes de que las imágenes se publiquen en el proyecto verificado Este proyecto contiene los siguientes recursos:

    • Un repositorio de Docker de Artifact Registry que contiene las imágenes de contenedor compiladas.
    • Cloud Functions para cada imagen del proyecto, que activa una nueva compilación de la imagen cada vez que se encuentra una nueva solución para una vulnerabilidad conocida.
    • Temas de Pub/Sub que se usan para ejecutar Cloud Functions
    • Una instancia del servidor de cupones que se ejecuta como una implementación de Cloud Run. El servidor de cupones verifica la imagen con una lista de requisitos de las políticas de seguridad. Puedes usar los requisitos de la política predeterminados que se incluyen con la canalización o especificar una política de seguridad personalizada. Una vez superadas las verificaciones de seguridad, el servidor de cupones agrega una certificación a la imagen mediante la autorización binaria. Luego, esta imagen certificada, también llamada imagen firmada, se envía al proyecto verificado.

    Permisos de IAM para YOUR_PROJECT_NAME-stage: Recomendamos que solo otorgues acceso a este proyecto a los desarrolladores que tengan permiso para leer las imágenes en etapa de pruebas de Artifact Registry. Para obtener instrucciones sobre cómo otorgar acceso a los proyectos, consulta Otorga, cambia y revoca el acceso a los recursos.

  • Un proyecto de Cloud llamado YOUR_PROJECT_NAME-verified Este proyecto contiene las imágenes firmadas finales que se revisaron de forma manual.

Próximos pasos