Compartir a través de


Configurar el parcheo continuo en Azure Container Registry

En este artículo, aprenderá a instalar, habilitar y configurar el parcheo continuo. La aplicación de revisiones continuas cuando esté habilitada para un registro de contenedor detectará y corregirá automáticamente las vulnerabilidades de nivel del sistema operativo (sistema operativo) para las imágenes de contenedor.

Prerrequisitos

  • Puede usar Azure Cloud Shell o una instalación local de la CLI de Azure con una versión mínima de 2.15.0 o posterior.
  • Tiene un grupo de recursos existente con un Azure Container Registry (ACR).
  • Tiene un registro de contenedores de Azure (Azure Container Registry) con ACR Tasks habilitado (ACR Tasks no se admite en el nivel gratuito de Azure Container Registry).

Ejecute el siguiente comando para instalar la extensión de la CLI:

    az extension add -n acrcssc

Habilitar el flujo de trabajo de aplicación continua de parches

  1. Inicie sesión en la CLI de Azure con az login.

    az login
    
  2. Inicio de sesión en ACR.

    az acr login -n <myRegistry>
    
  3. Ejecute el siguiente comando para crear un archivo denominado continuouspatching.json.

    cat <<EOF > continuouspatching.json
    {
        "version": "v1",
        "tag-convention" : "<incremental|floating>",
        "repositories": [{
            "repository": "<Repository Name>",
            "tags": ["<comma-separated-tags>"],   
            "enabled": <true|false>
        }] 
    }
    EOF
    

    El esquema ingiere repositorios y etiquetas específicos en un formato de matriz. Cada variable se define aquí:

    • version permite al equipo de ACR realizar un seguimiento de la versión del esquema que está utilizando. No cambie esta variable a menos que se le indique.

    • tag-convention es un campo opcional. Los valores permitidos son "incrementales" o "en flotación". Consulte Conceptos clave de parches continuos para obtener más información.

    • repositories es una matriz que consta de información detallada del repositorio y la etiqueta:

      • repository hace referencia al nombre del repositorio
      • tags es una matriz de etiquetas separadas por comas. El carácter comodín * se puede usar para firmar todas las etiquetas dentro de ese repositorio.
      • enabled es un valor booleano de true o false que determina si el repositorio especificado está habilitado o no.

    En el ejemplo siguiente se muestra una configuración para un cliente que quiere parchear todas las etiquetas usando el símbolo * dentro del repositorio python, y parchear específicamente las etiquetas jammy-20240111 y jammy-20240125 en el repositorio ubuntu.

    {
    "version": "v1",
    "tag-convention" : "incremental",
    "repositories": [{
            "repository": "python",
            "tags": ["*"],
            "enabled": true
        },
        {
            "repository": "ubuntu",
            "tags": ["jammy-20240111", "jammy-20240125"],
         "enabled": true, 
        }]
    }
    
  4. Después de crear el archivo de configuración, ejecute una ejecución seca para comprobar que los artefactos previstos se seleccionan según los criterios JSON. La simulación requiere un parámetro denominado schedule, que especifica la frecuencia con la que se ejecuta el ciclo de aplicación de revisiones continuas. La marca de programación se mide en días, con un valor mínimo de un día y un valor máximo de 30 días. Por ejemplo, si desea aplicar revisiones a una imagen todos los días, especificaría la programación como 1d, o 1 día. Si desea un parche semanal (una vez a la semana), configuraría el cronograma como 7d, o 7 días.

    az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --dry-run   
    

    La --dry-run bandera muestra todos los artefactos especificados por la configuración del archivo JSON. Compruebe que se seleccionan los artefactos correctos. Con la configuración de ubuntu de ejemplo, se deben mostrar los siguientes resultados como salida:

    Ubuntu: jammy-20240111
    Ubuntu: jammy-20240125
    
  5. Una vez satisfecho con los resultados de la ejecución en seco, ejecute de nuevo el comando create sin la bandera --dry-run para crear su flujo de trabajo de parcheo continuo.

    Nota:

    El --schedule parámetro sigue un multiplicador de día fijo a partir del día 1 del mes. Esto significa lo siguiente:

    • Si especifica --schedule 7d y ejecuta el comando el día 3, la siguiente ejecución programada será el día 7, ya que 7 es el primer múltiplo de 7 (días) después del día 3, contando desde el día 1 del mes.
    • Si --schedule es 3d y hoy es 7, la siguiente carrera programada llega al 9, ya que 9 es el siguiente múltiplo de 3 que sigue a 7.
    • Si añades la bandera --run-immediately, inicia de inmediato una ejecución de parche. La siguiente ejecución programada seguirá estando alineada con el múltiplo de día más próximo a partir del primer día del mes, en función del valor --schedule.
    • El contador de programación se restablece cada mes. Independientemente de la programación designada, el flujo de trabajo se ejecutará en el primero de cada mes y, a continuación, seguirá el valor de programación especificado durante el resto del mes. Si mi aplicación de revisiones se ejecuta el 28 de enero y mi programación es 7d, mi siguiente revisión se ejecutará el uno de febrero, luego el ocho, y seguirá ejecutándose cada 7 días.
    az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --run-immediately
    

    Tras un comando correcto (independientemente de si se incluye --run-immediately), verá un mensaje de confirmación de que las tareas de flujo de trabajo están en cola. También verá un parámetro de salida que indica cuándo está programada la siguiente ejecución de su flujo de trabajo, para que pueda realizar un seguimiento exacto de cuándo se aplicarán nuevamente las correcciones.

