Condividi tramite


Configurare l'aggiornamento continuo di patch in Registro Container di Azure

Questo articolo illustra come installare, abilitare e configurare l'applicazione continua di patch. L'applicazione del patching continuo quando è abilitata per un registro contenitori rileverà e correggerà automaticamente le vulnerabilità a livello di sistema operativo per le immagini dei contenitori.

Prerequisiti

  • È possibile usare Azure Cloud Shell o un'installazione locale dell'interfaccia della riga di comando di Azure con una versione minima della versione 2.15.0 o successiva.
  • Hai un gruppo di risorse esistente con un Registro Container di Azure.
  • Hai un Azure Container Registry con le attività ACR abilitate. Le attività ACR non sono supportate nel livello gratuito di Azure Container Registry.

Eseguire il comando seguente per installare l'estensione dell'interfaccia della riga di comando:

    az extension add -n acrcssc

Abilitare il flusso di lavoro di applicazione continua delle patch

  1. Accedere all'interfaccia della riga di comando di Azure con az login.

    az login
    
  2. Accedere a Registro Azure Container.

    az acr login -n <myRegistry>
    
  3. Eseguire il comando seguente per creare un file denominato continuouspatching.json.

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

    Lo schema inserisce repository e tag specifici in un formato di matrice. Ogni variabile è definita qui:

    • version consente al team ACR di Azure Container Registry di tenere traccia della versione dello schema in uso. Non modificare questa variabile a meno che non venga richiesto.

    • tag-convention è un campo facoltativo. I valori consentiti sono "incrementali" o "fluttuante". Per ulteriori informazioni, vedere Concetti chiave dell'applicazione di patch continua.

    • repositories è una matrice costituita da informazioni dettagliate sul repository e sui tag:

      • repository fa riferimento al nome del repository
      • tags è una matrice di tag separati da virgole. Il carattere jolly (wildcard) * può essere utilizzato per indicare tutti i tag all'interno di quel repository.
      • enabled è un valore booleano true o false che determina se il repository specificato è abilitato o meno.

    L'esempio seguente mostra una configurazione per un cliente che vuole applicare patch a tutti i tag (usare il simbolo *) all'interno del repository pythone per applicare patch in modo specifico ai jammy-20240111 tag e jammy-20240125 nel repository ubuntu.

    {
    "version": "v1",
    "tag-convention" : "incremental",
    "repositories": [{
            "repository": "python",
            "tags": ["*"],
            "enabled": true
        },
        {
            "repository": "ubuntu",
            "tags": ["jammy-20240111", "jammy-20240125"],
         "enabled": true, 
        }]
    }
    
  4. Dopo aver creato il file di configurazione, eseguire un'esecuzione asciutta per verificare che gli artefatti previsti siano selezionati dai criteri JSON. L'esecuzione a secco richiede un parametro denominato schedule, che specifica la frequenza con cui viene eseguito il ciclo di applicazione di patch continuo. L'indicatore di pianificazione è misurato in giorni, con un valore minimo di un giorno e un valore massimo di 30 giorni. Ad esempio, se si vuole applicare patch a un'immagine ogni giorno, è necessario specificare la pianificazione come 1do 1 giorno. Se si desidera una patch settimanale (una volta alla settimana), è necessario impostare la pianificazione come 7d, o 7 giorni.

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

    Il --dry-run flag restituisce tutti gli artefatti specificati dalla configurazione del file JSON. Verificare che siano selezionati gli artefatti corretti. Con la configurazione ubuntu di esempio, i risultati seguenti devono essere visualizzati come output:

    Ubuntu: jammy-20240111
    Ubuntu: jammy-20240125
    
  5. Quando i risultati ottenuti con dry-run sono soddisfacenti, eseguire nuovamente il comando create senza il flag --dry-run per creare il flusso di lavoro di applicazione patch continuo.

    Annotazioni

    Il --schedule parametro segue un moltiplicatore a giorno fisso a partire dal giorno 1 del mese. Questo significa che:

    • Se si specifica --schedule 7d e si esegue il comando il 3°, l'esecuzione pianificata successiva sarà il 7, perché 7 è il primo multiplo di 7 (giorni) dopo il 3°, contando dal giorno 1 del mese.
    • Se --schedule è 3d e oggi è il 7°, la prossima corsa pianificata atterra il 9° – dal momento che 9 è il successivo multiplo di 3 che segue 7.
    • Se si aggiunge il flag --run-immediately, si attiva un'esecuzione immediata della patch. L'esecuzione pianificata successiva sarà comunque allineata al multiplo di giorni più vicino a partire dal primo del mese, in base al valore --schedule specificato.
    • Il contatore della pianificazione viene reimpostato ogni mese. Indipendentemente dalla pianificazione designata, il flusso di lavoro verrà eseguito il primo di ogni mese, quindi seguire il valore di pianificazione specificato per il resto del mese. Se la mia patch viene eseguita il 28 gennaio e la mia pianificazione è di 7 giorni, la prossima patch verrà eseguita il primo febbraio, poi l'otto, e continuerà a seguire i 7 giorni.
    az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --run-immediately
    

    Al termine di un comando riuscito (indipendentemente dal fatto che --run-immediately sia incluso o meno), viene visualizzato un messaggio che conferma che le attività del flusso di lavoro vengono accodate. Viene inoltre visualizzato un parametro di output che indica quando è pianificata l'esecuzione successiva del flusso di lavoro, in modo da poter tenere traccia esattamente quando si verificherà nuovamente l'applicazione di patch.

