Consommer un Azure Key Vault depuis vos pipelines Azure DevOps
La sécurité n'est pas une option, même dans vos pipelines, voyons comment s'appuyer sur le Key Vault Azure pour manager vos données sensibles.
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:
Depuis cette page, nous allons donc pourvoir ajouter un nouveau groupe, tel que :
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.
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 :
Pour corriger ce point il suffit d'ajouter au compte ces deux rôles RBAC BuiltIn :
Key Vault Reader
Key Vault Secrets User
Lorsque les permissions seront bien positionnées vous n'aurez plus d'alertes :
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":
Sélectionner vos secrets puis valider:
Pensez à sauvegarder vos changements en cliquant sur e bouton "Save" présent en haut de page:
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" :
variables:
- group: "DEV"
Et voici l'exemple complet :
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:
Validez les deux permissions requises; pour accéder au service connexion et au groupe de variables:
Une fois exécuté, vous devriez avoir un fichier publié:
Dans la zone de stockage des artifacts:
Et celui-ci contient les secrets d'Azure Key Vault: