Installation et activation

Variables d’inventaire

Pour activer Vault, CredentialAPI et Portal Credential, ajoutez les variables suivantes dans votre inventaire Ansible :

# Activation de CredentialAPI
CREDENTIAL_ENABLED: true

# restriction IP sur le portail (optionnel)
CREDENTIAL_PORTAL_RESTRICT_IP:
   - name: siteA
     ip: 1.1.1.1
   - name: siteB
     ip: 192.168.1.0/24

# Activation de Vault
VAULT_ENABLED: true

# Mode de stockage Vault
# - "file" : single-node (recommandé pour dev/petites infras)
# - "raft" : cluster HA (recommandé pour prod, requiert >=3 nodes managers)
VAULT_MODE: file

# Mode d'unseal
# - "manual"  : unseal via les clés de init.json (par défaut)
# - "transit" : auto-unseal via un autre Vault
# - "awskms"  : auto-unseal via AWS KMS
VAULT_UNSEAL_MODE: manual

# Nombre de clés Shamir générées à l'init
VAULT_KEY_SHARES: 5

# Nombre de clés requises pour unseal
VAULT_KEY_THRESHOLD: 3

Chemin du fichier init.json

Le fichier init.json (généré par Vault au premier démarrage) est stocké sur la machine Ansible. Son chemin par défaut est :

VAULT_INIT_FILE: "{{ playbook_dir }}/secrets/{{ INSTANCE_NAME }}/vault/init.json"

Vous pouvez surcharger ce chemin dans votre inventaire si besoin.

Premier déploiement

Sur une machine vierge, lancez le playbook complet :

ansible-playbook -i inventory.yml playbook/reemo-infra.yml

Le playbook va :

  1. Installer/configurer Docker et Swarm

  2. Générer la PKI Reemo (CA + certificats clients/serveurs)

  3. Déployer les containers Vault

  4. Initialiser Vault automatiquement (premier run uniquement)

  5. Afficher le contenu de init.json dans la sortie console

  6. Sauvegarder init.json sur le runner Ansible

  7. Faire le unseal automatique des replicas

  8. Créer le token CredentialAPI dans Vault (stocké en Docker secret)

  9. Déployer CredentialAPI, Portal Credential et les autres services

Contenu de init.json

Le fichier init.json contient les éléments critiques pour accéder à Vault :

{
  "unseal_keys_b64": ["PUYWLruPMgw...", "OuhJ7B5hXr...", "TiQpJiv...", "8ZJ8sYM...", "Hb5xNyO..."],
  "unseal_keys_hex": ["3d46162ebb8f...", "3ae849ec1e61...", "4e242a262bfc...", "f1927cb1830c...", "1dbe7136e30f..."],
  "unseal_shares": 5,
  "unseal_threshold": 3,
  "root_token": "hvs.xxxxxxxxxxxxxxx"
}
  • unseal_keys_b64 / unseal_keys_hex : les 5 clés Shamir, en deux formats équivalents (base64 et hexadécimal). Par défaut il en faut 3 sur 5 pour déverrouiller Vault après chaque redémarrage.

  • root_token : le token admin complet de Vault. À conserver en sécurité, même si en pratique vous n’en aurez plus besoin après le bootstrap initial.

Warning

Ce fichier est irremplaçable. Vault ne peut PAS le regénérer. Si vous le perdez et que Vault redémarre, vous perdez l’accès à tous vos secrets de manière définitive.

Action obligatoire après le premier run

À la fin du premier run, vous devez immédiatement :

  1. Sauvegarder le fichier init.json dans un emplacement sécurisé (gestionnaire de mots de passe, coffre-fort, backup chiffré hors-ligne).

  2. Chiffrer le fichier local avec ansible-vault (voir ci-dessous).

Sécurisation avec ansible-vault

ansible-vault chiffre des fichiers au repos ; le playbook les déchiffre automatiquement à l’exécution.

Chiffrement initial

Immédiatement après le premier run, chiffrez le fichier :

ansible-vault encrypt playbooks/secrets/reemo/vault/init.json

Ansible demande une passphrase forte (à sauvegarder aussi dans votre gestionnaire de mots de passe).

Note

La passphrase est différente du contenu de init.json. Sauvegardez les deux : le contenu de init.json ET la passphrase ansible-vault.

Lecture et édition

ansible-vault view playbooks/secrets/reemo/vault/init.json
ansible-vault edit playbooks/secrets/reemo/vault/init.json
ansible-vault decrypt playbooks/secrets/reemo/vault/init.json
  • view : lecture seule

  • edit : édition temporaire re-chiffrée

  • decrypt : déchiffrement définitif à éviter

Fournir la passphrase au playbook

Trois options :

  1. Prompt interactif :

    ansible-playbook -i inv playbook/reemo-infra.yml --ask-vault-pass
    
  2. Fichier passphrase :

    echo "ma_passphrase" > ~/.ansible-vault-pass
    chmod 600 ~/.ansible-vault-pass
    

    Puis lors du run :

    ansible-playbook -i inv playbook/reemo-infra.yml --vault-password-file ~/.ansible-vault-pass
    
  3. Config globale dans ansible.cfg :

    [defaults]
    vault_password_file = ~/.ansible-vault-pass