Client vault agent injector
Client Vault Agent Injector
- Présentation :
- Qu'est-ce que Vault Agen Injector ?
- Rôle des sidecars dans Kubernetes pour l'injection des secrets.
Vault Agent Injector est un composant de HashiCorp Vault permettant d'injecter des secrets de manière dynamique dans les applications s'exécutant sur Kubernetes. Il repose sur l'utilisation de sidecars et d'init-containers pour fournir des secrets aux pods.
Il permet de :
-
Authentifier les workloads Kubernetes auprès de Vault via des approches sécurisées telles que JWT ou Kubernetes Auth.
-
Récupérer dynamiquement les secrets depuis Vault et les fournir sous forme de fichiers montés ou de variables d'environnement.
-
Assurer la rotation et la mise à jour automatique des secrets sans redéploiement des pods.
-
Simplifier l'intégration avec des applications sans nécessiter de modifications dans leur code source.
Il intercepte les événements de CREATE et de UPDATE des pods et applique des mutations si des annotations spécifiques sont présentes dans la demande. Cette fonctionnalité est fournie par le projet vault-k8s et peut être installée et configurée automatiquement via le Helm chart de Vault.
Il analyse les métadonnées des pods et recherche l'annotation vault.hashicorp.com/agent-inject: true. Si cette annotation est détectée, il modifie la spécification du pod en conséquence
Types de Mutations
-
Ajout d'un volume partagé : Chaque conteneur du pod monte un volume partagé en mémoire (/vault/secrets), où les secrets seront injectés par Vault Agent.
-
Ajout de conteneurs Vault Agent :
-
Init container : Récupère les secrets au démarrage du pod avant l'exécution des autres conteneurs.
-
Sidecar container : Maintient une connexion avec Vault pour actualiser les secrets tout au long du cycle de vie du pod.
-
-
Montage de volumes TLS et ConfigMap : Permet d'ajouter des certificats TLS et des fichiers de configuration pour personnaliser Vault Agent.
Authentification avec Vault
Le mode principal d'authentification repose sur le ServiceAccount attaché au pod. Ce dernier doit être lié à un rôle Vault et à une policy vault définissant les accès aux secrets. Il est recommandé d'utiliser un serviceaccount dédié plutôt que celui par défaut.
Demande et Injection de Secrets
Deux méthodes permettent de configurer l'injection de secrets :
1. Annotations Kubernetes :
-
-
Exemple :
-
vault.hashicorp.com/agent-inject-secret-credentials: database/roles/app
vault.hashicorp.com/role: 'app'
-
- Les secrets sont montés sous /vault/secrets/credentials.
2. Vault Agent ConfigMap :
-
-
Permet de personnaliser Vault Agent avec des fichiers de configuration montés dans /vault/configs.
-
Templates de Secrets
Vault Agent utilise Consul Template pour rendre les secrets. Par défaut, un modèle générique est appliqué, mais il peut être personnalisé via des annotations :
vault.hashicorp.com/agent-inject-template-credentials: |
{{- with secret "database/roles/app" -}}
username: {{ .Data.username }}
password: {{ .Data.password }}
{{- end }}
Et le secret rendu ressemblerait à ceci dans le conteneur :
$ cat /vault/secrets/foo
password: A1a-BUEuQR52oAqPrP1J
username: v-kubernet-pg-app-q0Z7WPfVNqqTJuoDqCTY-1576529094
Rotation et Mise à Jour des Secrets
Vault Agent assure le renouvellement des secrets et leur mise à jour dans les pods sans nécessiter de redéploiement.
Rôle des sidecars de vault agent
Les sidecars jouent un rôle essentiel dans l'injection de secrets en assurant :
-
La récupération sécurisée des secrets depuis Vault sans modification des applications.
-
La rotation automatique des secrets sans redéploiement des pods.
-
L'exposition des secrets via des fichiers montés ou des variables d'environnement, selon les besoins des applications.
Vault Injector fonctionne en interceptant les pods et en les enrichissant avec des conteneurs supplémentaires dédiés à la récupération et à l'injection des secrets, garantissant ainsi une meilleure sécurité et conformité.
Commentaires
Aucun commentaire pour le moment.