Aller au contenu
Sécurité medium

OpenBao : le fork open source de Vault

12 min de lecture

logo openbao

OpenBao est un coffre-fort de secrets open source, fork de HashiCorp Vault (v1.14.0), maintenu par la Linux Foundation via l’OpenSSF. Il offre une alternative 100% open source après le passage de Vault sous licence BSL.

Ce guide vous montre comment installer, configurer et utiliser OpenBao pour gérer vos secrets en production.

  • Installer OpenBao v2.5 sur Linux
  • Configurer les secrets engines : KV v2, Transit
  • Mettre en place l’authentification : userpass, AppRole
  • Écrire des policies HCL pour le contrôle d’accès granulaire
  • Préparer une configuration production-ready
  • Linux (x86_64 ou arm64)
  • curl et jq installés
  • Accès root ou sudo (pour le mode production)

OpenBao est fonctionnellement équivalent à Vault Community Edition 1.14. Voici les différences principales :

AspectVault CEOpenBao
LicenceBSL 1.1 (restrictions commerciales)MPL 2.0 (100% open source)
MainteneurHashiCorpLinux Foundation / OpenSSF
CLIvaultbao
Version actuelle1.18+2.5.1
NamespacesEnterprise onlyInclus (depuis v2.3)
Compatibilité API-Compatible Vault 1.14
  1. Télécharger le binaire (v2.5.1, dernière version stable)

    Fenêtre de terminal
    VERSION="2.5.1"
    ARCH="x86_64" # ou arm64
    curl -LO "https://github.com/openbao/openbao/releases/download/v${VERSION}/bao_${VERSION}_Linux_${ARCH}.tar.gz"
  2. Extraire et installer

    Fenêtre de terminal
    tar xzf bao_${VERSION}_Linux_${ARCH}.tar.gz
    sudo mv bao /usr/local/bin/
    sudo chmod +x /usr/local/bin/bao
  3. Vérifier l’installation

    Fenêtre de terminal
    bao version
    # OpenBao v2.5.1 (e546fae8cbfe95d8f36a351deb2cd23bfb94119e)
Fenêtre de terminal
# Activer EPEL si nécessaire
sudo dnf install -y epel-release
# Installer OpenBao
sudo dnf install -y openbao
Fenêtre de terminal
# Docker Hub
docker pull openbao/openbao:2.5.1
# GitHub Container Registry
docker pull ghcr.io/openbao/openbao:2.5.1
# Quay.io
docker pull quay.io/openbao/openbao:2.5.1

Le mode dev est parfait pour apprendre. Il démarre un serveur en mémoire, non sécurisé, avec un token root prédéfini.

Fenêtre de terminal
# Démarrer en mode développement
bao server -dev -dev-root-token-id="root"

Dans un autre terminal :

Fenêtre de terminal
# Configurer l'environnement
export BAO_ADDR='http://127.0.0.1:8200'
export BAO_TOKEN='root'
# Vérifier le statut
bao status

Sortie attendue :

Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 2.5.1
Storage Type inmem
HA Enabled false

Le secrets engine KV v2 stocke des secrets avec versioning automatique.

Fenêtre de terminal
# Stocker des credentials
bao kv put secret/demo \
username="admin" \
password="SuperSecret123"

Sortie :

== Secret Path ==
secret/data/demo
======= Metadata =======
Key Value
--- -----
created_time 2026-03-16T13:16:20.324983703Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1
Fenêtre de terminal
# Lire la dernière version
bao kv get secret/demo
# Sortie JSON (pour scripts)
bao kv get -format=json secret/demo | jq -r '.data.data.password'
Fenêtre de terminal
# Mettre à jour le secret (crée version 2)
bao kv put secret/demo \
username="admin" \
password="NewPassword456"
# Lire une version spécifique
bao kv get -version=1 secret/demo
Fenêtre de terminal
# Soft delete (récupérable)
bao kv delete secret/demo
# Hard delete (définitif)
bao kv destroy -versions=1,2 secret/demo
# Supprimer toutes les métadonnées
bao kv metadata delete secret/demo

4. Secrets Engine : Transit (chiffrement as a service)

Section intitulée « 4. Secrets Engine : Transit (chiffrement as a service) »

Transit permet de chiffrer/déchiffrer des données sans exposer les clés.

Fenêtre de terminal
bao secrets enable transit
Fenêtre de terminal
bao write -f transit/keys/my-app-key
Fenêtre de terminal
# Les données doivent être en base64
bao write transit/encrypt/my-app-key \
plaintext=$(echo "données sensibles" | base64)

Sortie :

Key Value
--- -----
ciphertext vault:v1:5/94SlpHWje32JEfqYZjXEe32FL0...
key_version 1
Fenêtre de terminal
bao write transit/decrypt/my-app-key \
ciphertext="vault:v1:5/94SlpHWje32JEfqYZjXEe32FL0..."
# Le plaintext retourné est en base64

