Phase 4.1 — Vault
Provisionnement de la VM via OpenTofu, configuration via Ansible.
Vue d'ensemble
Vault est le premier service installé. Tous les autres services (GitLab, Harbor, k3s) dépendent de lui pour leurs secrets.
| Rôle | Valeur |
|---|---|
| VM | 103 — vault (192.168.1.22) |
| Nœud Proxmox | pve01 |
| Groupe Ansible | vault |
| URL | https://vault.mounik.ovh |
| Stockage | file (pas Raft — single instance) |
| HA | Désactivé |
1. Provisionnement OpenTofu
La VM Vault est créée par OpenTofu dans le dépôt homelab-proxmox/. C'est la première VM provisionnée (aucune dépendance).
# vault.tf — appel au module vm
module "vault" {
source = "./modules/vm"
name = "vault"
target_node = "pve01"
vmid = 103
cores = 1
memory = 2048
balloon = 1024
disk_size = "20G"
ip = "192.168.1.22"
ssh_key = local.ssh_key
}
Le module modules/vm/ fournit les valeurs par défaut (bridge vmbr0, gateway 192.168.1.254, stockage ssd-vms). Voir la Phase 2 — OpenTofu pour la structure complète.
Exécution :
cd homelab-proxmox/opentofu
tofu plan -target=module.vault -out=tfplan
tofu apply tfplan
2. Configuration Ansible
Le playbook ansible/playbooks/01-vault.yml applique le rôle vault :
ansible-playbook -i inventory/homelab.yml playbooks/01-vault.yml
Le rôle vault :
1. Télécharge et installe Vault
2. Crée l'utilisateur vault et les répertoires (/etc/vault.d, /var/lib/vault/data)
3. Déploie vault.hcl (storage file, listener TLS, api_addr)
4. Installe le service systemd et l'auto-unseal
5. Active et démarre Vault
Le fichier vault.hcl est un template Jinja2 — les variables (vault_version, vault_addr) sont dans roles/vault/defaults/main.yml.
3. Initialisation (one-shot)
Cette étape est manuelle — les clés générées ne doivent jamais transiter par Ansible.
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)
# Copier UNE clé pour l'auto-unseal (le script vault-unseal l'attend ici)
head -1 /root/vault-keys.txt | cut -d: -f2 | tr -d ' ' > /etc/vault.d/unseal-key.txt
# Déverrouiller avec 3 clés
vault operator unseal <key1>
vault operator unseal <key2>
vault operator unseal <key3>
4. Configuration des secrets
export VAULT_ADDR=https://127.0.0.1:8200
vault login <root_token>
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/traefik ovh-application-key=... ovh-application-secret=...
vault token create -policy=default -ttl=720h -display-name=gitlab-pipeline
5. 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
Pour aller plus loin
- Phase 2 — OpenTofu — provisioning de toutes les VMs
- Phase 4.2 — Traefik — reverse proxy, Let's Encrypt, CrowdSec
- Playbooks Ansible — dans
ansible/du dépôt