Configurar una cadena de herramientas de CD para la Infraestructura como Código

Este tutorial es la tercera parte de una serie de tres tutoriales en los que aprenderás las mejores prácticas de IBM Cloud® DevSecOps utilizando una implementación de referencia completa que está disponible como servicio y funciona con IBM Cloud® Continuous Delivery. En la parte 3 de esta serie de tutoriales, utilizará la plantilla de cadena de herramientas para la implementación continua (CD) con las prácticas recomendadas relacionadas con la seguridad y el cumplimiento normativo en DevSecOps.

Antes de empezar

Antes de comenzar la parte 3 de esta serie de tutoriales, asegúrese de haber completado los siguientes requisitos previos:

  1. Complete la Parte 1: Establezca los requisitos previos.
  2. Complete la Parte 2: Configure una cadena de herramientas CI para la Infraestructura como Código(Terraform).
  3. Vea el vídeo Introducción a DevSecOps en IBM Cloud- Parte 2.

CD - Implantar una aplicación segura con las prácticas de DevSecOps

La cadena de herramientas de CD de DevSecOps sólo contiene una canalización para el despliegue continuo. Se implementan las siguientes recomendaciones:

  • se cambia la automatización de la gestión para ayudar a los desarrolladores, aprobadores y auditores a realizar un seguimiento de los despliegues desde el punto de vista del cumplimiento.
  • Crea un resumen de pruebas a partir de las pruebas recopiladas en el proceso de CI.
  • Crea una solicitud de cambio en el repositorio de gestión de cambios basado en Git Repos and Issue Tracking y le añade pruebas de implantación.
  • Utiliza el repositorio de inventario para promover artefactos construidos a entornos de despliegue como staging y prod.
  • Comprueba el CR y lo aprueba automáticamente si se superan todas las comprobaciones.
  • Si se aprueba la RC, o la emergencia, la cadena de herramientas despliega la imagen desde el inventario a producción.

Visión general de la configuración guiada para la cadena de herramientas de entrega continua

Cualquiera de los métodos de esta guía de aprendizaje le va a ofrecer una experiencia de configuración guiada. Se le guiará a través del proceso de configuración de la cadena de herramientas y se le presentarán las opciones de configuración recomendadas necesarias para crear su cadena de herramientas.

Un indicador de progreso muestra los pasos para completar la configuración. Puede utilizar el indicador de progreso para navegar a un paso anterior. Las opciones de configuración del paso actual se visualizan en el área principal de la página.

DevSecOps Página de bienvenida de la cadena de herramientas de Despliegue Continuo Figura 1.
DevSecOps Página de bienvenida de la cadena de herramientas de implantación continua

Para avanzar al paso siguiente, pulse Continuar. Sólo puede avanzar al paso siguiente una vez completada y validada la configuración del paso actual. Puede ir al paso anterior pulsando el botón Atrás.

Algunos pasos incluyen un conmutador Cambiar a configuración avanzada. Estos pasos le presentan por defecto la configuración mínima necesaria. Sin embargo, los usuarios avanzados que necesiten un control más preciso pueden hacer clic en el conmutador Cambiar a configuración avanzada para mostrar todas las opciones de la integración subyacente.

DevSecOps Conmutador de configuración avanzada Figura 2.
DevSecOps Configuración avanzada

Una vez completados con éxito todos los pasos, cree la cadena de herramientas haciendo clic en Crear en el paso Resumen.

Siempre puede volver a los pasos anteriores en el instalador guiado. El instalador de la cadena de herramientas conserva todos los valores de configuración de los pasos sucesivos.

Inicie la configuración de la cadena de herramientas de entrega continua

Inicie la configuración de la cadena de herramientas de entrega continua utilizando una de las opciones siguientes:

  • Haga clic en Crear cadena de herramientas.

    Crear cadena de herramientas

  • En la consola IBM Cloud, haga clic en el icono Menu y seleccione DevOps. En la página Cadenas de herramientas, haga clic en Crear cadena de herramientas. En la página Crear una cadena de herramientas, haga clic en CD-Develop con las prácticas de DevSecOps.

Configurar el nombre y la región de la cadena de herramientas del CD

Revise la información predeterminada para la configuración de la cadena de herramientas. El nombre de la cadena de herramientas la identifica en IBM Cloud. Asegúrese de que el nombre de la cadena de herramientas sea exclusivo dentro de las cadenas de herramientas de la misma región y grupo de recursos en IBM Cloud.