La méthode userpass permet une authentification par identifiant/mot de passe, utile pour les développeurs et les tests.

Fenêtre de terminal
bao auth enable userpass
Fenêtre de terminal
bao write auth/userpass/users/devuser \
password="devpassword" \
policies="default"
Fenêtre de terminal
# Unset le token root d'abord
unset BAO_TOKEN
# Login
bao login -method=userpass \
username=devuser \
password=devpassword

Sortie :

Success! You are now authenticated.
Key Value
--- -----
token s.15Wjnl3DVKulHTuNAyrSuyvi
token_accessor u9dKTGCSPnWIPJeHVK6JHiyf
token_duration 768h
token_renewable true
token_policies ["default"]

AppRole est la méthode recommandée pour les applications et pipelines CI/CD. Elle utilise un couple role_id + secret_id.

Fenêtre de terminal
export BAO_TOKEN='root' # Revenir en root
bao auth enable approle
Fenêtre de terminal
bao write auth/approle/role/my-app \
secret_id_ttl=10m \
token_num_uses=10 \
token_ttl=20m \
token_max_ttl=30m \
secret_id_num_uses=1 \
policies="dev-policy"
Fenêtre de terminal
# Le role_id est stable (stocké dans la config)
bao read auth/approle/role/my-app/role-id
# role_id fce7ab03-5449-e1c5-e102-5c2b90b3e7b0
# Le secret_id est éphémère (généré à la demande)
bao write -f auth/approle/role/my-app/secret-id
# secret_id 4bb62b7c-8deb-0781-4b7b-854e479483f2
Fenêtre de terminal
bao write auth/approle/login \
role_id="fce7ab03-5449-e1c5-e102-5c2b90b3e7b0" \
secret_id="4bb62b7c-8deb-0781-4b7b-854e479483f2"

Les policies définissent qui peut accéder à quoi. Elles utilisent le format HCL.

dev-policy.hcl
# Lecture/écriture sur secret/data/dev/*
path "secret/data/dev/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Lecture seule sur les métadonnées
path "secret/metadata/dev/*" {
capabilities = ["list", "read"]
}
# Interdire l'accès à secret/data/prod/*
path "secret/data/prod/*" {
capabilities = ["deny"]
}
CapabilityHTTP VerbDescription
createPOSTCréer si n’existe pas
readGETLire
updatePOST/PUTModifier
deleteDELETESupprimer
listLISTLister les clés
sudo-Opérations privilégiées
deny-Refuser explicitement
Fenêtre de terminal
# Créer la policy
bao policy write dev-policy dev-policy.hcl
# Lister les policies
bao policy list
# Lire une policy
bao policy read dev-policy
Fenêtre de terminal
bao write auth/userpass/users/devops \
password="devopspass" \
policies="dev-policy"

Pour la production, créez un fichier config.hcl :

/etc/openbao/config.hcl
ui = true
# Storage avec Raft (intégré, recommandé)
storage "raft" {
path = "/var/lib/openbao/data"
node_id = "node1"
}
# Listener HTTPS (TLS obligatoire en prod !)
listener "tcp" {
address = "0.0.0.0:8200"
tls_cert_file = "/etc/openbao/tls/server.crt"
tls_key_file = "/etc/openbao/tls/server.key"
}
# Addresses
api_addr = "https://openbao.example.com:8200"
cluster_addr = "https://openbao.example.com:8201"
# Sécurité
disable_mlock = false # false si possible (performance)
log_level = "info"
Fenêtre de terminal
# Créer les répertoires
sudo mkdir -p /var/lib/openbao/data
sudo mkdir -p /etc/openbao/tls
sudo chown -R openbao:openbao /var/lib/openbao
# Démarrer
bao server -config=/etc/openbao/config.hcl
Fenêtre de terminal
# Initialiser (une seule fois)
bao operator init -key-shares=5 -key-threshold=3
Fenêtre de terminal
# Répéter avec 3 clés différentes (threshold=3)
bao operator unseal <key1>
bao operator unseal <key2>
bao operator unseal <key3>

La version 2.5 apporte plusieurs améliorations notables :

  • Horizontal Read Scalability : les nœuds standby peuvent servir les lectures, améliorant les performances
  • Distribution de plugins OCI : téléchargement automatique de plugins depuis des registres de conteneurs
  • OIDC Provider Client Credentials : nouveau flow pour l’OIDC
  • Audit HTTP : webhook pour les événements d’audit
  • Namespaces (depuis 2.3) : isolation multi-tenant sans licence Enterprise
  1. OpenBao = Vault open source (MPL 2.0), maintenu par Linux Foundation
  2. Compatibilité API avec Vault 1.14 — migration transparente
  3. KV v2 pour les secrets avec versioning
  4. Transit pour le chiffrement as a service
  5. AppRole pour l’authentification CI/CD
  6. Policies HCL pour le contrôle d’accès granulaire
  7. Namespaces inclus (vs Enterprise chez HashiCorp)

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn