Aller au contenu
Sécurité medium

Vault : authentification userpass et AppRole

9 min de lecture

logo vault

Avant d’accéder à un secret dans Vault, un client doit prouver son identité. Vault propose plusieurs méthodes d’authentification selon le contexte : utilisateurs humains, applications, pipelines CI/CD, workloads cloud.

Ce guide couvre les deux méthodes les plus courantes :

  • userpass : authentification par identifiant/mot de passe (utilisateurs)
  • AppRole : authentification pour applications et CI/CD
  • Vault installé et démarré
  • Accès admin (root token ou policy admin)

La méthode userpass est simple : identifiant + mot de passe. Elle convient aux développeurs qui accèdent à Vault via la CLI ou l’UI.

Fenêtre de terminal
vault auth enable userpass

Sortie :

Success! Enabled userpass auth method at: userpass/
Fenêtre de terminal
vault write auth/userpass/users/alice \
password="SecurePassword123!" \
policies="dev-policy"

L’utilisateur alice peut maintenant se connecter :

Fenêtre de terminal
vault login -method=userpass \
username=alice \
password="SecurePassword123!"

Sortie :

Success! You are now authenticated.
Key Value
--- -----
token hvs.CAESICpTptPYxzwJISnFYQQRZzz7ftYL...
token_accessor ORgCVUVANPcCkzgF8oKs9ZRc
token_duration 768h
token_renewable true
token_policies ["default" "dev-policy"]
identity_policies []
policies ["default" "dev-policy"]
token_meta_username alice

Le token retourné est automatiquement stocké dans ~/.vault-token pour les commandes suivantes.

Fenêtre de terminal
# Lister les utilisateurs
vault list auth/userpass/users/
# Modifier le mot de passe
vault write auth/userpass/users/alice password="NewPassword456!"
# Modifier les policies
vault write auth/userpass/users/alice policies="dev-policy,staging-readonly"
# Supprimer un utilisateur
vault delete auth/userpass/users/alice

Vous pouvez personnaliser la durée de vie et le comportement des tokens :

Fenêtre de terminal
vault write auth/userpass/users/bob \
password="BobPassword123!" \
policies="dev-policy" \
token_ttl="8h" \
token_max_ttl="24h" \
token_bound_cidrs="10.0.0.0/8"
ParamètreDescription
token_ttlDurée de vie initiale du token
token_max_ttlDurée maximale (même après renouvellement)
token_bound_cidrsIPs autorisées à utiliser le token

AppRole est la méthode recommandée pour les applications et pipelines. Elle utilise deux éléments :

  • role_id : identité de l’application (stable, comme un username)
  • secret_id : credential éphémère (comme un mot de passe temporaire)
UserpassAppRole
Mot de passe stablesecret_id éphémère et usage unique possible
Difficile à automatiserConçu pour l’automatisation
Pas de restriction d’usageLimites sur nombre d’utilisations, TTL, CIDR
Fenêtre de terminal
vault auth enable approle

Créez un rôle pour votre application :

Fenêtre de terminal
vault write auth/approle/role/my-webapp \
secret_id_ttl=10m \
token_num_uses=10 \
token_ttl=20m \
token_max_ttl=30m \
secret_id_num_uses=1 \
policies="webapp-policy"
ParamètreDescriptionValeur recommandée
secret_id_ttlDurée de validité du secret_id10-30 minutes
secret_id_num_usesNombre d’utilisations du secret_id1 (usage unique)
token_ttlDurée de vie du token obtenuSelon besoin applicatif
token_num_usesNombre d’utilisations du token0 (illimité) ou selon besoin

Le role_id est stable et peut être stocké dans la configuration de l’application :

Fenêtre de terminal
vault read auth/approle/role/my-webapp/role-id

Sortie :

Key Value
--- -----
role_id d922482a-36c8-45fa-df77-c793b2980f51

Le secret_id est éphémère et doit être généré à chaque déploiement :

Fenêtre de terminal
vault write -f auth/approle/role/my-webapp/secret-id

Sortie :

Key Value
--- -----
secret_id aab71b03-aeeb-6965-dd97-73d5f9e30f38
secret_id_accessor 67eabeab-e4b4-12f3-8fde-4ab79b5c7027
secret_id_num_uses 1
secret_id_ttl 10m

L’application utilise role_id + secret_id pour obtenir un token :

Fenêtre de terminal
vault write auth/approle/login \
role_id="d922482a-36c8-45fa-df77-c793b2980f51" \
secret_id="aab71b03-aeeb-6965-dd97-73d5f9e30f38"

Sortie :

Key Value
--- -----
token hvs.CAESIG...
token_accessor ABC123...
token_duration 20m
token_renewable true
token_policies ["default" "webapp-policy"]

Voici comment intégrer AppRole dans un pipeline CI/CD :

  1. Pré-déploiement : un administrateur génère le secret_id et le passe au pipeline (variable secrète CI/CD)

  2. Pipeline : récupère le role_id (stocké en config) et le secret_id (variable secrète)

  3. Login : le pipeline fait vault write auth/approle/login pour obtenir un token

  4. Accès secrets : le pipeline utilise le token pour lire les secrets nécessaires

  5. Fin : le token expire automatiquement

Exemple de script :

#!/bin/bash
set -e
# Variables d'environnement (injectées par le CI/CD)
# VAULT_ADDR, VAULT_ROLE_ID, VAULT_SECRET_ID
# Obtenir le token
VAULT_TOKEN=$(vault write -field=token auth/approle/login \
role_id="$VAULT_ROLE_ID" \
secret_id="$VAULT_SECRET_ID")
export VAULT_TOKEN
# Lire les secrets
DB_PASSWORD=$(vault kv get -field=password secret/apps/webapp/database)
# Utiliser le secret...
echo "Deploying with DB access..."

Pour éviter que le secret_id transite en clair, utilisez le response wrapping :

Fenêtre de terminal
# Générer un secret_id wrappé (valide 5 minutes)
vault write -wrap-ttl=5m -f auth/approle/role/my-webapp/secret-id

Sortie :

Key Value
--- -----
wrapping_token hvs.CAESI...
wrapping_accessor abc123...
wrapping_token_ttl 5m
wrapping_token_creation_time 2026-03-16T14:30:00Z
wrapping_token_creation_path auth/approle/role/my-webapp/secret-id

Le CI/CD reçoit un wrapping_token au lieu du secret_id. Il doit le “unwrapper” :

Fenêtre de terminal
VAULT_TOKEN="<wrapping_token>" vault unwrap
AspectUserpassAppRoleToken
CibleHumainsApplicationsAutomation simple
FacilitéTrès simpleMoyenSimple
SécuritéMoyenneHauteFaible
RotationManuelleAutomatisableManuelle
CI/CDNon recommandéRecommandéAcceptable court-terme
SymptômeCause probableSolution
invalid username or passwordCredentials incorrectsVérifier username/password
invalid role_idRôle AppRole inexistantvault read auth/approle/role/<nom>
secret_id is invalidsecret_id expiré ou déjà utiliséGénérer un nouveau secret_id
permission denied on loginAuth method non activéevault auth enable <method>
request path is not validPath incorrectVérifier le path (auth/userpass/…)
  1. userpass : simple, pour les utilisateurs humains (CLI, UI)
  2. AppRole : sécurisé, pour applications et CI/CD
  3. role_id = identité stable, secret_id = credential éphémère
  4. En prod : secret_id_num_uses=1 pour usage unique
  5. Response wrapping : protection supplémentaire pour les pipelines
  6. Chaque utilisateur/application = policies spécifiques (moindre privilège)

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