AvanzadoDevSecOps personalización de tuberías

Conozca las funciones avanzadas de adopción de DevSecOps después de incorporar su primera aplicación o microservicio.

Asegúrese de revisar el conceptos básicos deDevSecOps personalización de tuberías. Allí podrá obtener información sobre las diferentes plantillas disponibles, opciones de soporte y otra información importante para comenzar.DevSecOps.

Opciones de diseño

Mientras incorpora más aplicaciones y microservicios aDevSecOps, Es posible que tenga las siguientes preguntas de diseño:

  • ¿Necesito una cadena de herramientas por microservicio?
  • ¿Necesito una interconexión por microservicio?
  • ¿Necesito usar un compartido?DevSecOps ¿Depósito para inventario y problemas o necesito depósitos separados?

La siguiente información y las mejores prácticas están pensadas para ayudarle a tomar estas decisiones de diseño.

Consideraciones sobre cadenas de herramientas y conductos

La mayoría de las aplicaciones están hechas de varios microservicios con diferentes repositorios de origen. Normalmente, se utiliza una única cadena de herramientas para alojar microservicios que se agrupan lógicamente. En general, utilice una cadena de herramientas y un conducto, o el menor número posible de conductos, pero varios desencadenantes. Dentro de cada interconexión, puede duplicar y configurar tantos desencadenantes como necesite, hasta 1024 desencadenantes por interconexión. Esta estrategia ayuda a aplicar procesos comunes, scripts y archivos de configuración. Para obtener más información, consulte configuración de varias aplicaciones en una cadena de herramientas de AC.

Este enfoque presenta las siguientes ventajas:

  • El uso de menos interconexiones evita la duplicación y disminuye los errores. Las actualizaciones también son más fáciles de mantener, por ejemplo, cuando se añade, edita o suprime una propiedad o un secreto de entorno.
  • La incorporación de un servicio es más rápida con este enfoque. Añada una integración de Git para el microservicio, duplique el Git y los desencadenantes manuales y modifíquelos según sea necesario. A continuación, asegúrese de que el archivo .pipeline-config.yaml y los scripts estén implementados para el microservicio.

Este enfoque tiene los siguientes inconvenientes:

  • Una edición puede afectar a cada equipo que utiliza el mismo conducto.
  • El acceso de usuario se gestiona utilizando Identity and Access Management(IAM) y se establece en el nivel de cadena de herramientas, no en el nivel de conducto. Por lo tanto, si utiliza una única cadena de herramientas para varios servicios, cada miembro del equipo puede ver las interconexiones de otros equipos. En función del acceso del usuario en IAM, es posible que puedan editar, suprimir o desencadenar una interconexión.

Consideraciones sobre la facturación

El servicio Continuous Delivery determina la facturación en función del número de usuarios autorizados por instancia de CD y de cuántos grupos de recursos utilice para sus cadenas de herramientas. Los usuarios que tienen acceso a los repositorios también se consideran usuarios autorizados. Para obtener más información, consulte Usuarios autorizados. Para reducir costes, debería organizar todas sus cadenas de herramientas en el mismo grupo de recursos o configurar la facturación consolidada de Continuous Delivery dentro de una jerarquía de cuentas de empresa. Para más información, consulte Facturación consolidada.

DevSecOps consideraciones sobre repositorios

Si está creando una aplicación que se compone de múltiples microservicios, la mayoríaDevSecOps Los repositorios, excepto el repositorio de pruebas, se pueden compartir entre los microservicios.

Para más información, ver cómoDevSecOps oleoductos utilizan repositorios.

Consideraciones sobre el repositorio de configuración compartida

ElDevSecOps Las aplicaciones de muestra vienen con un archivo .pipeline-config.yaml archivo de configuración y scripts correspondientes. Al incorporar múltiples microservicios, una mejor práctica es separar los repositorios de código fuente deDevSecOps archivos de configuración y scripts. Almacénelos en un repositorio de configuración común dedicado y separado que puedan utilizar las interconexiones de AC, CD o CC.

Consta de:

  • Un repositorio Git dedicado para alojar una biblioteca de scripts comunes y.pipeline-config.yaml archivo (s).
  • Un único archivo.pipeline-config.yaml que es común a todos los servicios. Si es demasiado complejo o no es posible, utilice archivospipeline-config.yaml diferentes.
  • Personalización por carpeta. Implemente los archivos.pipeline-config.yaml para que apunten a diferentes carpetas de scripts en el repositorio de configuración. Organice los scripts en carpetas de AC, CD y CC separadas, o en función del lenguaje de servicio (Go, Python, NodeJS), servicio, nombre de aplicación o lo que mejor se ajuste a sus necesidades.

