
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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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
Prérequis
Section intitulée « Prérequis »OpenBao vs Vault : ce qui change
Section intitulée « OpenBao vs Vault : ce qui change »OpenBao est fonctionnellement équivalent à Vault Community Edition 1.14. Voici les différences principales :
| Aspect | Vault CE | OpenBao |
|---|---|---|
| Licence | BSL 1.1 (restrictions commerciales) | MPL 2.0 (100% open source) |
| Mainteneur | HashiCorp | Linux Foundation / OpenSSF |
| CLI | vault | bao |
| Version actuelle | 1.18+ | 2.5.1 |
| Namespaces | Enterprise only | Inclus (depuis v2.3) |
| Compatibilité API | - | Compatible Vault 1.14 |
1. Installation
Section intitulée « 1. Installation »Téléchargement direct
Section intitulée « Téléchargement direct »-
Télécharger le binaire (v2.5.1, dernière version stable)
Fenêtre de terminal VERSION="2.5.1"ARCH="x86_64" # ou arm64curl -LO "https://github.com/openbao/openbao/releases/download/v${VERSION}/bao_${VERSION}_Linux_${ARCH}.tar.gz" -
Extraire et installer
Fenêtre de terminal tar xzf bao_${VERSION}_Linux_${ARCH}.tar.gzsudo mv bao /usr/local/bin/sudo chmod +x /usr/local/bin/bao -
Vérifier l’installation
Fenêtre de terminal bao version# OpenBao v2.5.1 (e546fae8cbfe95d8f36a351deb2cd23bfb94119e)
Via package manager (Fedora/RHEL)
Section intitulée « Via package manager (Fedora/RHEL) »# Activer EPEL si nécessairesudo dnf install -y epel-release
# Installer OpenBaosudo dnf install -y openbaoVia container
Section intitulée « Via container »# Docker Hubdocker pull openbao/openbao:2.5.1
# GitHub Container Registrydocker pull ghcr.io/openbao/openbao:2.5.1
# Quay.iodocker pull quay.io/openbao/openbao:2.5.12. Premier démarrage (mode dev)
Section intitulée « 2. Premier démarrage (mode dev) »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.
# Démarrer en mode développementbao server -dev -dev-root-token-id="root"Dans un autre terminal :
# Configurer l'environnementexport BAO_ADDR='http://127.0.0.1:8200'export BAO_TOKEN='root'
# Vérifier le statutbao statusSortie attendue :
Key Value--- -----Seal Type shamirInitialized trueSealed falseTotal Shares 1Threshold 1Version 2.5.1Storage Type inmemHA Enabled false3. Secrets Engine : KV v2
Section intitulée « 3. Secrets Engine : KV v2 »Le secrets engine KV v2 stocke des secrets avec versioning automatique.
Écrire un secret
Section intitulée « Écrire un secret »# Stocker des credentialsbao kv put secret/demo \ username="admin" \ password="SuperSecret123"Sortie :
== Secret Path ==secret/data/demo
======= Metadata =======Key Value--- -----created_time 2026-03-16T13:16:20.324983703Zcustom_metadata <nil>deletion_time n/adestroyed falseversion 1Lire un secret
Section intitulée « Lire un secret »# Lire la dernière versionbao kv get secret/demo
# Sortie JSON (pour scripts)bao kv get -format=json secret/demo | jq -r '.data.data.password'Versioning
Section intitulée « Versioning »# Mettre à jour le secret (crée version 2)bao kv put secret/demo \ username="admin" \ password="NewPassword456"
# Lire une version spécifiquebao kv get -version=1 secret/demoSupprimer un secret
Section intitulée « Supprimer un secret »# 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éesbao kv metadata delete secret/demo4. 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.
Activer Transit
Section intitulée « Activer Transit »bao secrets enable transitCréer une clé de chiffrement
Section intitulée « Créer une clé de chiffrement »bao write -f transit/keys/my-app-keyChiffrer des données
Section intitulée « Chiffrer des données »# Les données doivent être en base64bao write transit/encrypt/my-app-key \ plaintext=$(echo "données sensibles" | base64)Sortie :
Key Value--- -----ciphertext vault:v1:5/94SlpHWje32JEfqYZjXEe32FL0...key_version 1Déchiffrer
Section intitulée « Déchiffrer »bao write transit/decrypt/my-app-key \ ciphertext="vault:v1:5/94SlpHWje32JEfqYZjXEe32FL0..."
# Le plaintext retourné est en base645. Authentification : userpass
Section intitulée « 5. Authentification : userpass »La méthode userpass permet une authentification par identifiant/mot de passe, utile pour les développeurs et les tests.
Activer userpass
Section intitulée « Activer userpass »bao auth enable userpassCréer un utilisateur
Section intitulée « Créer un utilisateur »bao write auth/userpass/users/devuser \ password="devpassword" \ policies="default"Se connecter
Section intitulée « Se connecter »# Unset le token root d'abordunset BAO_TOKEN
# Loginbao login -method=userpass \ username=devuser \ password=devpasswordSortie :
Success! You are now authenticated.
Key Value--- -----token s.15Wjnl3DVKulHTuNAyrSuyvitoken_accessor u9dKTGCSPnWIPJeHVK6JHiyftoken_duration 768htoken_renewable truetoken_policies ["default"]6. Authentification : AppRole (pour CI/CD)
Section intitulée « 6. Authentification : AppRole (pour CI/CD) »AppRole est la méthode recommandée pour les applications et pipelines
CI/CD. Elle utilise un couple role_id + secret_id.
Activer AppRole
Section intitulée « Activer AppRole »export BAO_TOKEN='root' # Revenir en rootbao auth enable approleCréer un rôle
Section intitulée « Créer un rôle »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"Obtenir les credentials
Section intitulée « Obtenir les credentials »# 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-854e479483f2Login avec AppRole
Section intitulée « Login avec AppRole »bao write auth/approle/login \ role_id="fce7ab03-5449-e1c5-e102-5c2b90b3e7b0" \ secret_id="4bb62b7c-8deb-0781-4b7b-854e479483f2"7. Policies HCL
Section intitulée « 7. Policies HCL »Les policies définissent qui peut accéder à quoi. Elles utilisent le format HCL.
Syntaxe de base
Section intitulée « Syntaxe de base »# Lecture/écriture sur secret/data/dev/*path "secret/data/dev/*" { capabilities = ["create", "read", "update", "delete", "list"]}
# Lecture seule sur les métadonnéespath "secret/metadata/dev/*" { capabilities = ["list", "read"]}
# Interdire l'accès à secret/data/prod/*path "secret/data/prod/*" { capabilities = ["deny"]}Capabilities disponibles
Section intitulée « Capabilities disponibles »| Capability | HTTP Verb | Description |
|---|---|---|
create | POST | Créer si n’existe pas |
read | GET | Lire |
update | POST/PUT | Modifier |
delete | DELETE | Supprimer |
list | LIST | Lister les clés |
sudo | - | Opérations privilégiées |
deny | - | Refuser explicitement |
Appliquer une policy
Section intitulée « Appliquer une policy »# Créer la policybao policy write dev-policy dev-policy.hcl
# Lister les policiesbao policy list
# Lire une policybao policy read dev-policyAssigner à un utilisateur
Section intitulée « Assigner à un utilisateur »bao write auth/userpass/users/devops \ password="devopspass" \ policies="dev-policy"8. Configuration production
Section intitulée « 8. Configuration production »Pour la production, créez un fichier 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"}
# Addressesapi_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"Démarrer en production
Section intitulée « Démarrer en production »# Créer les répertoiressudo mkdir -p /var/lib/openbao/datasudo mkdir -p /etc/openbao/tlssudo chown -R openbao:openbao /var/lib/openbao
# Démarrerbao server -config=/etc/openbao/config.hclInitialisation
Section intitulée « Initialisation »# Initialiser (une seule fois)bao operator init -key-shares=5 -key-threshold=3# Répéter avec 3 clés différentes (threshold=3)bao operator unseal <key1>bao operator unseal <key2>bao operator unseal <key3>9. Fonctionnalités OpenBao 2.5
Section intitulée « 9. Fonctionnalités OpenBao 2.5 »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
À retenir
Section intitulée « À retenir »- OpenBao = Vault open source (MPL 2.0), maintenu par Linux Foundation
- Compatibilité API avec Vault 1.14 — migration transparente
- KV v2 pour les secrets avec versioning
- Transit pour le chiffrement as a service
- AppRole pour l’authentification CI/CD
- Policies HCL pour le contrôle d’accès granulaire
- Namespaces inclus (vs Enterprise chez HashiCorp)