Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Dans Azure Pipelines, vous pouvez autoriser les utilisateurs à personnaliser l’exécution du pipeline en collectant leur entrée avec des variables et des paramètres. Toutefois, l’acceptation des entrées utilisateur peut également introduire des risques de sécurité s’il n’est pas géré correctement. Dans cet article, vous allez apprendre à utiliser en toute sécurité des variables et des paramètres dans votre pipeline.
Cet article fait partie d’une série qui vous aide à implémenter des mesures de sécurité pour Azure Pipelines. Pour plus d’informations, consultez Sécuriser Azure Pipelines.
Conditions préalables
| Catégorie | Exigences |
|---|---|
| Azure DevOps | - Implémentez des recommandations dans Rendre vos pipelines Azure DevOps sécurisés et sécurisés. - Connaissance de base de YAML et d’Azure Pipelines. Pour plus d’informations, consultez Créer votre premier pipeline. |
| Autorisations | - Pour modifier les autorisations des pipelines : membre du groupe Administrateurs de projet. - Pour modifier les autorisations de l'Organisation : Membre du groupe Project Collection Administrators. |
Variables
Les variables sont un moyen pratique de collecter les entrées utilisateur à l’avance et de faciliter le transfert de données entre les étapes du pipeline. Toutefois, les variables définies dans les tâches ou les scripts YAML sont en lecture-écriture par défaut. Les valeurs définies en amont peuvent modifier de manière inattendue les valeurs en aval.
Par exemple, l’extrait de code de script suivant appelle une variable appelée MyConfig.
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Si une étape précédente définit la valeur de la variable MyConfig à Debug & deltree /y c:, l’exécution de ce script supprime le contenu de l’agent de build et peut entraîner des conséquences inattendues. Cet exemple met en évidence le danger potentiel de ces paramètres.
Les variables système comme Build.SourcesDirectory et les variables de sortie de tâche sont toujours en lecture seule. Vous pouvez également désigner une variable créée dans un script ou une tâche YAML en lecture seule en passant l’indicateur isReadonly=true dans sa commande de journalisation.
Dans une définition de variable YAML, vous pouvez spécifier une variable en lecture seule à l’aide de la clé spécifique readonly :
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Utilisez une prudence particulière avec les variables secrètes. Les méthodes recommandées pour définir des variables secrètes incluent l’utilisation de l’interface utilisateur, la création d’un groupe de variables ou l’utilisation d’un groupe de variables source d’Azure Key Vault. Pour plus d’informations, consultez Définir des variables secrètes.
Variables de file d’attente
Lorsque vous définissez une variable dans l’interface utilisateur Azure Pipelines, vous pouvez sélectionner s’il faut autoriser les utilisateurs à remplacer la valeur pendant l’exécution du pipeline. Les variables qui permettent aux utilisateurs de définir leur valeur au moment de la file d’attente sont appelées variables de temps d’attente et peuvent être définies uniquement dans l’interface utilisateur des variables Azure Pipelines.
Dans l’éditeur de pipeline classique, vous définissez la variable définie à l’exécution en cochant la case pour Définissable au moment de la mise en file d’attente. Dans les pipelines YAML, vous les désignez en sélectionnant Autoriser les utilisateurs à remplacer cette valeur lors de l’exécution de ce pipeline.
Note
Dans un pipeline release, sélectionnez Settable au moment de la mise en production. Pour plus d’informations, consultez Comment puis-je modifier des variables au moment de la publication ?
Lorsqu’un utilisateur exécute manuellement le pipeline, il peut sélectionner des variables de temps d’attente et modifier les valeurs.
Les utilisateurs doivent disposer de l’autorisation modifier la configuration de build de file d’attente sur un pipeline pour pouvoir définir des variables définies au moment de la file d’attente.
Limiter les variables qui peuvent être définies au moment de la mise en file d’attente
L’interface utilisateur Azure Pipelines et l’API REST qui exécutent un pipeline permettent aux utilisateurs d’ajouter de nouvelles variables au moment de la file d’attente. Cette possibilité permet aux utilisateurs de créer des variables que l’auteur du pipeline n’a pas définies, de remplacer les variables système et de définir des valeurs pour les variables existantes au moment de la file d’attente.
Pour éviter les problèmes causés par ces capacités, vous pouvez limiter les variables qui peuvent être définies au moment de la file d’attente. Vous pouvez activer les variables de limite qui peuvent être définies au moment de la file d’attente afin que les utilisateurs puissent définir uniquement des variables qui sont explicitement marquées comme settables au moment de la file d’attente ou permettre aux utilisateurs de remplacer cette valeur lors de l’exécution de ce pipeline au moment de la file d’attente.
Ce paramètre peut être appliqué aux niveaux de l’organisation et du projet.
Les administrateurs de collection de projets peuvent appliquer ce paramètre au niveau de l’organisation dans les paramètres de l’organisation>Pipelines>Paramètres. Lorsque le paramètre est Activé, seules les variables qui sont explicitement marquées comme settables au moment de la file d’attente peuvent être définies au moment de la file d’attente pour tous les pipelines de tous les projets de l’organisation.
Les administrateurs de projet peuvent appliquer ce paramètre au niveau du projet dansparamètres> projet>. Lorsque le paramètre est Activé, seules les variables qui sont explicitement marquées comme settable au moment de la file d’attente peuvent être définies au moment de la file d’attente pour tous les pipelines de ce projet. Si le paramètre n’est pas activé au niveau de l’organisation, il peut être activé ou désactivé pour des projets individuels.
Si le paramètre au niveau de l’organisation est activé, il s’applique à tous les projets de l’organisation et ne peut pas être désactivé au niveau du projet.
L’exemple suivant montre les variables d’un pipeline Classique, avec certaines d’entre elles marquées Réglable au moment de la mise en file d’attente. La BuildPlatform variable peut être définie au moment de la file d’attente, mais elle BuildConfiguration ne peut pas.
Lorsque vous exécutez ce pipeline, seules les variables marquées Settable au moment de la file d’attente sont visibles sur l’écran Variables à sélectionner.
Si limiter les variables qui peuvent être définies au moment de la file d’attente est activée au niveau du projet ou de l’organisation, le bouton Ajouter une variable n’apparaît pas.
L’utilisation des APIs Builds - File d’attente ou Runs - Exécuter le pipeline pour mettre en file d’attente une exécution de pipeline et tenter de définir la valeur d'une variable qui n'est pas marquée comme modifiable au moment de la mise en file d'attente échoue avec une erreur semblable à ce qui suit :
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (BuildConfiguration). 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
Un pipeline en cours d’exécution ne peut pas modifier les paramètres de pipeline, contrairement aux variables. Les paramètres ont des types de données tels que number et stringpeuvent être limités à des sous-ensembles de valeurs spécifiques. Cette restriction est utile lorsqu’un aspect configurable par l’utilisateur du pipeline ne doit accepter que les valeurs d’une liste prédéfinie, ce qui garantit que le pipeline n’accepte pas de données arbitraires.
Activer la validation des arguments des tâches shell
Les pipelines peuvent référencer des tâches exécutées dans le pipeline. Certaines tâches incluent un arguments paramètre qui permet aux utilisateurs de spécifier davantage d’options pour la tâche.
L'application du paramètre Permettre la validation des arguments des tâches shell valide les paramètres des tâches d’interpréteur de commandes intégrées argument afin de vérifier les entrées susceptibles d’injecter des commandes dans les scripts. La vérification garantit que le shell exécute correctement les caractères comme les points-virgules, les guillemets, et les parenthèses dans les tâches de pipeline suivantes :
- PowerShell
- BatchScript
- Cogner
- Ssh
- AzureFileCopy
- WindowsMachineFileCopy
Vous pouvez appliquer Activer la validation des arguments des tâches shell au niveau de l’organisation sous Paramètres de l'organisation>Pipelines>Paramètres, ou au niveau du projet sous Paramètres du projet>Pipelines>Paramètres. Si le paramètre au niveau de l’organisation est activé, il s’applique à tous les projets de l’organisation et ne peut pas être désactivé au niveau du projet.
Lorsque ce paramètre est activé, tout problème de validation lié à un arguments paramètre déclenche le message d’erreur suivant :
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 l’argument en échappant des caractères spéciaux, comme indiqué dans le message d’erreur.