Cambie su(s) canal(es) para utilizar este repositorio de configuración compartido estableciendo el valor de la propiedad del canal pipeline-config-repo (opcionalmente, la pipeline-config-branch ) en el repositorio de configuración compartido URL.

Consideraciones sobre el repositorio de inventario

Un único repositorio de inventario se puede compartir entre muchas interconexiones y cadenas de herramientas. Varias cadenas de herramientas de AC, conductos y desencadenantes pueden contribuir al mismo repositorio de inventario. Las interconexiones de AC envían actualizaciones al repositorio de inventario, normalmente durante la etapa de actualización. A continuación, el repositorio de inventario se utiliza como entrada de origen para la interconexión de CD. En general, se recomienda agrupar los repositorios de inventario en la misma cadena de herramientas para reducir el número de solicitudes de cambio que se crean finalmente.

El uso de un repositorio de inventario compartido es una decisión de arquitectura que se debe tomar antes de iniciar la incorporación de microservicios porque esta decisión afecta al número de solicitudes de cambio que se crean cuando se ejecuta un conducto. Por ejemplo, digamos que desea incorporar 10 microservicios aDevSecOps. Puede tener 10 cadenas de herramientas de CD diferentes, con 10 repositorios de inventario diferentes, lo que da como resultado 10 solicitudes de cambio diferentes cada vez que se ejecuta una interconexión de CD. Es más fácil gestionar estos 10 microservicios diferentes si comparten un repositorio de inventario común y una cadena de herramientas de CD común. Esto sólo da como resultado una solicitud de cambio incluso si realiza actualizaciones en varios microservicios porque todos comparten el repositorio de inventario y la cadena de herramientas.

Consideraciones sobre el repositorio de problemas

El repositorio de problemas es donde se realiza un seguimiento de todos los problemas de vulnerabilidad para los microservicios. Si decide utilizar un repositorio de inventario compartido, es posible que también desee utilizar un repositorio de problemas compartidos.

Establecer incident-assigness y incident-labels en el nivel de interconexión o desencadenante ayuda a asignar automáticamente issus al equipo correcto. Para obtener más información, consulte parámetros de despliegue continuo.

Consideraciones sobre IBM Cloud Object Storage

Si utiliza un repositorio de inventario compartido, también puede utilizar una instancia compartida de IBM Cloud® Object Storage. Complete los pasossiguientes:

  1. Cree una instancia de de IBM Cloud Object Storage para utilizarla en cadenas de herramientas y pipelines.
  2. Configure interconexiones y desencadenantes, si procede, para utilizar el grupo IBM Cloud Object Storage estableciendo la propiedad de entorno cos-bucket-name.

Todos los microservicios de las mismas canalizaciones de CI, CD y CC comparten un cubo Object Storage, independientemente del entorno de implantación. El cubo Object Storage funciona de forma similar al depósito de pruebas, pero sin los problemas de rendimiento que pueden producirse con un depósito de pruebas importante. Dado que los problemas de rendimiento no se producen con un cubo importante de Object Storage, no es necesario podar las pruebas de los cubos de Object Storage.

Object Storage granularidad del cubo

DevSecOps no opinan sobre la granularidad de los cubos de Object Storage. Técnicamente, podría utilizar un único cubo Object Storage para toda su organización. Sin embargo, la granularidad no debe ser menor que un inventario, ya que el inventario es la agrupación lógica más pequeña de microservicios que pueden moverse juntos.

En la práctica, la granularidad se reduce al modelo operativo que su equipo de cumplimiento desee para gestionar los datos de cumplimiento:

  • Si el equipo de cumplimiento se siente cómodo gestionando múltiples cubos de Object Storage con datos compartimentados, es un modelo viable.
  • Si prefieren gestionar un único cubo más grande Object Storage con datos sin compartimentar, también es posible.

Una consideración clave: el cubo Object Storage (armario de pruebas) está pensado para ser legible por el sistema, no por el ser humano. No admite, y en un futuro previsible no lo hará, estructuras de carpetas organizadas por repositorio, microservicio, producto u organización. Sigue siendo una estructura aplanada de activos y pruebas.

Seguridad y acceso

Los cubos menos granulares de Object Storage aumentan el radio de explosión en caso de violación de la seguridad (por ejemplo, la exposición de una clave de API de Object Storage ). También puede crear problemas de visibilidad cruzada, ya que un producto vertical podría leer los datos de cumplimiento de otro si comparten el mismo cubo.

Consideraciones sobre la migración

Hay formas de migrar a través de los cubos de Object Storage si es necesario. Esto suele implicar la configuración de determinadas propiedades del entorno para un bucket de copia de seguridad de Object Storage y la reconstrucción de los componentes de CI. Consulte esta documentación para obtener más información. Sin embargo, esas operaciones están pensadas para ser actividades de migración puntuales, no algo diseñado para formar parte de los flujos de trabajo operativos diarios.

Despliegue en varios entornos

El despliegue en varios entornos de destino con la interconexión de CD se puede lograr de varias formas.

Cada targeted environment debe tener una rama correspondiente en el repositorio de inventario, donde los cambios se promocionan de un source a una rama de target.

Los siguientes diseños opcionales pueden ajustarse a su arquitectura:

  • Utilice un desencadenante manual por entorno de destino. Duplique un desencadenante y, a continuación, edite las propiedades de entorno para que se ajusten al nuevo entorno.
  • Utilice un repositorio de configuración Git con una carpeta por entorno de destino, donde los valores de configuración específicos se almacenan en archivos.

Cómo trabajar con scripts predeterminados y personalizados

La mayoría de los scripts de seguridad y conformidad se suministran con scripts predeterminados que se ejecutan si no se proporcionan scripts personalizados para una etapa. A veces puede ser difícil determinar qué script se ejecuta, dónde encontrar el script de origen correspondiente y cómo alterar temporalmente los scripts predeterminados.

Identificar qué script se ejecuta

Para identificar qué script se ejecuta para una etapa, abra la ejecución del conducto (preferiblemente un conducto de AC). Expanda una tarea y, a continuación, pulse run-stage para abrir los registros. El principio de los registros de run-stage proporciona información sobre los scripts que se han utilizado en la etapa, incluido en qué repositorio se encuentra el script. En los registros, puede desplazarse para encontrar más detalles sobre los scripts que se han ejecutado. Por ejemplo, la tarea code-compliance-checks puede tener la siguiente información en el registro de run-stage, que incluye propiedades de entorno para la etapa:

compliance-checks:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.18
  dind: true
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  script:
    #!/bin/sh

    "/opt/commons/compliance-checks/run.sh"

En ese ejemplo, el script que se ejecuta es /opt/commons/compliance-checks/run.sh, que se encuentra en la biblioteca commons. Utilice esta biblioteca de commons como origen para copiar código que se puede personalizar para casos periféricos específicos. En el ejemplo, compliance-checks/run.sh se encuentra en la biblioteca compliance-commons.

Alteración temporal de scripts predeterminados

Para alterar temporalmente los scripts predeterminados, realice los pasos siguientes:

  1. En el registro de etapa, copie el fragmento de código que identifica un script predeterminado:
compliance-checks:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.18
  dind: true
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  script:
    #!/bin/sh

    "/opt/commons/compliance-checks/run.sh"
  1. Pegue el fragmento de código en el archivo .pipeline-config.yaml.
  2. Añada el código personalizado antes o después de llamar al script. Este fragmento invoca el script de comprobaciones de cumplimiento predeterminado
  3. Edite, suprima o añada propiedades según sea necesario.

El ejemplo siguiente muestra el script actualizado en el archivo .pipeline-config.yaml:

compliance-checks:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.18
  dind: true
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  script: |
    #!/bin/sh
    # run some custom script here
    ./scripts/my-custom-script1.sh

    "/opt/commons/compliance-checks/run.sh"

    # then some additional work
    ./scripts/my-custom-script2.sh

Para obtener más información, consulte scripts personalizados.

Plantillas de Terraform para usarDevSecOps cadenas de herramientas como código

Las siguientes cadenas de herramientas proporcionan código para crearDevSecOps Cadenas de herramientas CI, CD y CC mediante Terraform:

El acceso anticipado a estas cadenas de herramientas de Terraform se proporciona tal cual. Estas cadenas de herramientas están en desarrollo activo, por lo que las variables y los nombres de variables pueden cambiar.