Usare il portale di Azure per visualizzare le attività del flusso di lavoro

  1. Al termine del flusso di lavoro, passare al portale di Azure per visualizzare le attività in esecuzione. Nel menu del servizio, in Servizi, selezionare Repository. Verrà visualizzato un nuovo repository denominato csscpolicies/patchpolicy. Questo repository ospita l'artefatto di configurazione JSON a cui viene fatto riferimento continuamente per l'applicazione continua di patch.

  2. Quindi, in Servizi selezionare Attività. Verranno visualizzate tre nuove attività:

    • cssc-trigger-workflow - questa attività analizza il file di configurazione e invoca il processo di scansione su ciascuna rispettiva immagine.
    • cssc-scan-image : questa attività analizza l'immagine per individuare le vulnerabilità del sistema operativo. Questa attività attiva l'attività di applicazione di patch solo se sono state rilevate vulnerabilità del sistema operativo.
    • cssc-patch-image - questa attività applica una patch all'immagine.

    Queste attività funzionano insieme per eseguire il flusso di lavoro di applicazione continua delle patch.

  3. Per visualizzare esecuzioni di attività specifiche, selezionare Esecuzioni. Qui è possibile visualizzare informazioni sullo stato relative all'esito positivo o negativo dell'attività, insieme alla visualizzazione di un log di debug.

Screenshot che mostra le attività eseguite per l'applicazione di patch continue.

Usare l'interfaccia della riga di comando per visualizzare le attività del flusso di lavoro

È anche possibile eseguire il comando seguente dell'interfaccia della riga di comando per visualizzare altri dettagli su ogni attività e sul flusso di lavoro generale. Il comando restituisce la pianificazione, la data di creazione e i dati di sistema, ad esempio la data dell'ultima modifica.

Per esempio:

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

Per visualizzare tutti i flag obbligatori e facoltativi, usare il comando di aiuto:

az acr supply-chain workflow show --help

Aggiornare il flusso di lavoro per il patching continuo

Per apportare modifiche al flusso di lavoro di applicazione continua di patch, usare il comando update. È possibile aggiornare direttamente il programma o lo schema di configurazione JSON con il comando CLI di aggiornamento. Per esempio:

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

Per aggiornare la pianificazione, eseguire il comando precedente con un nuovo input per la pianificazione. Per aggiornare la configurazione JSON, è consigliabile apportare modifiche al file, eseguire un'esecuzione a secco e quindi eseguire il comando di aggiornamento.

Eliminare il flusso di lavoro di patching continuo

Per eliminare il flusso di lavoro di patching continuo, eseguire il seguente comando dell'interfaccia a riga di comando:

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

Dopo l'eliminazione di un flusso di lavoro, il repository "csscpolicies/patchpolicy" verrà eliminato automaticamente. Verranno eliminate anche le tre attività che eseguono il flusso di lavoro, insieme a tutte le esecuzioni attualmente in coda.

Risolvere i problemi delle patch continue

Esaminare questi suggerimenti per risolvere i problemi che possono verificarsi con l'applicazione continua di patch.

Elencare le attività in esecuzione

Per ottenere informazioni importanti sul debug, usare il comando seguente per elencare le attività di applicazione di patch continue eseguite più di recente:

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

Un risultato positivo restituirà le informazioni seguenti:

  • Nome e tag dell'immagine
  • Tipo di flusso di lavoro
  • Analizzare lo stato
  • Data e ora dell'ultima scansione (se lo stato non è riuscito, la data rimarrà vuota)
  • ID attività analisi (per altra attività di debug)
  • Stato patch
  • Data e ora dell'ultima patch (se lo stato fallisce, la data sarà lasciata vuota)
  • Nome immagine con patch + tag
  • ID attività di patch (per ulteriori operazioni di debug)

Usare [--run-status] per restituire tutti gli stati dell'attività corrispondenti al filtro specificato. Ad esempio, se si specifica --run-status failed, verranno elencate solo le immagini che hanno avuto esito negativo per l'applicazione di patch.

Annullare le attività in esecuzione

Alcuni scenari possono richiedere l'annullamento di attività attualmente in esecuzione o in attesa di esecuzione. Ad esempio, è possibile che venga visualizzata una configurazione errata che si preferisce correggere subito, anziché attendere il completamento delle attività di patch.

Per annullare le attività in esecuzione, usare il comando della CLI seguente:

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

Questo comando annulla tutte le attività di patching continue con stato Running, Queued o Started per la pianificazione corrente. Ad esempio, se si annullano le attività in base a una pianificazione giornaliera (--schedule 1d), le attività in tali stati vengono annullate per quel giorno, quindi pianificate di nuovo per il giorno successivo. Se la pianificazione è settimanale, le attività annullate vengono visualizzate di nuovo la settimana successiva.

Trovare le attività non riuscite

Usare il comando elenco attività per restituire tutte le attività non riuscite. Specificare il comando cssc-patch è la soluzione migliore in caso di errore.

Ad esempio, questo comando restituisce le prime 10 attività di patch non riuscite:

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

Per analizzare un errore specifico, prendere nota dell'oggetto runID restituito da questo comando ed eseguire:

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

Annullare un flusso di lavoro non configurato correttamente

Annullare le attività in coda con il comando cancel:

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