Come usare in modo sicuro variabili e parametri nella pipeline

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Questo articolo illustra come usare in modo sicuro variabili e parametri per raccogliere input dagli utenti della pipeline. Per altre informazioni sull'uso di variabili e parametri, vedere:

Prestare attenzione alle variabili segrete. I modi consigliati per impostare le variabili segrete si trovano nell'interfaccia utente, in un gruppo di variabili e in un gruppo di variabili di Azure Key Vault. Per altre informazioni, vedere Impostare le variabili segrete.

Variabili

Le variabili possono essere un modo pratico per raccogliere informazioni dall'utente in anticipo. È anche possibile usare le variabili per passare i dati dal passaggio al passaggio all'interno di una pipeline.

Ma usare le variabili con cautela. Le variabili appena create, definite in YAML o scritte da uno script, sono di lettura/scrittura per impostazione predefinita. Un passaggio downstream può modificare il valore di una variabile in modo non previsto.

Ad esempio, lo script legge:

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

Un passaggio precedente può impostare MyConfig su Debug & deltree /y c:. Anche se questo esempio elimina solo il contenuto dell'agente di compilazione, è possibile immaginare come questa impostazione possa diventare molto più pericolosa.

È possibile rendere le variabili di sola lettura. Le variabili di sistema, ad esempio Build.SourcesDirectory, le variabili di output delle attività e le variabili di tempo di coda sono sempre di sola lettura. Le variabili create in YAML o create in fase di esecuzione da uno script possono essere designate come di sola lettura. Quando uno script o un'attività crea una nuova variabile, può passare il isReadonly=true flag nel relativo comando di registrazione per rendere la variabile di sola lettura.

In YAML è possibile specificare variabili di sola lettura usando una chiave specifica:

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

Variabili di tempo di coda

Quando si definisce una variabile nell'editor dell'interfaccia utente pipeline, è possibile scegliere di consentire agli utenti di ignorarne il valore durante l'esecuzione della pipeline. Tale variabile viene chiamata variabile di tipo queue-time. Le variabili in fase di coda vengono sempre definite nell'editor dell'interfaccia utente pipeline.

Screenshot della definizione di una variabile in fase di coda.

Le variabili in fase di coda vengono esposte all'utente finale quando eseguono manualmente una pipeline e possono modificare i valori. Screenshot dell'aggiornamento del valore di una variabile della coda.

Per specificare le variabili impostate in fase di coda, gli utenti devono disporre dell'autorizzazione modifica della configurazione della compilazione della coda per la pipeline.

Limita variabili che è possibile impostare nel tempo di attesa

L'interfaccia utente e l'API REST usata per eseguire una pipeline consentono agli utenti di definire nuove variabili in fase di coda.

Screenshot dell'aggiunta di una variabile di queue-time subito prima di eseguire la pipeline.

Durante la fase iniziale della disponibilità di Azure Pipelines questa funzionalità ha avuto alcuni problemi:

  • Gli utenti possono definire nuove variabili che non sono definite in modo esplicito dall'autore della pipeline nella definizione.
  • Consentiva agli utenti di eseguire l'override delle variabili di sistema.

Per correggere questi problemi, è stata definita un'impostazione per limitare le variabili che possono essere impostate in fase di accodamento. Con questa impostazione abilitata, è possibile impostare solo le variabili contrassegnate in modo esplicito come "Impostabile nel tempo di attesa". In altre parole, è possibile impostare qualsiasi variabile in fase di accodamento, a meno che questa impostazione non sia abilitata.

L'impostazione è progettata per funzionare a livello di organizzazione e a livello di progetto.

  1. Livello di organizzazione. Quando l'impostazione è attivata, impone che, per tutte le pipeline in tutti i progetti dell'organizzazione, è possibile impostare solo le variabili contrassegnate in modo esplicito come "Impostabile in fase di coda". Quando l'impostazione è disattivata, ogni progetto può scegliere se limitare o meno le variabili impostate in fase di coda. L'impostazione è un interruttore in Impostazioni organizzazione -> Pipeline -> Impostazioni. Solo gli amministratori della raccolta di progetti possono abilitarla o disabilitarla. Screenshot della limitazione delle variabili che possono essere impostate nel tempo di attesa a livello di organizzazione.
  2. Livello progetto. Quando l'impostazione è attivata, impone che, per tutte le pipeline nel progetto, è possibile impostare solo le variabili contrassegnate in modo esplicito come "Impostabile in fase di coda". Se l'impostazione è attiva a livello di organizzazione, è attivata per tutti i progetti e non può essere disattivata. L'impostazione è un interruttore in Project Impostazioni - Pipelines ->> Impostazioni. Solo gli amministratori del progetto possono abilitarla o disabilitarla. Screenshot della limitazione delle variabili che possono essere impostate in fase di coda a livello di progetto.

Esaminiamo un esempio. Si supponga che l'impostazione sia attivata e che la pipeline definisca una variabile denominata my_variable che non è impostabile in fase di coda. Screenshot della definizione di una variabile in una pipeline classica.

Si supponga quindi di voler eseguire la pipeline. Il pannello Variabili non mostra alcuna variabile e il pulsante Aggiungi variabile non è presente.

Screenshot del pannello delle variabili con l'impostazione attivata.

Usando le compilazioni - Coda e le esecuzioni - Eseguire chiamate ALL'API REST della pipeline per accodare un'esecuzione della pipeline e impostare il valore di my_variable o di una nuova variabile avrà esito negativo con un errore simile al seguente.

{
  "$id": "1",
  "innerException": null,
  "message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
  "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
  "typeKey": "PipelineValidationException",
  "errorCode": 0,
  "eventId": 3000
}

Parametri

A differenza delle variabili, i parametri della pipeline non possono essere modificati da una pipeline durante l'esecuzione. I parametri hanno tipi di dati come number e string e possono essere limitati a un subset di valori. La limitazione dei parametri è utile quando una parte configurabile dall'utente della pipeline deve accettare un valore solo da un elenco vincolato. L'installazione garantisce che la pipeline non accetta dati arbitrari.

Abilitare la convalida dei parametri degli argomenti delle attività della shell

Le pipeline possono fare riferimento alle attività eseguite nella pipeline. Diverse attività incluse in Azure DevOps hanno un parametro di argomenti che consente di specificare altre opzioni per l'attività.

Quando l'impostazione Abilita la convalida dei parametri degli argomenti delle attività della shell è abilitata, il parametro arguments viene esaminato per i caratteri che potrebbero non essere eseguiti correttamente dalla shell. I caratteri di esempio includono punti e virgola, virgolette e parentesi.

Analogamente all'opzione Limita variabili che possono essere impostate in fase di coda, è possibile configurare la convalida dei parametri degli argomenti delle attività della shell a livello di organizzazione a livello di organizzazione a livello di Impostazioni> Pipelines> Impostazioni o a livello di progetto a livello di progetto a livello di Impostazioni> Pipelines>Impostazioni.

Se abilitata, si verifica un problema di convalida rilevato, viene registrato un messaggio di errore simile al seguente: Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Per risolvere il problema, modificare gli argomenti eliminando caratteri speciali, come indicato nel messaggio di errore.

Quando l'opzione Abilita la convalida dei parametri degli argomenti delle attività della shell è abilitata, la convalida viene applicata al parametro arguments nelle attività seguenti.

  • PowerShell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

Passaggi successivi

Dopo aver protetto gli input, è anche necessario proteggere l'infrastruttura condivisa.