Elija la cadena de herramientas de CI asociada en el menú desplegable para copiar parte de la configuración de CI para ayudar en la configuración de esta cadena de herramientas de CD.

DevSecOps cadena de herramientas CI asociada Figura 3.
DevSecOps cadena de herramientas CI asociada

Advertencia: Esta acción puede sobrescribir algunos de los valores que ya ha introducido.

Integración de herramientas de CD

Si ya se ha vinculado a una cadena de herramientas CI existente en el paso Bienvenido, los nombres de los repositorios relacionados con la aplicación que se utilizan en esa cadena de herramientas se rellenan previamente. Revise los URL de repositorio y, a continuación, continúe con los pasos siguientes.

Repositorios relacionados con la aplicación

Si desea configurar su cadena de herramientas de CD desde cero, configure estos repositorios durante la creación de la cadena de herramientas de CI y, a continuación, utilícelos o enlace a ellos aquí.

Para obtener la respectiva URL, vaya a CI Pipeline, seleccione la respectiva tarjeta de herramientas. Haga clic con el botón derecho en la tarjeta de herramientas y seleccione Copiar dirección de enlace.

  • Inventario: El repositorio de inventario registra los detalles de los artefactos que son construidos por los pipelines CI y CD. Por ejemplo, https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-inventory
  • Problemas: El repositorio de incidencias registra las incidencias que se encuentran mientras se ejecuta el canal de CI. Por ejemplo, https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-issues.
  • Pruebas: aquí se recopilan todas las pruebas de conformidad sin formato que pertenecen a la aplicación. Por ejemplo, https://<region>.git.cloud.ibm.com/myorg/my-compliance-ci-evidence.

Actualmente, la cadena de herramientas solo admite enlaces a repositorios Git Repos and Issue Tracking alojados en IBM.

Inventario

Repositorio URL: URL del repositorio de inventario que está configurado en su cadena de herramientas CI tal y como se capturó en el paso anterior.

Problemas

Repositorio URL: URL del repositorio de incidencias que está configurado en su cadena de herramientas CI tal y como se capturó en el paso anterior.

Configuración de la canalización

El repositorio de configuración de interconexión contiene archivos YAML y scripts necesarios para el despliegue, las pruebas y otras tareas personalizadas.

Para este tutorial, el repositorio de configuración del pipeline es el mismo que el definido para el CI de DevSecOps para Infrastructure as Code ( IaC ). Seleccione Utilizar repositorio de configuración de despliegue existente y seleccione el repositorio que se utiliza para la configuración de canalización de la cadena de herramientas de CI.

Para obtener más información sobre los repositorios de Git, consulte Configuración de Git Repos and Issue Tracking. Para obtener más información sobre los scripts personalizables, consulte Scripts personalizados.

Secretos

Varias herramientas en esta cadena de herramientas, y posiblemente en sus scripts personalizables, requieren secretos para acceder a recursos privilegiados. Una clave de API de IBM Cloud es un ejemplo de un secreto de este tipo. Almacene estos secretos de forma segura en una herramienta de gestión de secretos recomendada por IBM, como por ejemplo IBM Key Protect for IBM Cloud, IBM Cloud® Secrets Manager o HashiCorp Vault. La herramienta de gestión de secretos puede integrarse en la cadena de herramientas para que pueda referenciar fácilmente los secretos en su pipeline Tekton.

Este tutorial utiliza IBM Cloud® Secrets Manager como cámara acorazada para los secretos.

Almacenamiento de pruebas

El armario de pruebas almacena las pruebas de todas las tareas que ejecuta la canalización. Estas pruebas son recogidas por la tubería durante la ejecución de la misma.

Seleccione el cubo Cloud Object Storage (COS) configurado para su cadena de herramientas de integración continua (CI). Asegúrese de que se utiliza el mismo cubo COS en todas las cadenas de herramientas de integración continua (CI), Continuous Delivery (CD) y cumplimiento continuo (CC).

Es una buena práctica utilizar un cubo Cloud Object Storage como almacén de pruebas para almacenar todas las pruebas y artefactos que se recopilan durante la ejecución de la canalización.

Para más información sobre el almacenamiento de pruebas, véase Pruebas.

Pruebas

Repositorio URL: URL del repositorio del armario de pruebas que está configurado en su cadena de herramientas CI tal y como se capturó en el paso anterior.

Grupo de nube Object Storage

Para utilizar esta función, debe disponer de una instancia de Cloud Object Storage y un bucket. Haga clic en Usar buckets de Cloud Object Storage como almacén de pruebas para crear una instancia de Cloud Object Storage. Para obtener más información sobre cómo configurar un depósito que pueda actuar como almacén de pruebas de cumplimiento normativo, consulte Configuración de Cloud Object Storage para almacenar pruebas.

  • Los campos instancia de Cloud Object Storage, nombre de Bucket y punto final de Cloud Object Storage se rellenan automáticamente.
  • Introduzca la clave API de ID de servicio
    • Es preferible: Se puede importar una clave existente de un almacén de secretos haciendo clic en el icono de la clave.
    • Se puede copiar y pegar una clave existente.

El campo de punto final es opcional. Seleccione o proporcione el punto final durante la configuración de la cadena de herramientas o durante la ejecución de la canalización.

Destino de despliegue

Para el caso de uso DevSecOps para Terraform, elija la opción Despliegue personalizado.

Objetivo personalizado

Esta opción requiere la clave API IBM Cloud que se utiliza en los scripts de despliegue de la canalización. Los scripts de despliegue proporcionados utilizan Schematics para cargar el artefacto de configuración de Terraform en el espacio de trabajo Schematics y utilizan Schematics CLI plan y apply comandos para entregar la configuración de Terraform en IBM Cloud.

Clave de API de IBM Cloud

La clave API interactúa con la herramienta CLI IBM Cloud en varias tareas:

  • Es preferible: Importar una clave existente de un almacén de secretos haciendo clic en el icono de la clave.
  • Copiar y pegar una clave existente.
  • Cree una clave pulsando el botón Nuevo +.

Guarde la clave API recién generada en un almacén de secretos.

Gestión de solicitudes de cambio

Utilice un repositorio IBM Cloud-hosted Git Repos and Issue Tracking para gestionar las solicitudes de cambio. Para obtener más información, consulte Automatización de la gestión de cambios.

DevOps cadena de herramientas insights

Vincule una instancia de DevOps insights existente de otra cadena de herramientas a esta canalización para que todos los registros de creación, despliegue y prueba de las canalizaciones de la cadena de herramientas de CI y CD se recopilen en el mismo lugar.

La cadena de herramientas de CD puede publicar los registros de despliegue en una instancia existente de DevOps insights. Para activar esta función, proporcione el ID de la cadena de herramientas que contiene la instancia DevOps Insights existente seleccionándola en el desplegable ID de cadena de herramientas de DevOps insights.

Herramientas opcionales

Slack

Configure la herramienta Slack para recibir notificaciones sobre sus eventos PR/CI Pipeline:

  • Webhook Slack
  • Es preferible: Se puede importar un webhook existente desde un almacén de secretos haciendo clic en el icono de la llave.
  • Copie y pegue un webhook existente.
  • Canal Slack: envíe un mensaje a un canal Slack existente.
  • Slack nombre del equipo: la frase antes de . slack.com en nuestro equipo URL. Por ejemplo, si tu equipo URL es https://team.slack.com, el nombre del equipo es team.
  • Notificaciones automatizadas de Slack: Personalice su selección eligiendo los eventos para los que desea recibir notificaciones.

Puede añadir la herramienta Slack después de crear la cadena de herramientas.

Después de crear su cadena de herramientas, active el envío de notificaciones con la propiedad de entorno slack-notifications en su canal de CD (0 = desactivado, 1 = activado)

Creación de la cadena de herramientas de entrega continua

En la página Resumen, haga clic en Crear y espere a que se cree la cadena de herramientas.

Configure las integraciones individuales de la cadena de herramientas una vez creada la canalización.

DevSecOps CD Toolchain Creado Figura 4.
DevSecOps Cadena de herramientas de CD creada

Explore la cadena de herramientas de entrega continua

Una vez creada la cadena de herramientas de CD, haga clic en la tarjeta cd-pipeline para abrir y ejecutar la cadena de promoción.

Ejecute la interconexión de promoción

Asegúrese de que la canalización CI se ha ejecutado correctamente antes de ejecutar la canalización de promoción.