Uso de Azure Portal para ver las tareas de flujo de trabajo

  1. Una vez que el flujo de trabajo se realiza correctamente, vaya a Azure Portal para ver las tareas en ejecución. En el menú servicio, en Servicios, seleccione Repositorios. Debería ver un nuevo repositorio denominado csscpolicies/patchpolicy. Este repositorio hospeda el artefacto de configuración JSON al que se hace referencia continuamente para la aplicación de revisiones continuas.

  2. A continuación, en Servicios, seleccione Tareas. Debería ver tres nuevas tareas:

    • cssc-trigger-workflow - esta tarea escanea el archivo de configuración y llama a la tarea de escaneo en cada imagen respectiva.
    • cssc-scan-image : esta tarea examina la imagen para detectar vulnerabilidades del sistema operativo. Esta tarea desencadena la tarea de parcheo solo si se encontraron vulnerabilidades del sistema operativo.
    • cssc-patch-image - esta tarea parchea la imagen.

    Estas tareas funcionan conjuntamente para ejecutar el flujo de trabajo de aplicación de parches continuos.

  3. Para ver ejecuciones de tareas específicas, seleccione Ejecuciones. Aquí puede ver información de estado sobre el éxito o fracaso de la tarea, además de ver un registro de depuración.

Captura de pantalla que muestra la ejecución de tareas para parches continuos.

Uso de la CLI para ver las tareas de flujo de trabajo

También puede ejecutar el siguiente comando show de la CLI para ver más detalles sobre cada tarea y el flujo de trabajo general. El comando genera la programación, la fecha de creación y los datos del sistema, como la fecha de última modificación.

Por ejemplo:

az acr supply-chain workflow show -r myRegistry -g myResourceGroup -t continuouspatchv1 

Para ver todas las marcas obligatorias y opcionales, use el comando de ayuda:

az acr supply-chain workflow show --help

Actualización del flujo de trabajo de aplicación de revisiones continuas

Para realizar modificaciones en el flujo de trabajo de aplicación de revisiones continuas, utilice el comando de actualización. Puede actualizar su horario o esquema de configuración JSON directamente con el comando de actualización de la CLI. Por ejemplo:

az acr supply-chain workflow update -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d

Para actualizar la programación, ejecute el comando anterior con una nueva entrada para la programación. Para actualizar la configuración de JSON, se recomienda realizar cambios en el archivo, ejecutar una ejecución seca y, a continuación, ejecutar el comando update.

Eliminar el flujo de trabajo de parcheo continuo

Para eliminar el flujo de trabajo de revisiones continuas, ejecute el siguiente comando de la CLI:

az acr supply-chain workflow delete -r myregistry -g myresourcegroup -t continuouspatchv1

Una vez que se elimina correctamente un flujo de trabajo, el repositorio "csscpolicies/patchpolicy" se eliminará automáticamente. Las tres tareas que ejecutan el flujo de trabajo también se eliminarán, junto con las ejecuciones actualmente en cola.

Resolución de problemas de parches continuos

Consulte estas sugerencias para solucionar problemas que puede encontrar con la aplicación de parches continuos.

Enumerar tareas en ejecución

Para obtener información importante sobre la depuración de errores, use el siguiente comando para enumerar las tareas de parcheo continuo ejecutadas más recientemente.

az acr supply-chain workflow list -r <registryname> -g <resourcegroup> [--run-status <failed || successful || running>] -t continuouspatchv1

Un resultado correcto devolverá la siguiente información:

  • Nombre y etiqueta de imagen
  • Tipo de flujo de trabajo
  • Estado del escaneo
  • Fecha y hora del último análisis (si se ha producido un error en el estado, la fecha se deja en blanco)
  • Identificador de tarea de escaneo (para una depuración posterior)
  • Estado del parche
  • Fecha y hora del último parche (si el estado falló, la fecha quedaría en blanco)
  • Nombre de imagen actualizado + etiqueta
  • Id. de tarea de revisión (para una depuración adicional)

Use [--run-status] para devolver todos los estados de tarea que coincidan con el filtro especificado. Por ejemplo, si especifica --run-status failed, solo se mostrarán las imágenes que han producido un error en la aplicación de revisiones.

Cancelar tareas en ejecución

Algunos escenarios pueden requerir que cancele las tareas que se están ejecutando actualmente o esperando a ejecutarse. Por ejemplo, es posible que vea una configuración incorrecta que prefiere corregir inmediatamente, en lugar de esperar a que se completen las tareas de revisión.

Para cancelar las tareas en ejecución, use el siguiente comando de la CLI:

az acr supply-chain workflow cancel-run -r <registryname> -g <resourcegroup> --type <continuouspatchv1>

Este comando cancela todas las tareas de aplicación de revisiones continuas con un estado de Running, Queued o Started para la programación actual. Por ejemplo, si cancela tareas según una programación diaria (--schedule 1d), las tareas de esos estados se cancelan para ese día y, a continuación, se programan de nuevo para el día siguiente. Si la programación es semanal, las tareas canceladas vuelven a aparecer la semana siguiente.

Búsqueda de tareas con errores

Use el comando de lista de tareas para generar todas las tareas con errores. Especificar el comando cssc-patch es mejor para errores.

Por ejemplo, este comando devuelve las 10 tareas de parches fallidas.

az acr task list-runs -r <registryname> -n cssc-patch-image --run-status Failed --top 10

Para investigar un error específico, tome nota de runID que se devuelve de este comando y luego ejecute:

az acr task logs -r <registryname> --run-id <run-id>

Cancelar flujo de trabajo mal configurado

Cancelar tareas en cola con el comando cancel:

az acr supply-chain workflow cancel-run -r <registryname> -g <resourcegroup> --type <continuouspatchv1>