Déployer HashiCorp Vault et azure blob storage backend avec Docker Compose
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 avec backend azure blob storage.
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 : Azure Blob storage
- Compte Azure avec un Storage Account.
- Un Container Blob dédié pour Vault (exemple : vault-data).
- Permissions suffisantes via Azure Managed Identity, Service Principal, ou Access Key.
- Un exemple pour le Access key: key1 ou key2

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 Azure blob.
storage "azure" {
accountName = "vaulttechledgerdev"
container = "vault-data"
environment = "AzurePublicCloud"
accountKey = "6rd7SzXhxEEEEChASDZQTFFF59Sh+AStH7rG4A=="
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = "true"
}
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 : Azure blob 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 :
######## Azure blob ################
services:
vault:
image: hashicorp/vault:1.18
container_name: vault
restart: always
volumes:
- ./vault/data:/vault/data
- ./vault/logs:/vault/logs
- ./vault/config:/vault/config
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
networks:
vault-network:
driver: bridge
- Explication :
- Vault :
- Définit un backend de stockage azure blob.
- 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.
- 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: kCPEd8QpxQbEBgMhu4vO2UQi6F3aA26/38sMrtW+65Zf
Unseal Key 2: 51dsyTPj62QSDG1Y8hiS5hxbQXw5dBZzYTDcQ963erLb
Unseal Key 3: 5zts//kU8Su1EPFWrKl/H1+tielBHvkyWMqnmbaHIlay
Unseal Key 4: etPDVTSSoOk82i15/RuusT9/q1B6y5E0ALzmUTgune2w
Unseal Key 5: 2pTWZsAggvSwimnT4XYpNQOoslWtVD83Ll3kGoVeYYPi
Initial Root Token: hvs.zRRqPYd6t1T9aJEoBOroOMLq
- Activer audit logs
vault login <ROOT_TOKEN>
vault audit enable file file_path=/vault/logs/audit.log
ls -lh /vault/logs/audit.log
vault status
sleep 10
ls -lh /vault/logs/audit.log
- 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 azure

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-vault, password: AKsKQGB1WV7588!
Il faut mettre un password fort. Une fois créé, on peut l'utiliser pour se connecter.

Pour acceder à azure portal pour voir:

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


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

- Clic sur new secret pour ajouter un secret


Conclusion
Vous avez maintenant un Vault fonctionnel. Il suffit de sécuriser l'accès en tls pour avoir un environement de production. Un autre article traitera la partie tls sécurisé avec let's encrypt.
Si on perd le server docker, il suffit de :
- Redeployer une nouvelle instance avec la meme configuration qui pointe sur azure blob,
- Clés Unseal Key sauvegardées pendant la première initialisation pour deverouillrer le vault. C'est pourquoi, il faut bein sauvegarder les Unseal Key et le root key
- Les secrets seront disponibles.
Cette configuration peut être déployé en production en mettant un reverse proxy comme traefik devant pour le tls Un autre article viendra sur ce point.
N'hésitez pas à laisser des commentaires si vous avez des questions ou des suggestions !
Commentaires
Aucun commentaire pour le moment.