Protection des secrets dans Azure Pipelines

Cet article fournit les meilleures pratiques relatives à la protection des secrets dans Azure Pipelines. Un secret est un élément pour lequel vous voulez contrôler étroitement l’accès. Il peut s’agir de clés d’API, de mots de passe, de certificats ou de clés de chiffrement.

Azure Pipelines ne génère pas de valeurs de secret. Toutefois, vous devrez peut-être ajouter un secret à un pipeline pour stocker des données sensibles telles qu’une clé API. Pour plus d’informations sur la définition de variables secrètes, consultez l’article Définir des variables secrètes.

Ne pas utiliser de secrets si une autre méthode est disponible

La meilleure méthode pour protéger un secret est de ne pas en utiliser. Vérifiez si votre pipeline peut utiliser une autre méthode plutôt que d’utiliser un secret pour effectuer une tâche.

Utiliser des variables secrètes

Les valeurs sensibles ne doivent jamais être stockées en texte clair dans un fichier Azure Pipelines .yml.

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. Pour définir des variables secrètes, il est recommandé d’utiliser Azure Key Vault. Vous pouvez également définir des variables secrètes dans l’interface utilisateur ou dans un groupe de variables. L’utilisation d’une commande de journalisation pour définir une variable secrète n’est pas recommandée. Lorsque vous définissez un secret avec une commande de journalisation, toute personne ayant accès à votre pipeline peut également voir le secret.

Les variables secrètes sont chiffrées et peuvent être utilisées dans des pipelines sans exposer leur valeur. Bien que leurs valeurs ne soient pas exposées, n’effectuez jamais d’écho sortant de secrets et ne transmettez pas de secrets sur la ligne de commande. Au lieu de cela, nous vous suggérons de mapper vos secrets dans des variables d’environnement.

Quand vous créez un secret, suivez les indications relatives à l’attribution de noms aux variables et assurez-vous que le nom de votre secret ne divulgue pas d’informations sensibles.

Limiter l’accès aux variables secrètes

Pour limiter l’accès aux secrets dans Azure DevOps, vous pouvez :

  • Stocker vos secrets dans Azure Key Vault. Avec Azure Key Vault, vous pouvez ensuite utiliser le modèle de contrôle d’accès en fonction du rôle d’Azure pour limiter l’accès à un secret ou à un groupe de secrets.
  • Définir des variables secrètes dans l’interface utilisateur d’un pipeline. Les variables secrètes définies dans l’interface utilisateur des paramètres du pipeline s’étendent au pipeline dans lequel elles sont définies. Vous pouvez ainsi avoir des secrets qui ne sont visibles que par les utilisateurs ayant accès à ce pipeline.
  • Définir des secrets dans un groupe de variables. Les groupes de variables suivent le modèle de sécurité de la bibliothèque. Vous pouvez contrôler qui peut définir de nouveaux éléments dans une bibliothèque et qui peut utiliser un élément existant.

Ne pas écrire de secrets dans les journaux

Azure Pipelines tente de nettoyer les secrets des journaux dans la mesure du possible. Ce filtrage se fait du mieux possible, mais ne peut pas intercepter toutes les façons dont les secrets peuvent être divulgués. Évitez de renvoyer des secrets à la console, de les utiliser dans des paramètres de ligne de commande ou de les journaliser dans des fichiers. Par exemple, certaines commandes Azure CLI génèrent des informations de sortie que vous devez protéger. Si vous appelez Azure CLI à partir de votre pipeline, utilisez le format de sortie none et, si vous devez récupérer un secret à partir d’un appel Azure CLI, utilisez le format de sortie none et récupérez les informations de sécurité dans une variable secrète.

Ne pas utiliser de données structurées en tant que secrets

Les données structurées peuvent entraîner l’échec du retrait des secrets dans les journaux, car le retrait s’appuie en grande partie sur la recherche d’une correspondance exacte pour la valeur secrète spécifique. Par exemple, n’utilisez pas un objet blob JSON, XML ou YAML (ou similaire) pour encapsuler une valeur secrète, y compris les caractères de contrôle tels que le retour chariot (\r) et le saut de ligne (\n), car cela réduit considérablement la probabilité que les secrets soient correctement masqués. Au lieu de cela, créez des secrets individuels pour chaque valeur sensible.

Auditer la façon dont les secrets sont gérés

Auditez la manière dont les secrets sont utilisés pour vous assurer qu’ils sont gérés comme prévu. Pour ce faire, examinez le code source du référentiel hébergeant le pipeline et vérifiez les tâches utilisées dans le pipeline. Par exemple, vérifiez qu’ils ne sont pas envoyés à des hôtes involontaires ni imprimés explicitement dans la sortie du journal.

Consultez les journaux d’exécution de votre pipeline après avoir testé des entrées valides/non valides et vérifiez que les secrets sont correctement masqués (ou non affichés). Il n’est pas toujours évident de savoir comment une commande ou un outil que vous appelez émet des erreurs, et les secrets peuvent se retrouver ultérieurement dans les journaux d’erreurs. Azure Pipelines tente de nettoyer les secrets des journaux dans la mesure du possible. Ce filtrage se fait du mieux possible, mais ne peut pas intercepter toutes les façons dont les secrets peuvent être divulgués. Par conséquent, il est recommandé d’examiner manuellement les journaux du pipeline après avoir testé les entrées valides et non valides.

Auditer et alterner les secrets

Passez régulièrement en revue les secrets inscrits utilisés par vos pipelines pour confirmer qu’ils sont toujours requis et supprimez ceux qui ne sont plus nécessaires.

Alternez régulièrement les secrets pour réduire la fenêtre de temps pendant laquelle un secret compromis est valide.

Les types de secrets utilisés par les pipelines peuvent inclure :

Étapes suivantes