Déployer HashiCorp Vault et storage backend consul avec Docker Compose et activation de key vault
HashiCorp Vault est une solution leader pour la gestion des secrets et des identités dans les environnements modernes. Elle permet de sécuriser, stocker et contrôler l'accès aux secrets et autres…


HashiCorp Vault est une solution leader pour la gestion des secrets et des identités dans les environnements modernes. Elle permet de sécuriser, stocker et contrôler l'accès aux secrets et autres données sensibles, tels que les mots de passe, les clés API ou les certificats.
Voici un aperçu des fonctionnalités principales de Vault :
🔑 Stockage sécurisé des secrets
Vault offre un coffre-fort centralisé pour le stockage des secrets avec chiffrement. Les données sont protégées en transit et au repos, garantissant une sécurité optimale.
🛡️ Contrôle d’accès granulaire
Grâce à une politique fine de gestion des droits, Vault permet d'attribuer des autorisations spécifiques aux utilisateurs, applications ou services, réduisant ainsi les risques liés à l'accès non autorisé.
🔄 Rotation automatique des secrets
Vault peut générer des secrets dynamiques et les renouveler automatiquement. Par exemple, il peut créer des identifiants temporaires pour les bases de données et révoquer leur accès après un certain délai.
🗝️ Gestion des identités et accès multi-cloud
Vault prend en charge l'intégration avec des fournisseurs d'identité comme LDAP, AWS IAM, Azure AD, Kubernetes et d'autres, permettant une gestion cohérente des identités dans des environnements multi-cloud.
🛠️ Engines secrets avancés
Vault propose différents engines, dont :
- Key/Value Secrets Engine pour stocker des secrets statiques.
- Database Secrets Engine pour générer des identifiants temporaires pour les bases de données.
- PKI Secrets Engine pour gérer les certificats.
- Kubernetes
Dans cet article, nous allons voir comment déployer Vault en utilisant Docker Compose et storage backend consul.
Pré-requis
Avant de commencer, assurez-vous d’avoir :
- Infrastructure : VM 1vCPU et 2Go RAM.
- Docker et Docker Compose installés sur votre machine.
- Une compréhension de base de Docker et Vault.
- Stockage : on utilisera consul.
Configuration de Vault
Créez une arborescence dédiée au déploiement :
mkdir -p /opt/vault/{config,data,logs}
cd /opt/vault
- Fichier de configuration config/vault.hcl :
Utilisez un backend de stockage sécurisé, comme Consul.
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = "true"
}
storage "consul" {
address = "consul:8500"
path = "vault/"
}
default_lease_ttl = "168h"
max_lease_ttl = "0h"
api_addr = "http://vault:8200"
cluster_addr = "http://vault:8201"
ui = true
disable_mlock = true
- Explication :
- storage : Consul garantit la persistance des données.
- listener : Assurez un accès HTTP uniquement.
- ui : Activez l'interface utilisateur.
- disable_mlock : Désactivez mlock dans les conteneurs (nécessaire avec Docker).
- Fichier Docker Compose
Créez le fichier docker-compose.yml :
services:
vault:
image: hashicorp/vault:1.18
container_name: vault
restart: always
volumes:
- ./vault:/vault
- ./logs:/vault/logs
ports:
- "8200:8200"
environment:
VAULT_API_ADDR: "http://vault:8200"
VAULT_ADDRESS: "http://vault:8200"
VAULT_ADDR: "http://vault:8200"
networks:
- vault-network
cap_add:
- IPC_LOCK
command: vault server -config=/vault/config/vault.hcl
depends_on:
- consul
consul:
image: hashicorp/consul:1.20
container_name: consul
restart: always
volumes:
- ./consul/data:/consul/data
ports:
- "8500:8500"
networks:
- vault-network
command: "agent -server -bootstrap -ui -client=0.0.0.0"
networks:
vault-network:
driver: bridge
- Explication :
- Vault :
- Définit un backend de stockage Consul.
- Mappe les volumes pour la persistance et la configuration.
- Utilise cap_add: IPC_LOCK pour empêcher les données sensibles d'être swapées.
- Consul : Fournit un stockage distribué pour Vault.
- Réseau : Isolé dans un réseau bridge dédié.
- Vault :
- Lancer le déploiement
Démarrez les conteneurs :
docker compose up -d
docker logs vault
docker compose ps
- Initialiser et configurer Vault: docker exec -it vault vault operator init
Copiez et sauvegardez en lieu sûr les clés de déchiffrement et le root token. Vous aurez besoin à chaque redemarage.
docker exec -it vault vault operator init

Unseal Key 1: SgWmTdROPvTdnZ1hYMw9Ms6i8jcEBL1VaHaIyaqgXfMo
Unseal Key 2: QSLYoOCD7USZD5crfjmqAKsKQGB1WVWtQGyTHIPsbLIW
Unseal Key 3: Jm+aMyfFQ8pUQjc3dIkkBEPYPs4UTBpInPSyiZiw+YqM
Unseal Key 4: ETp3S3osoXWEyqjk5t2ePC4fvYRpX6FJpPBKL9oTR0b2
Unseal Key 5: 6BBja+0F0AT9l+ALR8K79JMxjAidImTjjcDOOokGVPoS
Initial Root Token: hvs.dPBeV5mT1PuMLYWhTm0cYssH
- Acceder à l'url : http://vault_srv_ip:82000/ et renseigner 3 des Unseal key

- Après la validation de la 3ième unseal key, cette page va s'ouvrir pour l'authent avec le root key. Renseigner la root key pour acceder à l'UI de vault.

- On vois bien que le storage type est consul

Cette authent avec token nous permet de configurer la methode d'authent. Vault supporte username & password, OIDC, LDAP, Github...
On peut par exemple activer le username & password. Depuis le menu : Access > enable new method > Username & password > enable

Une fois activer, on peut revenir sur l'authent methods pour créer un user. username: admin, password: AKsKQGB1WVWtQGyT7588!
Il faut mettre un password fort. Une fois créé, on peut l'utiliser pour se connecter.

Pour acceder à consul et voir qu'il est bien configuré sur le vault: http://vault_srv_ip:8500/

Activation de key vault
- Depuis le menu > Secrets Engins > Enable new engine


- Clic sur kv > renseigner un nom par exemple vault-with-consul > clic sur Enable engine

- Clic sur new secret pour ajouter un secret


Conclusion
Avec ce guide, vous avez maintenant un Vault fonctionnel. Cette configuration est parfaite pour tester les fonctionnalités de Vault avant de déployer une solution complète en production.
D'autres articles viendront pour approfondir, explorez les fonctionnalités comme le KV Secrets Engine, les politiques ACL, ou encore les intégrations avec Kubernetes.
N'hésitez pas à laisser des commentaires si vous avez des questions ou des suggestions !
Commentaires
Aucun commentaire pour le moment.