Partager via


Définir des variables secrètes

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Les variables secrètes sont des variables chiffrées que vous pouvez utiliser dans des pipelines sans exposer leur valeur. Les variables secrètes peuvent être utilisées pour des informations privées comme des mots de passe, des ID et d’autres données d’identification que vous ne souhaitez pas exposer dans un pipeline. Les variables secrètes sont chiffrées au repos avec une clé RSA de 2 048 bits et elles sont disponibles sur l’agent pour que des tâches et des scripts puissent les utiliser.

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. Vous pouvez également définir des variables secrètes dans un script avec une commande de journalisation, mais ce n’est pas recommandé, car toute personne qui peut accéder à votre pipeline peut également voir le secret.

Les variables secrètes définies dans l’interface utilisateur des paramètres d’un pipeline sont limitées au pipeline où elles sont définies. Vous pouvez utiliser des groupes de variables pour partager des variables secrètes entre des pipelines.

Variable secrète dans l’interface utilisateur

Vous pouvez définir des variables secrètes dans l’éditeur de pipeline lorsque vous modifiez un pipeline individuel. Vous allez chiffrer et créer un secret de variable de pipeline en sélectionnant l’icône en forme de verrou.

Vous définissez les variables secrètes de la même façon pour un pipeline YAML et classique.

Pour définir des secrets dans l’interface web, effectuez ces étapes :

  1. Accédez à la page Pipelines, sélectionnez le pipeline approprié, puis sélectionnez Modifier.
  2. Recherchez les variables définies pour ce pipeline.
  3. Ajoutez ou mettez à jour la variable.
  4. Sélectionnez l’option permettant de conserver ce secret de valeur pour stocker la variable de manière chiffrée.
  5. Enregistrez le pipeline.

Les variables secrètes sont chiffrées au repos avec une clé RSA de 2 048 bits. Les secrets sont disponibles sur l’agent pour être utilisés par les tâches et les scripts. Faites attention aux personnes autorisées à modifier votre pipeline.

Important

Nous nous efforçons de masquer l’affichage des secrets dans la sortie d’Azure Pipelines, mais vous devez tout de même prendre des précautions. N’émettez jamais de secrets comme sortie. Certains systèmes d’exploitation journalisent les arguments de ligne de commande. Ne passez jamais de secrets en ligne de commande. Au lieu de cela, nous vous suggérons de mapper vos secrets dans des variables d’environnement.

Nous ne masquons jamais les sous-chaînes de secrets. Si, par exemple, « abc123 » est défini en tant que secret, « abc » n’est pas masqué dans les journaux. Cela permet d’éviter de masquer les secrets à un niveau trop granulaire, ce qui rendrait les journaux illisibles. Pour cette raison, les secrets ne doivent pas contenir de données structurées. Si, par exemple, « { "foo" : "bar" } » est défini comme secret, « bar » n’est pas masqué dans les journaux.

Contrairement à une variable normale, elles ne sont pas automatiquement déchiffrées en variables d’environnement pour les scripts. Vous devez mapper explicitement les variables secrètes.

Utiliser une variable secrète dans l’interface utilisateur

Vous devez mapper les variables secrètes en tant que variables d’environnement pour les référencer dans des pipelines YAML. Dans cet exemple, deux variables secrètes sont définies dans l’interface utilisateur, SecretOne et SecretTwo. La valeur de SecretOne est foo et la valeur de SecretTwo est bar.

steps:
- powershell: |
      Write-Host "My first secret variable is $env:FOO_ONE"
      $env:FOO_ONE -eq "foo"
  env:
    FOO_ONE: $(SecretOne)
- bash: |
    echo "My second secret variable: $FOO_TWO"
    if [ "$FOO_TWO" = "bar" ]; then
        echo "Strings are equal."
    else
        echo "Strings are not equal."
    fi
  env:
    FOO_TWO: $(SecretTwo) 

Le pipeline génère :

My first secret variable is ***
True
My second secret variable: ***
Strings are equal.

Remarque

Azure Pipelines fait un effort pour masquer des secrets lors de l’émission de données dans des journaux de pipeline. Vous pouvez donc voir des variables supplémentaires et des données masquées dans des sorties et des journaux qui ne sont pas définis en tant que secrets.

Pour obtenir un exemple plus détaillé, consultez Définir des variables.

Définir une variable secrète dans un groupe de variables

Vous pouvez ajouter des secrets à un groupe de variables ou lier des secrets à partir d’un coffre de clés Azure existant.

Créer des groupes de variables

  1. Sélectionnez Pipelines>Bibliothèque>+ Groupe de variables.

    Capture d’écran du bouton Ajouter un groupe de variables encadré en rouge.

  2. Entrez un nom et une description pour le groupe.

  3. Facultatif : Activez le bouton bascule pour lier des secrets à partir d’un coffre de clés Azure en tant que variables. Pour plus d’informations, consultez Utiliser des secrets Azure Key Vault.

  4. Entrez le nom et la valeur de chaque variable à inclure dans le groupe, en choisissant + Ajouter pour chacune d’elles.

  5. Pour sécuriser votre variable, choisissez l’icône en forme de « verrou » à la fin de la ligne.

  6. Lorsque vous avez terminé d’ajouter des variables, sélectionnez Enregistrer.

    Capture d’écran de l’enregistrement d’un groupe de variables.

Les groupes de variables suivent le modèle de sécurité de la bibliothèque.

Vous pouvez créer un groupe de variables lié à un coffre-fort de clés Azure existant et mapper les secrets Key Vault sélectionnés vers le groupe de variables. Seuls les noms des secrets sont mappés vers le groupe de variables, pas les valeurs des secrets. Les exécutions du pipeline qui sont liées au groupe variable récupèrent les dernières valeurs secrètes dans le coffre-fort.

Toute modification apportée aux secrets existants dans le coffre-fort est automatiquement mise à la disposition de tous les pipelines qui utilisent le groupe de variables. Cependant, si des secrets sont ajoutés ou supprimés du coffre-fort, les groupes de variables associés ne sont pas automatiquement mis à jour. Vous devez explicitement mettre à jour les secrets à inclure dans le groupe de variables.

Bien que Key Vault prenne en charge le stockage et la gestion des clés cryptographiques et des certifications dans Azure, l'intégration des groupes de variables Azure Pipelines ne prend en charge que le mappage des secrets de coffre-fort de clés. Les clés de chiffrement et les certificats ne sont pas pris en charge.

Remarque

Les coffres-forts de clés qui utilisent le contrôle d'accès basé sur les rôles d'Azure (Azure RBAC) ne sont pas pris en charge.

Prérequis

Créer le groupe de variables

  1. Dans votre projet Azure DevOps, sélectionnez Pipelines>Bibliothèque>+ Groupe de variables.
  2. Sur la page Groupes de variables, entrez un nom et une description facultative pour le groupe de variables.
  3. Activez la bascule Lier les secrets d'un coffre-fort de clés Azure en tant que variables.
  4. Sélectionnez votre point de terminaison d'abonnement Azure et le nom de votre coffre-fort de clés.
  5. Autorisez Azure DevOps à accéder au coffre-fort de clés en sélectionnant Autoriser en regard du nom du coffre-fort.
  6. Sur l'écran Choisir des secrets, sélectionnez des secrets spécifiques de votre coffre-fort pour le mappage à ce groupe de variables, puis sélectionnez OK.
  7. Sélectionnez Enregistrer pour enregistrer le groupe de variables secrètes.

Capture d’écran d’un groupe de variables avec l’intégration à un coffre de clés Azure.

Remarque

Votre connexion au service Azure doit disposer au moins des permissions Obtenir et Lister sur le coffre-fort de clés, que vous pouvez autoriser dans les étapes précédentes. Vous pouvez également fournir ces permissions à partir du portail Azure en suivant les étapes suivantes :

  1. Ouvrez Paramètres pour le coffre-fort de clés, puis sélectionnez Configuration de l'accès>Voir les stratégies d'accès.
  2. Sur la page des stratégies d'accès, si votre projet Azure Pipelines n'est pas répertorié sous Applications avec au moins les permissions Obtenir et Lister, sélectionnez Créer.
  3. Sous Permissions secrètes, sélectionnez Obtenir et Lister, puis sélectionnez Suivant.
  4. Sélectionnez votre principal de service, puis sélectionnez Suivant.
  5. Sélectionnez à nouveau Suivant, vérifiez les paramètres, puis sélectionnez Créer.

Utiliser la tâche Azure Key Vault

Vous pouvez utiliser la tâche Azure Key Vault pour inclure des secrets dans votre pipeline. Cette tâche permet au pipeline de se connecter à votre coffre de clés Azure et de récupérer des secrets à utiliser en tant que variables de pipeline.

  1. Dans l’éditeur de pipeline, sélectionnez Afficher l’Assistant pour développer le panneau Assistant.

  2. Recherchez vault et sélectionnez la tâche Azure Key Vault.

    Utilisez la tâche Azure Key Vault.

L’option Rendre les secrets accessibles à l’ensemble du travail n’est actuellement pas prise en charge dans Azure DevOps Server 2019 et 2020.

Pour plus d’informations sur la tâche Azure Key Vault, consultez Utiliser des secrets Azure Key Vault dans Azure Pipelines.

Définir une variable secrète dans un script avec des commandes de journalisation

Vous pouvez utiliser la commande de journalisation task.setvariable pour définir des variables dans des scripts PowerShell et Bash. Il s’agit du moyen le moins sécurisé d’utiliser des variables secrètes, mais celui-ci peut s’avérer utile à des fins de débogage. 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 définir une variable en tant que script avec une commande de journalisation, vous avez besoin de passer l’indicateur issecret.

Lorsque la valeur de issecret est définie sur true, la valeur de la variable est enregistrée comme secret et masquée dans des journaux.

Remarque

Azure Pipelines fait un effort pour masquer des secrets lors de l’émission de données dans des journaux de pipeline. Vous pouvez donc voir des variables supplémentaires et des données masquées dans des sorties et des journaux qui ne sont pas définis en tant que secrets.

Définissez la variable secrète mySecretVal.

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"

Obtenez la variable secrète mySecretVal.

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
    echo $(mySecretVal)

Sortie de variable secrète dans Bash.

Capture d’écran de la sortie de la variable Bash.

Découvrez-en plus sur la définition et l’utilisation de variables dans des scripts.