Comment utiliser de manière sécurisée des variables et des paramètres dans votre pipeline

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

Cet article décrit comment utiliser de manière sécurisée des variables et des paramètres pour collecter les entrées des utilisateurs de pipeline. Si vous voulez en savoir plus sur l’utilisation de variables et de paramètres, consultez :

Utilisez les variables secrètes avec précaution. Les méthodes recommandées pour définir des variables secrètes consistent à utiliser l’interface utilisateur, un groupe de variables et un groupe de variables issu d’Azure Key Vault. Pour en savoir plus, consultez Définir des variables secrètes.

Variables

Les variables peuvent être un moyen pratique de collecter les informations de l’utilisateur à l’avance. Vous pouvez également utiliser des variables pour passer des données entre étapes dans un pipeline.

Toutefois, utilisez les variables avec prudence. Les variables nouvellement créées, qu’elles soient définies en YAML ou écrites par un script, sont en lecture-écriture par défaut. Une étape en aval peut changer la valeur d’une variable de manière imprévue.

Par exemple, votre script lit :

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

Une étape précédente peut définir MyConfig sur Debug & deltree /y c:. Bien que cet exemple supprime uniquement le contenu de votre agent de build, vous pouvez imaginer que ce paramètre peut facilement devenir beaucoup plus dangereux.

Vous pouvez définir les variables en lecture seule. Les variables système comme Build.SourcesDirectory, les variables de sortie de tâche et les variables de file d’attente sont toujours en lecture seule. Les variables créées en YAML ou créées au moment de l’exécution par un script peuvent être définies en lecture seule. Quand un script ou une tâche crée une variable, ils peuvent passer l’indicateur isReadonly=true dans leur commande de journalisation pour que la variable soit en lecture seule.

Dans le code YAML, vous pouvez spécifier des variables en lecture seule avec une clé spécifique :

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

Variables de file d’attente

Quand vous définissez une variable dans l’éditeur d’interface utilisateur Pipelines, vous pouvez choisir de laisser les utilisateurs remplacer sa valeur pendant l’exécution du pipeline. Nous appelons ce type de variable une variable de file d’attente. Les variables de file d’attente sont toujours définies dans l’éditeur d’interface utilisateur Pipelines.

Capture d’écran de la définition d’une variable de file d’attente.

Les variables de file d’attente sont exposées à l’utilisateur final quand il exécute manuellement un pipeline, et il peut changer leurs valeurs. Capture d’écran de la mise à jour de la valeur d’une variable de file d’attente.

Les utilisateurs ont besoin de l’autorisation Modifier la configuration de build en file d’attente sur le pipeline pour spécifier des variables définies au moment de la mise en file d’attente.

Limiter les variables qui peuvent être définies au moment de la mise en file d’attente

L’interface utilisateur et l’API REST utilisées pour exécuter un pipeline permettent aux utilisateurs de définir de nouvelles variables au moment de la mise en file d’attente.

Capture d’écran de l’ajout d’une variable de file d’attente juste avant d’exécuter le pipeline.

Au début d’Azure Pipelines, cette fonctionnalité avait rencontré certains problèmes :

  • Elle a permis aux utilisateurs de définir de nouvelles variables qui ne sont pas explicitement définies par l’auteur du pipeline dans la définition.
  • Elle permettait aux utilisateurs de remplacer les variables système.

Pour corriger ces problèmes, nous avons défini un paramètre afin de limiter les variables qui peuvent être définies au moment de la mise en file d’attente. Une fois ce paramètre activé, seules les variables explicitement marquées comme « Définissable au moment de la mise en file d’attente » peuvent être définies. En d’autres termes, vous pouvez définir n’importe quelle variable au moment de la mise en file d’attente, sauf si ce paramètre est activé.

Le paramètre est conçu pour fonctionner au niveau de l’organisation et du projet.

  1. Au niveau de l’organisation. Quand le paramètre est activé, il indique que, pour tous les pipelines de tous les projets de l’organisation, seules les variables explicitement marquées comme « Définissables au moment de la mise en file d’attente » peuvent être définies. Quand le paramètre est désactivé, chaque projet peut choisir de restreindre ou non les variables définies au moment de la mise en file d’attente. Le paramètre est un bouton bascule sous Paramètres de l’organisation -> Pipelines -> Paramètres. Seuls les administrateurs de collection de projets peuvent l’activer ou le désactiver. Capture d’écran de la limitation des variables qui peuvent être définies au moment de la mise en file d’attente au niveau de l’organisation.
  2. Au niveau du projet. Quand le paramètre est activé, il indique que, pour tous les pipelines du projet, seules les variables explicitement marquées comme « Définissables au moment de la mise en file d’attente » peuvent être définies. Si le paramètre est activé au niveau de l’organisation, il est activé pour tous les projets et ne peut pas être désactivé. Le paramètre est un bouton bascule sous Paramètres du projet -> Pipelines -> Paramètres. Seuls les administrateurs de projet peuvent l’activer ou le désactiver. Capture d’écran de la limitation des variables qui peuvent être définies au moment de la mise en file d’attente au niveau du projet.

Voyons un exemple. Supposons que le paramètre est activé et que votre pipeline définit une variable nommée my_variable qui n’est pas définissable au moment de la mise en file d’attente. Capture d’écran de la définition d’une variable dans un pipeline classique.

Ensuite, supposons que vous voulez exécuter le pipeline. Le panneau Variables n’affiche aucune variable, et le bouton Ajouter une variable est manquant.

Capture d’écran du panneau de variables avec le paramètre activé.

L’utilisation des appels d’API REST Builds - Mettre en file d’attente et Exécutions - Exécuter le pipeline pour mettre en file d’attente une exécution de pipeline et définir la valeur de my_variable ou d’une nouvelle variable échoue avec une erreur similaire à ce qui suit.

{
  "$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
}

Paramètres

Contrairement aux variables, les paramètres de pipeline ne peuvent pas être changés par un pipeline pendant son exécution. Les paramètres ont des types de données comme number et string, et ils peuvent être limités à un sous-ensemble de valeurs. La restriction des paramètres est utile lorsqu’une partie configurable par l’utilisateur du pipeline doit prendre une valeur uniquement à partir d’une liste contrainte. Le programme d’installation garantit que le pipeline ne prend pas de données arbitraires.

Activer la validation des paramètres relatives aux arguments des tâches shell

Les pipelines peuvent référencer des tâches exécutées dans le pipeline. Plusieurs tâches incluses dans Azure DevOps ont un paramètre d’arguments qui vous permet de spécifier d’autres options pour la tâche.

Lorsque le paramètre Activer la validation des arguments des tâches de shell est activé, le paramètre arguments est examiné pour tous les caractères qui peuvent ne pas être exécutés correctement par shell. Les exemples de caractères incluent des points-virgules, des guillemets et des parenthèses.

Tout comme l’option Limiter les variables pouvant être définies au moment de la file d’attente, l’option Activer la validation des paramètres des arguments des tâches du shell peut être configurée au niveau de l’organisation dans Paramètres>Pipelines>Paramètres ou au niveau du projet dans Paramètres>Pipelines>Paramètres.

Une fois l’option activée, un problème de validation est détecté et un message d’erreur semblabe au suivant est enregistré : Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Pour résoudre le problème, ajustez les arguments en évitant des caractères spéciaux, comme indiqué dans le message d’erreur.

Lorsque l’option Activer la validation des paramètres d’arguments des tâches du shell est activée, la validation est appliquée au paramètre d’arguments dans les tâches suivantes.

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

Étapes suivantes

Après avoir sécurisé vos entrées, vous devez également sécuriser votre infrastructure partagée.