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.

    Screenshot of Add variable group button highlighted with red box.

  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.

    Screenshot of saving a variable group.

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

Liez un coffre de clés Azure existant à un groupe de variables et mappez les secrets de coffre sélectifs au groupe de variables.

  1. Dans la page Groupes de variables, activez Lier les secrets d’un coffre de clés Azure Key Vault en tant que variables. Vous aurez besoin d’un coffre de clés existant contenant vos secrets. Créez un coffre de clés à l’aide du portail Azure.

    Screenshot of variable group with Azure key vault integration.

  2. Spécifiez le point de terminaison de votre abonnement Azure et le nom du coffre contenant vos secrets.

    Vérifiez que la connexion au service Azure dispose au moins des autorisations de gestion Obtenir et Lister sur le coffre pour les secrets. Activez Azure Pipelines pour définir ces autorisations en choisissant Autoriser en regard du nom du coffre. Ou définissez les autorisations manuellement dans le portail Azure :

    1. Ouvrez Paramètres pour le coffre, puis choisissez Stratégies d’accès>Ajouter nouveau.
    2. Sélectionnez Sélectionner le principal, puis choisissez le principal de service de votre compte client.
    3. Sélectionnez Autorisations du secret et vérifiez que les options Obtenir et Lister sont cochées.
    4. Sélectionnez OK pour enregistrer les modifications.
  3. Dans la page Groupes de variables, sélectionnez + Ajouter pour sélectionner des secrets spécifiques dans votre coffre à mapper à ce groupe de variables.

Gérer les secrets du coffre de clés

Consultez la liste suivante de conseils utiles pour gérer les secrets.

  • Seuls les noms de secrets sont mappés au groupe de variables, pas leurs valeurs. La valeur de secret la plus récente, extraite du coffre, est utilisée dans l’exécution du pipeline liée au groupe de variables.

  • Toute modification apportée aux secrets existants dans le coffre de clés est automatiquement disponible pour tous les pipelines utilisés par le groupe de variables.

  • Lorsque de nouveaux secrets sont ajoutés ou supprimés dans le coffre, les groupes de variables associés ne sont pas automatiquement mis à jour. Les secrets inclus dans le groupe de variables doivent être mis à jour explicitement afin que les pipelines qui utilisent le groupe de variables soient exécutés correctement.

  • Azure Key Vault prend en charge le stockage et la gestion des clés de chiffrement et des secrets dans Azure. Actuellement, l’intégration des groupes de variables Azure Pipelines prend en charge le mappage des secrets issus du coffre de clés Azure uniquement. Les clés de chiffrement et les certificats ne sont pas pris en charge.

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.

    Add the Azure Key Vault task.

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.

Screenshot of bash variable output.

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