Vérification et dépannage

Vérifications post-déploiement

Vault est unsealed et opérationnel

docker exec $(docker ps --filter name=reemo_vault1. -q) bao status

Sortie attendue :

Key                     Value
---                     -----
Sealed                  false

En mode Raft, vérifiez aussi les 3 replicas :

for n in 1 2 3; do
  echo "=== Replica $n ==="
  docker exec $(docker ps --filter name=reemo_vault${n}. -q) bao status
done

Cluster Raft : liste des membres

ROOT=$(jq -r .root_token playbooks/secrets/reemo/vault/init.json)
docker exec -e BAO_TOKEN=$ROOT $(docker ps --filter name=reemo_vault1. -q) bao operator raft list-peers

Sortie attendue : les 3 replicas listés, avec un leader et deux followers.

CredentialAPI et son token

# Le Docker secret existe
docker secret ls | grep reemo_VAULT_TOKEN

# Le token a bien un period (720h)
TOKEN=$(docker exec $(docker ps --filter name=reemo_credentialapi. -q | head -1) cat /run/secrets/reemo_VAULT_TOKEN)
docker exec -e BAO_TOKEN=$TOKEN $(docker ps --filter name=reemo_vault1. -q) bao token lookup

Vérifiez ces valeurs :

  • period = 720h

  • renewable = true

  • ttl proche de 720h (renouvelé toutes les 6h)

  • policies = [credentialapi-admin default]

Supercronic tourne dans le container

docker exec $(docker ps --filter name=reemo_credentialapi. -q | head -1) ps aux | grep supercronic

Vous devez voir un process supercronic actif. Pour voir les logs des renew :

docker logs $(docker ps --filter name=reemo_credentialapi. -q | head -1) 2>&1 | grep renew

Test manuel d’un renew :

docker exec $(docker ps --filter name=reemo_credentialapi. -q | head -1) /usr/local/bin/renew-vault-token.sh

Sortie attendue :

[2026-06-08 12:34:56] [renew-vault-token] [INFO] Token renewed successfully, new TTL: 2592000s (720h)

Dépannage

Vault est scellé après un redémarrage

Qu’est-ce que ça signifie ?

Après un redémarrage, Vault repasse automatiquement à l’état “scellé” par sécurité. Il faut le “desceller” pour rétablir l’accès.

Comment identifier le problème ?

Le coffre Vault scellé s’affiche de trois façons différentes :

  • Endpoint API /api/healthcheck

    Accédez à https://votre-portail/api/healthcheck. Dans credential-providers, vous verrez :

    "status": "ERROR",
    "error": "Vault is sealed"
    
    Erreur "Vault is sealed" dans credential-providers de /api/healthcheck

  • Interface web : verified_user Zone d’administration > build Système > monitor_heart État des services

    Vault affiche un état Erreur avec la description Vault is sealed.

    Coffre Vault en état KO sur la page État des services

  • Interface web : verified_user Zone d’administration > key Secrets > enhanced_encryption Fournisseurs de secrets

    La fiche Vault affiche un tag rouge Scellé avec le bouton Desceller disponible.

    Tag rouge « Scellé » sur la fiche Vault avec bouton « Desceller »

Comment réparer ?

Deux voies selon votre contexte :

Situation

Action

Ansible runner disponible

Relancez le playbook complet (descellement automatique) :

ansible-playbook -i inv playbook/reemo-infra.yml --tags vault

Runner indisponible ou intervention isolée

Descellez manuellement via l’interface web : voir procédure manuelle (vous aurez besoin des clés unseal_keys_hex du fichier init.json)

Le playbook a perdu init.json

Symptôme : Vault is initialized but no init.json found at <path>.

Cause : fichier supprimé ou playbook lancé depuis un autre runner sans cette sauvegarde.

Solution :

  1. Récupérez init.json depuis votre gestionnaire de mots de passe

  2. Recréez le fichier :

    mkdir -p playbooks/secrets/reemo/vault
    chmod 700 playbooks/secrets/reemo/vault
    # Écrire le json dans playbooks/secrets/reemo/vault/init.json
    chmod 600 playbooks/secrets/reemo/vault/init.json
    
  3. Re-chiffrez avec ansible-vault si besoin.

  4. Relancez le playbook :

    ansible-playbook -i inv playbook/reemo-infra.yml --tags vault
    

Le token CredentialAPI a un TTL qui diminue

Symptôme : TTL descend progressivement (700h → 680h → …) au lieu de rester ~720h.

Cause : supercronic ne renouvelle pas le token toutes les 6h.

Diagnostic :

  1. Vérifiez que supercronic tourne :

    docker exec $(docker ps --filter name=reemo_credentialapi. -q | head -1) ps aux | grep supercronic
    
  2. Vérifiez les logs de renouvellement :

    docker service logs reemo_credentialapi --tail 200 | grep renew
    

Note

Un TTL de 700h–720h est normal. Un TTL < 0 est alarmant.

Solution :

Redémarrez le service :

docker service update --force reemo_credentialapi

Permission Denied

Symptôme : La communication ne fonctionne plus avec le Vault. Message d’erreur dans le healthcheck : Permission Denied

Cause : le token utilisé par credentialapi n’est plus valide.

Diagnostic :

  1. Vérifiez l’état du token :

    TOKEN=$(docker exec $(docker ps --filter name=reemo_credentialapi. -q | head -1) cat /run/secrets/reemo_VAULT_TOKEN)
    docker exec -e BAO_TOKEN=$TOKEN $(docker ps --filter name=reemo_vault1. -q) bao token lookup
    

Solution :

Supprimer le service credentialapi :

docker service rm reemo_credentialapi

Supprimer le secret VAULT TOKEN

docker secret rm reemo_TOKEN_VAULT

Relancer credentialapi par reemo-infra

ansible-playbook -i inventory.yml playbooks/reemo-infra.yml --tags vault,credentialapi