Aller au contenu principal

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 :

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

ComposantMinimumRecommandé
RAM512 Mo1-2 Go
CPU1 cœur2 cœurs
Stockage5 Go10 Go
Réseau100 Mbps1 Gbps
Port par défaut

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
Port 80

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
Remplacez le domaine

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ètreDescription
uiActive l’interface web
storage "file"Backend de stockage local (données chiffrées)
listener "tcp"Écoute HTTPS sur le port 8200
api_addrURL 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
Sauvegardez les clés

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é.

Accès à l’interface web

  1. Ouvrez un navigateur et allez à : https://vault.votredomaine.com:8200
  2. Choisissez la méthode Token
  3. Saisissez votre root token et validez

Vous accédez au tableau de bord Vault : statut, moteurs de secrets (KV, etc.) et politiques d’accès.

HTTPS

Vault n’écoute qu’en HTTPS sur le port 8200. Utilisez bien https:// dans l’URL et acceptez le certificat si besoin (Let's Encrypt est reconnu par les navigateurs).

Commandes utiles

CommandeDescription
vault statusÉtat de Vault (initialisé, scellé, etc.)
vault operator unsealFournir une clé de déverrouillage
vault loginSe connecter avec un token
sudo systemctl status vaultStatut du service systemd
sudo systemctl restart vaultRedémarrer Vault

Structure des fichiers

CheminDescription
/etc/vault.d/vault.hclFichier de configuration
/opt/vault/data/Données Vault (chiffrées)
/opt/vault/tls/Certificat et clé TLS

En cas de problème

Le service ne démarre pas

  • Vérifiez les logs : sudo journalctl -u vault.service -n 50
  • Vérifiez que les chemins dans vault.hcl existent et que l’utilisateur vault a les droits sur /opt/vault
  • Vérifiez la syntaxe : vault server -config=/etc/vault.d/vault.hcl (mode debug, à arrêter ensuite)

Erreur TLS ou certificat

  • Vérifiez que cert.pem et key.pem sont dans /opt/vault/tls/ et en lecture pour l’utilisateur vault
  • Testez le renouvellement : sudo certbot renew --dry-run

Vault reste scellé après redémarrage

Après chaque redémarrage du serveur, Vault est à nouveau scellé. Il faut fournir à nouveau 3 clés avec vault operator unseal. Pour automatiser le déverrouillage (moins sécurisé), vous pouvez utiliser le mode auto-unseal (ex. avec un cloud KMS) ; voir la documentation Vault.

Références