Skip to content

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