Partager via


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

Obtenir l’exemple de code

Si vous disposez déjà de votre propre dépôt, passez à l’étape suivante. Sinon, 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éer un Azure Key Vault

  1. Connectez-vous au portail Azure, puis sélectionnez le bouton Cloud Shell dans le coin supérieur droit.

  2. 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>
    
  3. 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>
    
  4. Créez un groupe de ressources.

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Créez un Azure Key Vault.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. 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>
    

Configurer l’authentification

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

  1. Connectez-vous au Portail Azure, puis recherchez le service Identités managées dans la barre de recherche.

  2. Sélectionnez Créer, puis renseignez les champs obligatoires comme suit :

    • Abonnement : sélectionnez votre abonnement dans le menu déroulant.
    • Groupe de ressources : sélectionnez un groupe de ressources existant ou créez-en un.
    • Région : sélectionnez une région dans le menu déroulant.
    • Nom : entrez un nom pour votre identité managée affectée par l’utilisateur.
  3. Sélectionnez Réviser + créer lorsque vous avez terminé.

  4. Une fois le déploiement terminé, sélectionnez Accéder à la ressource, puis copiez les valeurs d’abonnement et d’ID client à utiliser dans les étapes à venir.

  5. Accédez aux propriétés des paramètres> et copiez la valeur d’ID de locataire de votre identité managée pour une utilisation ultérieure.

Définir des stratégies d’accès Key Vault

  1. Accédez à Portail Azure et utilisez la barre de recherche pour rechercher 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, activez les cases à cocher Obtenir et Lister .

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

  5. Sélectionnez Suivant, puis Suivant une fois de plus.

  6. Passez en revue vos nouvelles stratégies, puis sélectionnez Créer lorsque vous avez terminé.

Créer une connexion de service

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

  2. Sélectionnez Paramètres du projet>Connexions de service, puis Nouvelle connexion de service pour créer une 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 dans le menu déroulant.

  5. Pour l’étape 1 : Détails de l’identité managée, renseignez les champs comme suit :

    • Abonnement pour l’identité managée : sélectionnez l’abonnement contenant votre identité managée.

    • Groupe de ressources pour l’identité managée : sélectionnez le groupe de ressources hébergeant votre identité managée.

    • Identité managée : sélectionnez votre identité managée dans le menu déroulant.

  6. Pour l’étape 2 : Étendue Azure, renseignez les champs comme suit :

    • Niveau d’étendue pour la connexion de service : sélectionnez Abonnement.

    • Abonnement pour la connexion de service : sélectionnez l’abonnement auquel votre identité managée accède.

    • Groupe de ressources pour la connexion de service : (facultatif) Spécifiez pour limiter l’accès d’identité managée à un groupe de ressources.

  7. Pour l’étape 3 : Détails de la connexion de service :

    • Nom de la connexion de service : indiquez un nom pour votre connexion de service.

    • Référence de gestion des services : (facultatif) informations de contexte d’une base de données ITSM.

    • Description : (facultatif) Ajoutez une description.

  8. Dans Sécurité, cochez la case Accorder l’autorisation d’accès à tous les pipelines pour autoriser tous les pipelines à utiliser cette connexion de service. Si vous ne sélectionnez pas cette option, vous devez accorder manuellement l’accès à chaque pipeline qui utilise cette connexion de service.

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

    Capture d’écran montrant comment créer une connexion de service ARM d’identité managée.

Accéder aux secrets du coffre de clés à partir de votre pipeline

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

  2. Sélectionnez Pipelines, puis 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 un script qui exécute des commandes d'écho. Ces scripts ne sont pas nécessaires, nous pouvons les supprimer.

  6. Ajoutez la tâche AzureKeyVault, en remplaçant 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’extrait 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. Ajoutons les tâches suivantes pour copier et publier notre secret. Cet exemple n'est donné qu'à titre de démonstration et ne doit pas être mis en œuvre 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 êtes invité à autoriser l’accès du pipeline aux ressources Azure, sélectionnez Autoriser. Vous n’aurez qu’à approuver votre pipeline une seule fois.

  9. Sélectionnez la tâche CmdLine pour afficher les journaux.

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

  10. Une fois l’exécution du pipeline terminée, revenez au récapitulatif du pipeline et sélectionnez l’artefact publié.

    Capture d’écran montrant l’artefact publié dans l'onglet récapitulatif.

  11. Sélectionnez déposer>secret.txt pour le télécharger.

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

  12. Ouvrez le fichier texte que vous venez de télécharger, lequel 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 :

  1. Si vous avez créé une organisation pour héberger votre projet, consultez Comment supprimer votre organisation, sinon supprimer votre projet.

  2. 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>
    

Questions fréquentes (FAQ)

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 :

az account set --subscription <YOUR_SUBSCRIPTION_ID>

az login

$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