Vault — Secrets et PKI
Vault centralise tous les credentials du homelab. Aucun mot de passe, token ou clé API n'est stocké en clair dans le code ou les variables CI/CD.
Architecture
| Rôle | Valeur |
|---|---|
| VM | vault (192.168.1.22) |
| URL | https://vault.mounik.ovh |
| Stockage | Fichier (pas Raft — instance unique) |
| HA | Désactivé |
| Auto-unseal | Configuré via Ansible |
Initialisation (one-shot)
ssh mounik@192.168.1.22 -p 2222
export VAULT_ADDR=https://127.0.0.1:8200
# Initialiser (5 shards, seuil 3)
vault operator init -key-shares=5 -key-threshold=3 > /root/vault-keys.txt
# Stocker les 5 clés et le root token hors ligne (imprimé + coffre)
# Déverrouiller avec 3 clés
vault operator unseal <key1>
vault operator unseal <key2>
vault operator unseal <key3>
Structure des secrets
vault secrets enable -path=homelab kv-v2
vault kv put homelab/gitlab root-password=...
vault kv put homelab/harbor admin-password=...
vault kv put homelab/keycloak admin-password=...
vault kv put homelab/keycloak-clients gitlab-secret=... harbor-secret=...
vault kv put homelab/traefik ovh-application-key=... ovh-application-secret=...
vault kv put homelab/argocd admin-password=...
vault kv put homelab/defectdojo admin-password=...
# Token CI/CD (720h)
vault token create -policy=default -ttl=720h -display-name=gitlab-pipeline
PKI interne
vault secrets enable pki
vault write -format=json pki/root/generate/internal \
common_name="Homelab CA" ttl=87600h
vault write pki/issue/vault common_name=vault.mounik.ovh ttl=8760h
La PKI interne permet de signer des certificats pour les services qui ne sont pas exposés via Traefik (ex : communications internes k3s).
Intégration services
| Service | Usage |
|---|---|
| GitLab CI/CD | Variables injectées depuis Vault via VAULT_TOKEN |
| Traefik | Credentials OVH Let's Encrypt |
| Harbor | Mot de passe admin et secrets OIDC |
| Keycloak | Mots de passe admin et clients OIDC |
| ArgoCD | Mot de passe admin |
| DefectDojo | Mot de passe admin |
Déploiement Ansible
Le rôle vault automatise :
- Installation du binaire Vault
- Création des répertoires et de l'utilisateur
- Déploiement de
vault.hcl(template Jinja2) - Service systemd avec auto-unseal
Pour aller plus loin
- Phase 4.1 — Déploiement Vault — opérations détaillées
- Sécurité — Vue d'ensemble — architecture defense in depth
- Hardening SSH — accès sécurisé aux VMs