# Consommer un Azure Key Vault depuis vos pipelines Azure DevOps

## Scénario

Imaginons ensemble une solution simple où j'ai besoin, depuis un pipeline Azure, d'appeler une API externe utilisant un compte utilisateur.

Pour maximiser la sécurité et afin de partager cette information avec différentes applications nous souhaitons stocker ces éléments dans un Azure Key Vault.

## Configuration de l'accès au Key Vault depuis Azure DevOps

Depuis Azure DevOps, nous allons utiliser la fonctionnalité des groupes de variables ou Library dans son interface en anglais:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1685545094688/8211f3d4-2c00-4914-9626-3c6eff989c36.png align="center")

Depuis cette page, nous allons donc pourvoir ajouter un nouveau groupe, tel que :

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1685545143614/63b073d0-5ebd-43b5-b58e-f2d6ecb860e6.png align="center")

Avant de pouvoir lier ce groupe avec un Key Vault, il faudra s'assurer des permissions nécessaire pour le compte utilisé par Azure DevOps.

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Voyons ensemble sur le prochain chapitre comment réaliser cette action.</div>
</div>

## Ajouter les permisssions nécessaires

Pour pouvoir consommer le Key Vault, l'identité utilisée par Azure DevOps devra avoir des permissions permettant la récupération des informations stockées dans ce service.

Comme vous pouvez le voir, sur la capture d'écran suivante, en cas de soucis vous aurez cette alerte :

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1685546396119/fe9afcf1-3094-4251-b32d-4085d156eaf3.png align="center")

Pour corriger ce point il suffit d'ajouter au compte ces deux rôles RBAC BuiltIn :

* Key Vault Reader
    
* Key Vault Secrets User
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1685546918524/89ed7c6a-f27d-4916-8ba8-700f684de587.png align="center")

Lorsque les permissions seront bien positionnées vous n'aurez plus d'alertes :

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1685546760113/21f3dfd8-5740-41cc-8436-82e74de3c257.png align="center")

## Ajouter les secrets

Maintenant que les permissions sont correctement possitionnées et que vos secrets sont présents dans le Key Vault, vous allez pouvoir les ajouter dans votre groupe de variables en cliquant sur le bouton "Add":

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1687793203739/dc759257-1ee5-42d4-8ddb-00f031a318e8.png align="center")

Sélectionner vos secrets puis valider:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1687793297013/f545a2c1-97fa-49bf-a695-4095fdb47954.png align="center")

Pensez à sauvegarder vos changements en cliquant sur e bouton "Save" présent en haut de page:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1687793374620/320f2231-cef7-4df3-8d47-ae0ac6048250.png align="center")

## Utilisation du groupe de variables

Maintenant que tout est configuré il ne reste plus qu'à voir comment consommer ces secrets depuis un pipeline Azure DevOps.

Le nom du groupe de variable sera à mettre à jour, ici nous allons déclarer l'usage de notre groupe nommé "**DEV**" :

```yaml
variables:
- group: "DEV"
```

Et voici l'exemple complet :

```yaml
trigger:
- main

pool:
  vmImage: ubuntu-latest
variables:
- group: "DEV"

steps:
- script: |
    echo "$(UsernameAPI):$(PasswordAPI)" >> $(Build.ArtifactStagingDirectory)/secrets.txt
  displayName: 'Create a file with secrets'
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/secrets.txt'
    ArtifactName: 'secrets'
    publishLocation: 'Container'
```

Lors de la première exécution; vous aurez à valider des permissions visible via cette alerte:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1687794137472/575b69bb-96e6-49c0-ab9f-809cedbe7f08.png align="center")

Validez les deux permissions requises; pour accéder au service connexion et au groupe de variables:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1687794185033/161125a3-aeb6-4fb5-9adb-6eea898ce702.png align="center")

Une fois exécuté, vous devriez avoir un fichier publié:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1687795070716/90ed1d73-d085-43f3-b631-de5137a78810.png align="center")

Dans la zone de stockage des artifacts:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1687795098769/9b1742eb-17ae-4737-97d8-a8653c918e3c.png align="center")

Et celui-ci contient les secrets d'Azure Key Vault:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1687795248484/8b39ecd9-e110-461a-b3f7-7fd508a1619a.png align="center")

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Ce pipeline est un démonstateur qui ne doit dans aucun cas être utiliser dans un contexte autre que du test.</div>
</div>
