Installer HashiCorp Vault sur Ubuntu
Ce guide vous explique comment installer et configurer HashiCorp Vault sur un serveur Ubuntu 24.04 LTS. Vault permet de centraliser la gestion des secrets (clés API, mots de passe, certificats TLS) de manière sécurisée.
Les applications modernes s’appuient sur des secrets : clés API, mots de passe de base de données, certificats TLS, clés de chiffrement. Les stocker en dur ou en clair représente un risque. Vault offre un stockage sécurisé, la génération dynamique de credentials, le chiffrement en tant que service et un contrôle d’accès fin.
Commander un serveur
Pour héberger votre instance Vault, HostMyServers propose plusieurs offres adaptées :
- VPS Performance - Idéal pour les petites équipes
- VPS NVMe - Excellent rapport qualité/prix
- Serveurs dédiés Eco - Pour des déploiements avec charge modérée
- Serveurs dédiés Performance - Performance maximale
Prérequis
- Accès SSH root ou utilisateur avec sudo
- Système Ubuntu 24.04 LTS 64 bits
- Un enregistrement DNS A pointant vers l’IP du serveur (pour Let's Encrypt)
- Ports 8200 (HTTPS Vault) et 80 (Certbot, temporaire) accessibles
Configuration requise
| Composant | Minimum | Recommandé |
|---|---|---|
| RAM | 512 Mo | 1-2 Go |
| CPU | 1 cœur | 2 cœurs |
| Stockage | 5 Go | 10 Go |
| Réseau | 100 Mbps | 1 Gbps |
Vault écoute en HTTPS sur le port 8200. L’interface web et l’API utilisent ce port.
Connexion au serveur
Connectez-vous en SSH à votre serveur Ubuntu (port 22 par défaut, ou port personnalisé / clé PEM selon votre configuration) :
ssh utilisateur@adresse_ip_serveur
Mise à jour du système
Mettez à jour la liste des paquets avant d’installer Vault :
sudo apt update
sudo apt upgrade -y
Installation de Vault depuis le dépôt HashiCorp
HashiCorp fournit un dépôt APT officiel pour installer la dernière version stable de Vault.
Installer les paquets nécessaires
sudo apt install -y gnupg curl lsb-release
Ajouter la clé GPG HashiCorp
Cette clé permet de vérifier que les paquets proviennent bien de HashiCorp :
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
Ajouter le dépôt HashiCorp
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
Installer Vault
sudo apt update
sudo apt install -y vault
Vérifier l’installation
vault --version
Vous devriez voir une ligne du type : Vault v1.20.x (...).
Activer l’autocomplétion (optionnel)
vault -autocomplete-install
exec $SHELL
Configuration du pare-feu
Ouvrez les ports nécessaires pour Vault et pour l’émission des certificats Let's Encrypt :
sudo ufw allow 8200/tcp
sudo ufw allow 80/tcp
sudo ufw reload
Le port 80 est utilisé temporairement par Certbot pour la validation HTTP. Vous pourrez le fermer après obtention des certificats si vous n’en avez pas autrement besoin.
Certificats TLS avec Let's Encrypt
Pour un déploiement en production, Vault doit être exposé en HTTPS. Nous utilisons Certbot pour obtenir des certificats gratuits Let's Encrypt.
Installer Certbot
sudo apt install -y certbot
Obtenir un certificat pour votre domaine
Remplacez vault.votredomaine.com par votre sous-domaine et votre-email@exemple.com par votre adresse email :
sudo certbot certonly --standalone -d vault.votredomaine.com --non-interactive --agree-tos --email votre-email@exemple.com
Les certificats sont créés dans /etc/letsencrypt/live/vault.votredomaine.com/.
Préparer le répertoire TLS pour Vault
Le paquet Vault crée généralement un utilisateur système vault. Si besoin, créez-le : sudo adduser --system --group vault. Puis créez le répertoire des certificats et copiez les fichiers :
sudo mkdir -p /opt/vault/tls
sudo mkdir -p /opt/vault/data
sudo cp /etc/letsencrypt/live/vault.votredomaine.com/fullchain.pem /opt/vault/tls/cert.pem
sudo cp /etc/letsencrypt/live/vault.votredomaine.com/privkey.pem /opt/vault/tls/key.pem
sudo chown -R vault:vault /opt/vault
sudo chmod 600 /opt/vault/tls/cert.pem /opt/vault/tls/key.pem
Adaptez vault.votredomaine.com à votre vrai nom de domaine dans toutes les commandes et fichiers ci-dessous.
Script de renouvellement des certificats
Pour que Vault utilise toujours les certificats à jour après un renouvellement Let's Encrypt :
sudo tee /etc/letsencrypt/renewal-hooks/deploy/vault.sh << 'EOF'
#!/bin/bash
cp /etc/letsencrypt/live/vault.votredomaine.com/fullchain.pem /opt/vault/tls/cert.pem
cp /etc/letsencrypt/live/vault.votredomaine.com/privkey.pem /opt/vault/tls/key.pem
chown -R vault:vault /opt/vault/tls
chmod 600 /opt/vault/tls/*
systemctl reload vault
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/vault.sh
Pensez à remplacer vault.votredomaine.com dans ce script par votre domaine.
Fermer le port 80 après obtention des certificats (optionnel)
Si vous n’utilisez plus le port 80 :
sudo ufw delete allow 80/tcp
sudo ufw reload
Configuration de Vault pour la production
Le fichier de configuration contrôle le stockage, l’écoute réseau et les paramètres de sécurité.
Sauvegarder la configuration par défaut
sudo cp /etc/vault.d/vault.hcl /etc/vault.d/vault.hcl.backup
Créer la configuration de production
Remplacez vault.votredomaine.com par votre domaine :
sudo tee /etc/vault.d/vault.hcl << 'EOF'
# Configuration Vault pour la production
ui = true
disable_mlock = true
storage "file" {
path = "/opt/vault/data"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_cert_file = "/opt/vault/tls/cert.pem"
tls_key_file = "/opt/vault/tls/key.pem"
tls_min_version = "tls12"
tls_cipher_suites = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
tls_require_and_verify_client_cert = "false"
tls_disable_client_certs = "true"
}
api_addr = "https://vault.votredomaine.com:8200"
cluster_addr = "https://vault.votredomaine.com:8201"
EOF
| Paramètre | Description |
|---|---|
ui | Active l’interface web |
storage "file" | Backend de stockage local (données chiffrées) |
listener "tcp" | Écoute HTTPS sur le port 8200 |
api_addr | URL publique de l’API (pour les clients) |
Démarrer Vault
sudo systemctl enable vault
sudo systemctl restart vault
sudo systemctl status vault
Le statut doit indiquer active (running).
Variables d’environnement pour le CLI
Pour que le client Vault sache où se connecter :
echo 'export VAULT_ADDR="https://vault.votredomaine.com:8200"' >> ~/.bashrc
source ~/.bashrc
Vérifiez :
echo $VAULT_ADDR
vault status
Avant initialisation, vous devriez voir par exemple : Initialized: false, Sealed: true.
Initialisation et déverrouillage (unseal)
Vault démarre dans un état scellé : les données sont présentes mais indéchiffrables. L’initialisation crée les clés de déverrouillage et le token root.
Comprendre le processus
Lors de l’initialisation, Vault crée :
- Clé maître : chiffre tous les secrets
- Clés de déverrouillage (unseal) : 5 clés issues de l’algorithme de Shamir ; il en faut 3 sur 5 pour déverrouiller Vault
- Root token : token d’administration initial
Les clés de déverrouillage et le root token ne sont affichés qu’une seule fois. Stockez-les dans des endroits sûrs et distincts. Sans elles, les données restent inaccessibles.
Initialiser Vault
vault operator init
Notez les 5 clés de déverrouillage et l’Initial Root Token. Ne les partagez pas et ne les commitez pas dans un dépôt.
Déverrouiller Vault
Il faut fournir 3 clés différentes (une par exécution) :
vault operator unseal
Collez la première clé lorsque vous y êtes invité. Puis répétez deux fois avec deux autres clés :
vault operator unseal
vault operator unseal
Quand le déverrouillage réussit, vault status affiche : Sealed: false.
Se connecter avec le token root
vault login
Entrez l’Initial Root Token lorsque vous y êtes invité.