Vault : Réduire sa dépendance code avec Vault Agent
Nous vous avons déjà parlé de l’outil Hashicorp Vault pour la centralisation des secrets statiques, dynamiques ou encore pour l’Encryption as a Service. Dans cet article, nous allons nous intéresser à Vault Agent, qui va nous permettre de réduire la dépendance de HashiCorp Vault au niveau du code. Ce premier article est une introduction au sujet, avant de voir en détail comment intégrer Vault Agent dans une application.
Prérequis
Précision : au moment où nous écrivons cet article, Vault est en version 1.6.2.
Si vous ne connaissez pas encore Vault, je vous invite à essayer le tutoriel interactif sur le site officiel Vault d’Hashicorp afin de vous faire une première idée.
Enfin, cet article fait suite à la trilogie d’articles sur comment faire disparaître les secrets applicatifs avec Vault et Terraform :
Qu’est ce que le Vault Agent ?
Vault Agent n’est autre que le binaire Vault lancé en mode Agent. Il permet en l’occurrence de bénéficier de certaines fonctionnalités nous facilitant l’interaction avec Vault, notamment :
- Auto-Auth: Prend en charge l’authentification avec Vault définie par une méthode. Une fois authentifié, celui-ci dépose le token Vault dans un Sinks.
- Methods: Il s’agit de la configuration côté Vault Agent nous permettant de nous authentifier avec Vault. A savoir que TOUTES les méthodes d’authentification qu’on l’on retrouve côté Vault ne sont pas forcément disponibles via le Vault Agent. Si le token Vault expire, Vault agent est en capacité de renouveler celui-ci.
- Sinks: Il s’agit de la configuration permettant d’indiquer à l’Agent où déposer le token Vault ou encore chiffrer celui-ci si besoin. Pour le moment, seul File (stockage fichier) est supporté.
- Caching: Permet de mettre en cache les réponses de Vault (token, lease, etc). Le caching est utilisé le plus souvent lors d’un usage plus intensif de Vault et n’entrera pas le cadre de cet article.
- Templating: Anciennement Consul-template, le templating permet de transformer un fichier template source en un fichier de destination contenant nos secrets et a lieu une fois que le token Vault a été généré par l’Auto-Auth. Le templating se base sur Consul Template markup. Enfin, celui-ci permet de gérer le renouvellement dynamique de nos secrets en remettant à jour notre fichier de destination (toujours en se basant sur le template).
Vault Agent, pourquoi ?
Dans les précédents articles, nous avons vu comment intégrer Vault dans une application. Cependant, dans chacune des actions entreprises, nous avons constaté que l’intégration pouvait impacter le code et créer des dépendances avec Vault.
On note deux dépendances :
- Au niveau de l’authentification et renouvellement du token Vault :
- Premièrement, l’application doit être “consciente” de la méthode d’authentification (plus d’information sur l’article: Comment choisir sa méthode d’authentification) afin d’obtenir son token.
- Deuxièmement, le token fourni par Vault a une durée d’expiration et l’application doit être en capacité de renouveler celui-ci si besoin
- Si le secret est dynamique, l’application doit être en capacité de le renouveler.
Pour résumer, nous avons donc les dépendances suivantes, en prenant l’exemple d’une application sur AWS :
Vault Agent permet de s’affranchir des dépendances. Il prend en charge les différentes tâches, notamment:
- Auto-Auth: S’authentifier auprès de Vault et renouveler le token fourni par Vault si celui-ci expire (si spécifié)
- Template: Récupérer les secrets et renouveler les secrets dynamiques via le token généré par la méthode Auto-Auth. Anciennement Consul-template
Si nous reprenons l’exemple précédent, voici ce que ça donnerait :
Le Vault Agent nous permet dans un premier temps de s’authentifier auprès du Vault avec la méthode d’authentification AWS et de renouveler le token si la durée de vie de celui-ci arrive à expiration.
Dans un second temps, il permet de récupérer les secrets pour les déposer dans un fichier template et enfin renouveler ses secrets si besoin.
Si vous êtes sur Kubernetes, il est possible de passer par le Vault Agent Sidecar Injector, sujet qui ne sera pas abordé ici.
Nous avons posé les bases du sujet ! Dans la prochaine partie de cet article, nous verrons comment intégrer Vault Agent dans l’application.