Skip to content

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 :

  1. Installation du binaire Vault
  2. Création des répertoires et de l'utilisateur
  3. Déploiement de vault.hcl (template Jinja2)
  4. Service systemd avec auto-unseal

Pour aller plus loin