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 tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn