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 :
Installer/configurer Docker et Swarm
Générer la PKI Reemo (CA + certificats clients/serveurs)
Déployer les containers Vault
Initialiser Vault automatiquement (premier run uniquement)
Afficher le contenu de init.json dans la sortie console
Sauvegarder
init.jsonsur le runner AnsibleFaire le unseal automatique des replicas
Créer le token CredentialAPI dans Vault (stocké en Docker secret)
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 :
Sauvegarder le fichier init.json dans un emplacement sécurisé (gestionnaire de mots de passe, coffre-fort, backup chiffré hors-ligne).
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 seuleedit: édition temporaire re-chiffréedecrypt: déchiffrement définitif à éviter
Fournir la passphrase au playbook¶
Trois options :
Prompt interactif :
ansible-playbook -i inv playbook/reemo-infra.yml --ask-vault-pass
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
Config globale dans ansible.cfg :
[defaults] vault_password_file = ~/.ansible-vault-pass