Utilisez des secrets Azure Key Vault dans votre pipeline

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

Avec Azure Key Vault, vous pouvez stocker et gérer en toute sécurité vos informations sensibles telles que les mots de passe, les clés API, les certificats, etc. à l’aide d’Azure Key Vault, vous pouvez facilement créer et gérer des clés de chiffrement pour chiffrer vos données. Azure Key Vault peut également être utilisé pour gérer des certificats pour toutes vos ressources. Dans cet article, vous allez apprendre à :

  • Créez un coffre de clés Azure.
  • Configurez vos autorisations Key Vault.
  • Créez une nouvelle connexion de service.
  • Recherchez les secrets de votre pipeline Azure.

Prérequis

Créer un Azure Key Vault

  1. Accédez au portail Azure.

  2. Sélectionnez Créer une ressource dans le volet de navigation gauche.

    A screenshot showing how to create a new resource in Azure portal.

  3. Recherchez Key Vault, puis appuyez sur Entrée.

    A screenshot showing how to search for Azure Key Vault in Azure portal.

  4. Sélectionnez Créer pour créer un Azure Key Vault.

    A screenshot showing how to create a new Azure Key Vault in Azure portal.

  5. Sélectionnez votre Abonnement, puis ajoutez un nouveau groupe de Ressources. Entrez un nom de coffre de clés et sélectionnez une Région et un niveau tarifaire. Sélectionnez Réviser + créer lorsque vous avez terminé.

    A screenshot showing the steps to create a new key vault in Azure portal.

  6. Sélectionnez Accéder à la ressource lorsque le déploiement de votre nouvelle ressource est terminé.

    A screenshot showing how to navigate to your resource in Azure portal.

Créer un principal du service

Au cours de cette étape, nous allons créer un nouveau principal de service dans Azure, nous permettant d'interroger notre Azure Key Vault à partir d'Azure Pipelines.

  1. Accédez au portail Azure.

  2. Dans la barre de menus, sélectionnez l'icône >_ pour ouvrir Cloud Shell.

  3. Sélectionnez PowerShell ou laissez-le comme Bash en fonction de vos préférences.

  4. Exécutez la commande suivante pour créer un principal de service :

    az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAME
    
  5. Votre résultat doit correspondre à l’exemple ci-dessous. Assurez-vous de copier le résultat de votre commande, car vous en aurez besoin pour créer la connexion au service à l'étape suivante.

    {
      "appId": "p951q3e2-8e5r-z697-e9q52aviu8a2",
      "displayName": "MyServicePrincipal",
      "password": "***********************************",
      "tenant": "85wes2u6-63sh-95zx-2as3-qw58wex269df"
    }
    

Configurez les autorisations d’accès Key Vault

  1. Accédez au portail Azure.

  2. Sélectionnez le coffre de clés que vous avez créé à l’étape précédente.

  3. Sélectionnez Stratégies d’accès.

    A screenshot showing how to navigate to your key vault access policies in Azure portal.

  4. Sélectionnez ajouter une stratégie d’accès pour ajouter une nouvelle stratégie.

  5. Ajoutez un Obtenir et Liste aux autorisations de Secret.

    A screenshot showing how to add get and list permissions to your key vault in Azure portal.

  6. Sous Sélectionner le principal, sélectionnez pour ajouter un principal de service et choisissez celui que vous avez créé précédemment.

  7. Lorsque vous avez terminé, sélectionnez Enregistrer.

Remarque

Les Azure Key Vaults qui utilisent le contrôle d’accès en fonction du rôle Azure (Azure RBAC) ne sont pas pris en charge.

Créer une nouvelle connexion de service

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

  2. Sélectionnez gear iconParamètres du projet, puis Connexions de service.

  3. Si vous configurez une connexion de service pour la première fois dans votre projet, sélectionnez Créer une connexion de service. Si vous avez déjà établi des connexions au service, sélectionnez Nouvelle connexion au service.

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

  5. Sélectionnez Principal du service (manuel), puis sélectionnez Suivant.

  6. Sélectionnez Souscription pour le niveau de portée et remplissez les champs obligatoires avec les informations du principal de service créé précédemment. 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.
  7. Fournissez un nom pour votre connexion de service et assurez-vous de cocher la case Accorder l'autorisation d'accès à tous les pipelines.

  8. Sélectionnez Vérifier et enregistrez lorsque vous avez terminé.

    A screenshot showing how to create a new manual service principal service connection.

Interrogez et utilisez des secrets dans votre pipeline

À l’aide de la tâche Azure Key Vault nous pouvons extraire la valeur de notre secret et l’utiliser dans les tâches suivantes dans notre pipeline. Une chose à garder à l’esprit est que les secrets doivent être explicitement mappés à la variable env, comme illustré dans l’exemple ci-dessous.

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureKeyVault@1
  inputs:
    azureSubscription: 'repo-kv-demo'                    ## YOUR_SERVICE_CONNECTION_NAME
    KeyVaultName: 'kv-demo-repo'                         ## YOUR_KEY_VAULT_NAME
    SecretsFilter: 'secretDemo'                          ## YOUR_SECRET_NAME. Default value: *
    RunAsPreJob: false                                   ## Make the secret(s) available to the whole job

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  inputs:
    command: 'run'
    projects: '**/*.csproj'
  env:
    mySecret: $(secretDemo)

- bash: |
    echo "Secret Found! $MY_MAPPED_ENV_VAR"        
  env:
    MY_MAPPED_ENV_VAR: $(mySecret)

La sortie de la dernière commande bash devrait ressembler à ceci :

Secret Found! ***

Notes

Si vous souhaitez interroger plusieurs secrets à partir de votre Azure Key Vault, utilisez l’argument SecretsFilter pour passer une liste de noms de secrets séparés par des virgules : 'secret1, secret2'.