La interconexión de promoción crea una Solicitud de extracción con el contenido del inventario en la rama de entorno de origen de inventario (por ejemplo: maestro) dirigida a la rama de entorno de destino de inventario (por ejemplo: transferencia o producción).

  • En el panel de cd-pipeline, haga clic en Ejecutar pipeline y seleccione el Activador de promoción manual. Haga clic en Ejecutar para activar la canalización.
  • Espere a que finalice la ejecución de la tubería de promoción y compruebe el registro de ejecución.
  • Una vez que el proceso de promoción finaliza correctamente, el registro de tareas de promote proporciona un enlace a la solicitud de extracción en el repositorio de inventario. El nombre de la solicitud de extracción tiene el formato promote <Inventory Source Environment> to <Inventory Target Environment>.
  1. Abra el pull request en su navegador con el enlace proporcionado en el registro. Complete los datos de las secciones siguientes:

    • Prioridad: (obligatoria) Una de las siguientes: Crítica, Alta, Moderada, Baja, Planificación.
    • Change Request assignee: (obligatorio) email-id del asignatario.
    • Descripción adicional: Descripción de los cambios en la aplicación.
    • Finalidad: Finalidad de los cambios que se realizan en la aplicación.
    • Explicación del impacto: Impacto del cambio en el comportamiento o entorno de la aplicación.
    • Plan de restitución: pasos para restituir si se produce un error de despliegue.
  2. Rellene los campos de la solicitud de extracción y haga clic en Guardar.

  3. Añada la etiqueta EMERGENCY a su PR si ha fallado alguna comprobación de conformidad en CI y desea continuar con la implantación

  4. Fusione la solicitud de extracción de Git Repos and Issue Tracking.

Los detalles del pull request son utilizados por el CD Pipeline para crear una Solicitud de Cambio en el repositorio de Gestión de Solicitudes de Cambio durante la ejecución del CD Pipeline.

Configurar el CD Pipeline

variables de terraform

Para este tutorial, especifique el nombre de la instancia de protección de claves que se creará en el entorno de producción.

Para ello, seleccione Propiedades del entorno en la línea de comandos y haga clic en Añadir.

Configuración de CD Pipeline
Figura 5. Configuración de la tubería de CD

Añade una propiedad de tipo Text Value y nombre TF_VAR_key_protect_instance. Establezca un valor significativo que indique la entrega al entorno de producción, como key-protect-production-202210191453. El valor de esta propiedad de entorno se inyecta como valor de la variable de configuración key_protect_instance terraform.

También debe configurar el proveedor IBM Cloud para Terraform con el ibmcloud_api_key apropiado que se autentique con el IBM Cloud como se describe en Configuración del plugin IBM Cloud Provider

Añade una propiedad de tipo Secure Value y nombre TF_VAR_ibmcloud_api_key. Establezca el valor de la clave api que se utilizará para la creación de recursos en IBM Cloud.

La muestra utilizada en este tutorial espera un resource_group para crear la instancia KeyProtect. El nombre por defecto de resource_group es Default. Si esto no es apropiado para su cuenta, reemplace la variable por defecto resource_group en el archivo variables.tf o especifique el valor de la variable resource_group a utilizar estableciendo la propiedad de entorno TF_VAR_resource_group en el nombre del grupo de recursos apropiado.

Rama de configuración de la tubería

La rama del repositorio de configuración del pipeline se define como master en las propiedades del entorno de CD Pipeline por defecto. Cambia la rama a main para este tutorial.

Para ello, seleccione Propiedades del entorno en la línea de comandos de cd y haga clic en edit para cambiar el valor a main

CD Configuración de la tubería rama
Figura 6. Rama de configuración de CD Pipeline

Ejecución de la interconexión de entrega continua

Inicie un conducto de CD de una de las siguientes maneras:

  • Preferido: activar el canal de CD manualmente.
  • Opcional: automáticamente después de cada acción Merge en el Repositorio de Inventario. Un disparador Git Repos and Issue Tracking está configurado para activar el CD Pipeline automático, pero está desactivado por defecto.

También puede activar el proceso de CD manualmente en cualquier momento, pero si no hay cambios desde el último despliegue con éxito, el proceso de CD se aborta antes de tiempo porque no hay nada que desplegar. Puede añadir y utilizar force-redeploy variable para volver a ejecutar el CD sin cambios de código.

Una ejecución correcta de una interconexión de entrega continua tiene este aspecto:

DevSecOps CD Pipeline Éxito Figura 7.
DevSecOps Éxito del CD Pipeline

Una vez ejecutado correctamente el proceso de CD, podrá encontrar el servicio de instancia KeyProtect en la lista de recursos.

KeyProtect instancia de servicio creada Figura 8.
KeyProtect instancia de servicio creada