Utiliser des secrets d’Azure Key Vault dans Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Azure Key Vault permet aux développeurs de stocker et de gérer en toute sécurité des informations sensibles telles que des clés API, des informations d’identification ou des certificats. Le service Azure Key Vault prend en charge deux types de conteneurs : les coffres et les pools HSM (modules de sécurité matériels) managés. Les coffres peuvent stocker à la fois des clés logicielles et sauvegardées avec HSM, des secrets et des certificats, tandis que les pools HSM managés prennent exclusivement en charge les clés sauvegardées avec HSM.
Dans ce didacticiel, vous apprendrez à :
- Créer un coffre Azure Key Vault avec Azure CLI
- Ajouter un secret et configurer l’accès au coffre de clés Azure
- Utiliser des secrets dans votre pipeline
Prérequis
Un organization Azure DevOps et un projet. Créez un organization ou un projet si ce n’est pas déjà fait.
Un abonnement Azure. Créez un compte Azure gratuitement si vous n’en avez pas déjà un.
Créer un référentiel
Si vous disposez déjà de votre propre dépôt, passez à l’étape suivante. Sinon, suivez les instructions ci-dessous pour initialiser votre dépôt. Nous allons utiliser ce dépôt Azure pour configurer notre pipeline.
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Dépôts, puis Initialiser pour initialiser la branche primaire avec un fichier README.
Créer un Azure Key Vault
Connectez-vous au portail Azure, puis sélectionnez le bouton Cloud Shell dans le coin supérieur droit.
Si vous avez plusieurs abonnements Azure associés à votre compte, utilisez la commande ci-dessous pour spécifier un abonnement par défaut. Vous pouvez utiliser
az account list
pour générer une liste de vos abonnements.az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
Définissez votre région Azure par défaut. Vous pouvez utiliser
az account list-locations
pour générer une liste de régions disponibles.az config set defaults.location=<YOUR_REGION>
Créez un groupe de ressources.
az group create --name <YOUR_RESOURCE_GROUP_NAME>
Créez un Azure Key Vault.
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
Créez un secret dans votre coffre de clés Azure.
az keyvault secret set \ --name <YOUR_SECRET_NAME> \ --value <YOUR_ACTUAL_SECRET> \ --vault-name <YOUR_KEY_VAULT_NAME>
Définir des stratégies d’accès Key Vault
Pour accéder à notre coffre de clés Azure, il faut configurer un principal de service pour accorder l’accès à Azure Pipelines. Suivez les instructions de ce guide pour créer un principal de service avec l'interface de ligne de commande Azure, puis passez aux étapes suivantes de cette section.
Accédez au portail Azure, puis utilisez la barre de recherche pour rechercher le coffre de clés que vous avez créé précédemment.
Sélectionnez Stratégies d’accès, puis Créer pour créer une nouvelle stratégie.
Sous Autorisations du secret, sélectionnez Get (Obtenir) et List (Lister).
Sélectionnez Suivant, puis le principal du service que vous avez créé précédemment. Un principal de service est un objet qui représente une application ou un service demandant l’accès aux ressources Azure.
Sélectionnez Suivant, puis Suivant à nouveau.
Vérifiez vos stratégies, puis sélectionnez Créer quand vous avez terminé.
Ajouter une attribution de rôle
À l’étape suivante, nous allons créer une connexion de service ARM à l’aide du principal de service. Avant de pouvoir vérifier la connexion, il faut accorder l’accès en lecture au principal de service au niveau de l’abonnement :
Accédez au portail Azure
Sélectionnez Abonnements dans le volet de navigation gauche, puis recherchez et sélectionnez votre abonnement.
Sélectionnez Contrôle d’accès, puis Ajouter>Ajouter une attribution de rôle.
Sélectionnez Lecteur dans l'onglet Rôle, puis Suivant.
Sélectionnez Utilisateur, groupe ou principal de service, puis Sélectionner les membres.
Utilisez la barre de recherche pour rechercher votre principal de service, puis sélectionnez le signe « + » pour le sélectionner. Ensuite, cliquez sur le bouton Sélectionner.
Sélectionnez Vérifier + attribuer, revoyez vos paramètres, puis sélectionner Vérifier+ attribuer à nouveau pour confirmer vos choix et ajouter l’attribution de rôle.
Créer une connexion de service
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Paramètres du projet>Connexions de service, puis Nouvelle connexion de service pour créer une nouvelle connexion de service.
Sélectionnez Azure Resource Manager, puis sélectionnez Suivant.
Sélectionnez Principal du service (manuel), puis sélectionnez Suivant.
Sélectionnez Azure Cloud pour Environnement et Abonnement pour le Niveau de portée, puis saisissez votre ID d’abonnement et votre Nom d’abonnement.
Renseignez les champs suivants avec les informations que vous avez obtenues lors de la création du principal de service, puis sélectionnez Vérifier lorsque vous avez terminé :
- ID principal du service : Votre principal de service appId.
- Clé principale du service : Votre principal de service mot de passe.
- ID du locataire : Votre principal de service locataire.
Une fois la vérification réalisée avec succès, fournissez un nom et une description (facultatif) pour votre connexion de service, puis cochez la case Accorder une autorisation d’accès à tous les pipelines.
Sélectionnez Vérifier et enregistrez lorsque vous avez terminé.
Connectez-vous à votre collection Azure DevOps puis accédez à votre projet.
Sélectionnez Paramètres du projet>Connexions de service>Nouvelle connexion de service, puis sélectionner Azure Resource Manager pour créer une nouvelle connexion de service ARM.
Attribuez un nom à votre connexion de service, puis sélectionnez Azure Cloud pour Environnement et Abonnement pour le Niveau de portée.
Saisissez votre ID d’abonnement et votre Nom d’abonnement.
Renseignez les champs suivants avec les informations que vous avez obtenues lors de la création du principal de service, puis sélectionnez Vérifier la connexion lorsque vous avez terminé :
- ID client du principal de service : votre appId du principal de service.
- Clé principale du service : Votre principal de service mot de passe.
- ID du locataire : Votre principal de service locataire.
Cochez la case Autoriser tous les pipelines à utiliser cette connexion , puis sélectionnez Ok lorsque vous avez terminé.
Créer un pipeline
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines, puis Nouveau pipeline.
Sélectionnez Utiliser l’éditeur classique pour créer un pipeline classique.
Sélectionnez Azure Repos Git, puis votre dépôt et votre branche par défaut, puis Continuer.
Sélectionnez le modèle de pipeline .Net Desktop.
Pour cet exemple, nous n’aurons besoin que des deux dernières tâches. Appuyez sur Ctrl, puis sélectionnez les cinq premières tâches, cliquez avec le bouton droit et choisissez Supprimer les tâches sélectionnées pour les supprimer.
Sélectionnez + pour ajouter une nouvelle tâche. Recherchez la tâche de ligne de commande, sélectionnez-la, puis sélectionnez Ajouter pour l’ajouter à votre pipeline. Une fois ajoutée, configurez-la comme suit :
- Nom d'affichage : créer un fichier
- Script :
echo $(YOUR_SECRET_NAME) > secret.txt
Sélectionnez + pour ajouter une nouvelle tâche. Recherchez la tâche de Azure Key Vault, sélectionnez-la, puis sélectionnez Ajouter* pour l’ajouter à votre pipeline. Une fois ajoutée, configurez-la comme suit :
- Nom d'affichage : Azure Key Vault
- Abonnement Azure : sélectionnez votre connexion de service du principal de service que vous avez créée précédemment
- Coffre de clés : sélectionnez votre coffre de clés
- Filtrer les secrets : liste de noms de secrets séparés par des virgules ou laissez * pour télécharger tous les secrets du coffre de clés sélectionné
Sélectionnez la tâche Copier les fichiers et renseignez les champs obligatoires comme suit :
- Nom d’affichage : copier le fichier
- Contenu : secret.txt
- Dossier cible : $(build.artifactstagingdirectory)
Sélectionnez la tâche Publier des artefacts et renseignez les champs obligatoires comme suit :
- Nom d'affichage : publier l’artefact
- Chemin d’accès à la publication : $(build.artifactstagingdirectory)
- Nom de l'artefact : dépôt
- Emplacement de publication des artefacts : Azure Pipelines
Sélectionnez Enregistrer et mettre en file d’attente, puis Exécuter pour exécuter votre pipeline.
Une fois l’exécution du pipeline terminée, revenez au récapitulatif du pipeline et sélectionnez l’artefact publié.
Sélectionnez déposer>secret.txt pour télécharger l’artefact publié.
Ouvrez le fichier texte que vous venez de télécharger, lequel doit contenir le secret de votre coffre de clés Azure.
Connectez-vous à votre collection Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines, puis Builds.
Sélectionnez Nouveau>Nouveau pipeline de build.
Sélectionnez Utiliser l’éditeur classique pour créer nouveau pipeline de build classique.
Sélectionnez Azure Repos Git, puis votre dépôt et votre branche par défaut, puis Continuer.
Sélectionnez le modèle de pipeline .Net Desktop, puis Appliquer.
Pour cet exemple, nous n’aurons besoin que des deux dernières tâches. Appuyez sur Ctrl, puis sélectionnez les cinq premières tâches, cliquez avec le bouton droit et choisissez Supprimer les tâches sélectionnées pour les supprimer.
Sélectionnez + pour ajouter une nouvelle tâche. Recherchez la tâche de ligne de commande, sélectionnez-la, puis sélectionnez Ajouter pour l’ajouter à votre pipeline. Une fois ajoutée, configurez-la comme suit :
- Nom d'affichage : créer un fichier
- Script :
echo $(YOUR_SECRET_NAME) > secret.txt
Sélectionnez + pour ajouter une nouvelle tâche. Recherchez la tâche de Azure Key Vault, sélectionnez-la, puis sélectionnez Ajouter* pour l’ajouter à votre pipeline. Une fois ajoutée, configurez-la comme suit :
- Nom d'affichage : Azure Key Vault
- Abonnement Azure : sélectionnez votre connexion de service du principal de service que vous avez créée précédemment
- Coffre de clés : sélectionnez votre coffre de clés
- Filtrer les secrets : liste de noms de secrets séparés par des virgules ou laissez * pour télécharger tous les secrets du coffre de clés sélectionné
Sélectionnez la tâche Copier les fichiers et renseignez les champs obligatoires comme suit :
- Nom d’affichage : copier le fichier
- Contenu : secret.txt
- Dossier cible : $(build.artifactstagingdirectory)
Sélectionnez la tâche Publier des artefacts et renseignez les champs obligatoires comme suit :
- Nom d'affichage : publier l’artefact
- Chemin d’accès à la publication : $(build.artifactstagingdirectory)
- Nom de l'artefact : dépôt
- Emplacement de publication des artefacts : Azure Pipelines
Sélectionnez Enregistrer & mettre en file d'attente, puis Enregistrer & mettre en file d'attente pour exécuter votre pipeline de build.
Une fois l’exécution du pipeline terminée, sélectionnez Artefacts, puis déposer.
Dans la fenêtre qui apparaît, sélectionnez déposer>secret.txt, sélectionnez l’icône points de suspension (...), puis sélectionner télécharger pour enregistrer le fichier texte.
Ouvrez le fichier texte que vous venez de télécharger, il doit contenir le secret de votre coffre de clés Azure.
Avertissement
Ce didacticiel est destiné uniquement à des fins éducatives. Pour connaître les meilleures pratiques de sécurité et la façon de travailler en toute sécurité avec des secrets, consultez Gérer les secrets dans vos applications serveur avec Azure Key Vault.
Nettoyer les ressources
Suivez les étapes ci-dessous pour supprimer les ressources que vous avez créées :
Si vous avez créé une organisation pour héberger votre projet, consultez Comment supprimer votre organisation, sinon supprimer votre projet.
Toutes les ressources Azure créées au cours de ce didacticiel sont hébergées dans un seul groupe de ressources. Exécutez la commande suivante pour supprimer votre groupe de ressources et toutes ses ressources.
az group delete --name <YOUR_RESOURCE_GROUP_NAME>
Forum aux questions
Q : Je reçois l’erreur suivante : « L’utilisateur ou le groupe n’a pas l’autorisation de liste de secrets. ». Que dois-je faire ?
R : Si vous rencontrez une erreur indiquant que l’utilisateur ou le groupe n’a pas l’autorisation de liste des secrets sur un coffre de clés, exécutez les commandes suivantes pour autoriser votre application à accéder à la clé ou au secret dans Azure Key Vault :
$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;