Utiliser des secrets d’Azure Key Vault dans Azure Pipelines

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

Azure Key Vault est un service cloud qui permet aux développeurs de stocker et de gérer en toute sécurité des informations sensibles telles que les clés API, les informations d’identification et les certificats. 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 des clés prises en charge par logiciels et HSM, ainsi que des secrets et des certificats. Les pools HSM managés prennent exclusivement en charge les clés sauvegardées par HSM.

Dans cet article, vous allez apprendre à créer un coffre de clés, à ajouter un secret, à configurer des stratégies d’accès, puis à utiliser ce secret dans Azure Pipelines. Ce tutoriel utilise un coffre de clés avec un accès réseau public. Si vous devez accéder à un coffre de clés privé à partir de votre pipeline, consultez Accéder à un coffre de clés privé à partir de votre pipeline. Pour lier les secrets de Key Vault aux groupes de variables, voir Lier un groupe de variables aux secrets dans Azure Key Vault.

Prérequis

Catégorie Spécifications
Azure DevOps - Organisation Azure DevOps.
- Un projet Azure DevOps .
Azur Un abonnement Azure.

Obtenir le code

Si vous n'avez pas votre propre projet, importez l'exemple de référentiel suivant dans votre dépôt Azure :

  1. Connectez-vous à votre organisation Azure DevOps, puis accédez à votre projet.

  2. Sélectionnez Repos, puis sélectionnez Importer. Entrez l’URL de référentiel suivante, puis sélectionnez Importer.

    https://github.com/MicrosoftDocs/pipelines-dotnet-core
    

Création d’un coffre de clés

Pour créer un nouveau coffre-fort de clés dans Azure en utilisant l’Azure CLI, procédez comme suit :

  1. Accédez au portail Azure, puis sélectionnez Azure Cloud Shell dans le coin supérieur droit.

  2. Si votre compte est associé à plusieurs abonnements Azure, définissez votre abonnement par défaut.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Définissez une région Azure par défaut. Pour afficher la liste des régions disponibles, exécutez az account list-locations.

    az config set defaults.location=<YOUR_REGION>
    
  4. Créez un groupe de ressources.

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Créez un coffre de clés.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Ajoutez un secret à votre coffre-fort de clés.

    az keyvault secret set \
      --name <YOUR_SECRET_NAME> \
      --value <YOUR_ACTUAL_SECRET> \
      --vault-name <YOUR_KEY_VAULT_NAME>
    

Configurer l’authentification

Après avoir créé votre coffre de clés, l’étape suivante consiste à configurer l’authentification. Sélectionnez Identité managée ou principal de service, puis suivez les instructions pour configurer l’authentification.

Créer une identité managée attribuée par l’utilisateur

  1. Accédez au portail Azure, puis recherchez Identités managées dans la barre de recherche.

  2. Sélectionnez Créer et fournissez les informations suivantes :

    • Abonnement : sélectionnez votre abonnement Azure dans le menu déroulant.
    • Groupe de ressources : sélectionnez un groupe de ressources existant ou créez-en un.
    • Région : sélectionnez la région où l’identité managée est créée.
    • Nom : entrez un nom pour l’identité managée affectée par l’utilisateur.
  3. Sélectionnez Vérifier + créer, puis créer pour démarrer le déploiement.

  4. Une fois le déploiement terminé, sélectionnez Accéder à la ressource, puis copiez l’ID d’abonnement et les valeurs d’ID client . Vous avez besoin de ces valeurs dans les étapes ultérieures.

  5. Sous Paramètres, sélectionnez Propriétés et copiez la valeur d’ID de locataire de votre identité managée pour une utilisation ultérieure.

Configurer les stratégies d’accès du Key Vault

  1. Accédez au portail Azure et utilisez la barre de recherche pour localiser le coffre de clés que vous avez créé précédemment.

  2. Sélectionnez Stratégies d’accès, puis sélectionnez Créer pour ajouter une nouvelle stratégie.

  3. Sous Autorisations secrètes, cochez les cases Obtenir et Liste .

  4. Sélectionnez Suivant. Collez l’ID client de l’identité managée que vous avez créée précédemment dans la barre de recherche, puis sélectionnez l’identité managée.

  5. Cliquez sur Suivant, puis à nouveau sur Suivant.

  6. Passez en revue les détails de la stratégie d’accès, puis sélectionnez Créer pour appliquer la stratégie.

Créer une connexion de service

  1. Connectez-vous à Azure DevOps, puis accédez à votre projet.

  2. Sélectionnez Paramètres de projet>Connexions de service>Nouvelle connexion de service.

  3. Sélectionnez Azure Resource Manager, puis sélectionnez Suivant.

  4. Pour Le type d’identité, sélectionnez Identité managée.

  5. Sous l’étape 1 : Détails de l’identité managée, fournissez les informations suivantes :

    • Abonnement pour l’identité managée : sélectionnez l’abonnement qui contient votre identité managée.
    • Groupe de ressources pour l’identité managée : sélectionnez le groupe de ressources qui héberge votre identité managée.
    • Identité managée : sélectionnez votre identité managée dans la liste déroulante.
  6. Pour l’étape 2 : Étendue Azure, fournissez les informations suivantes :

    • Niveau d’étendue pour la connexion de service : sélectionnez Abonnement.
    • Abonnement pour la connexion de service : sélectionnez l’abonnement auquel l’identité managée accède.
    • Groupe de ressources pour la connexion de service : (facultatif) Spécifiez un groupe de ressources pour limiter l’accès de l’identité managée à un groupe de ressources.
  7. Pour l’étape 3 : Détails de la connexion de service, fournissez les informations suivantes :

    • Nom de la connexion de service : entrez un nom pour la connexion de service.
    • Référence de gestion des services : (facultatif) Incluez des informations de contexte à partir d’une base de données ITSM.
    • Description : (facultatif) Entrez une description.
  8. Sous Sécurité, l'option Accorder l'autorisation d'accès à tous les pipelines permet à tous les pipelines d'utiliser cette connexion de service. Nous vous déconseillons cette option. Au lieu de cela, autorisez chaque pipeline individuellement à utiliser la connexion de service.

  9. Sélectionnez Enregistrer pour valider et créer la connexion de service.

    Screenshot qui montre comment créer une connexion de service d’identité managée Azure Resource Manager.

Accédez aux secrets du coffre de clés depuis votre pipeline

Avertissement

Ce didacticiel est destiné uniquement à des fins éducatives. Pour obtenir des recommandations en matière de sécurité et des conseils sur l’utilisation sécurisée des secrets, consultez Gérer les secrets dans vos applications serveur avec Azure Key Vault.

  1. Connectez-vous à Azure DevOps, puis accédez à votre projet.

  2. Sélectionnez Pipelines>Nouveau pipeline.

  3. Sélectionnez Azure Repos Git (YAML), puis votre dépôt.

  4. Sélectionnez le modèle Pipeline de démarrage.

  5. Le pipeline par défaut inclut des exemples de commandes d’écho. Vous n’avez pas besoin de ces commandes. Vous pouvez donc les supprimer.

  6. Ajoutez la tâche Azure Key Vault à votre pipeline. Remplacez les espaces réservés par le nom de la connexion de service que vous avez créée précédemment et le nom de votre coffre de clés. Votre fichier YAML doit ressembler à l’exemple suivant :

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      displayName: Azure Key Vault
      inputs:
        azureSubscription: 'SERVICE_CONNECTION_NAME'
        KeyVaultName: 'KEY_VAULT_NAME'
        SecretsFilter: '*'
        RunAsPreJob: false
    
  7. Ajoutez les tâches suivantes pour copier et publier le secret. Cet exemple est uniquement à des fins de démonstration. Ne l’utilisez pas dans un environnement de production.

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      displayName: Azure Key Vault
      inputs:
        azureSubscription: 'SERVICE_CONNECTION_NAME'
        KeyVaultName: 'KEY_VAULT_NAME'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      displayName: Create file
      inputs:
        script: 'echo $(SECRET_NAME) > secret.txt'
    
    - task: CopyFiles@2
      displayName: Copy file
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      displayName: Publish Artifact
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    
  8. Sélectionnez Enregistrer et exécuter, puis sélectionnez-le à nouveau pour valider vos modifications et déclencher le pipeline. Si vous y êtes invité, sélectionnez Autoriser pour accorder l’accès au pipeline aux ressources Azure.

  9. Une fois que le pipeline démarre, sélectionnez la tâche CmdLine pour afficher les journaux.

    Capture d’écran montrant les journaux des tâches en ligne de commande.

  10. Après l'achèvement de l'exécution du pipeline, revenez au résumé du pipeline et sélectionnez l’artefact publié.

    Capture d’écran montrant l’artefact publié sous l’onglet Résumé.

  11. Sélectionnez supprimer>secret.txt pour télécharger le fichier.

    Capture d’écran montrant comment télécharger l’artefact publié.

  12. Ouvrez le fichier texte téléchargé. Il doit contenir le secret récupéré à partir de votre Key Vault.

Nettoyer les ressources

Pour supprimer les ressources que vous avez créées, procédez comme suit :

  1. Si vous avez créé une organisation pour héberger votre projet, découvrez comment supprimer votre organisation. Sinon, supprimez votre projet.

  2. Toutes les ressources Azure créées pendant ce tutoriel sont hébergées dans un seul groupe de ressources. Exécutez la commande suivante pour supprimer le groupe de ressources et toutes ses ressources.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Résolution des problèmes

Erreur : « L’utilisateur ou le groupe n’a pas d’autorisation de liste de secrets »

Cette erreur se produit lorsque le principal de service ou l’identité managée utilisés par le pipeline ne sont pas autorisés à répertorier les secrets dans le Key Vault. Pour résoudre ce problème, vérifiez que l’identité dispose des autorisations Get et List pour les secrets. Exécutez les commandes suivantes pour accorder les autorisations requises à votre principal de service :

az login

az account set --subscription <YOUR_SUBSCRIPTION_ID>

$spnObjectId = az ad sp show --id <YOUR_SERVICE_PRINCIPAL_ID>

az keyvault set-policy --name <YOUR_KEY_VAULT_NAME> --object-id $spnObjectId --secret-permissions get list