Aller au contenu

Raccorder PVE à PBS, chiffrement côté client, gestion des clés

Day 1 · DéployerNiveau 2 · OpérerProcédureRédigé · à valider en lab

Objectif : déclarer le datastore pbs01 comme stockage pbs-local dans le cluster PVE avec un jeton API dédié, activer si besoin le chiffrement côté client, et séquestrer la clé de façon à pouvoir restaurer même si tout le cluster a disparu. Une sauvegarde chiffrée dont la clé est perdue est définitivement irrécupérable, y compris par le MSP et par Proxmox.

Chiffrer ou non ?

Situation Recommandation
PBS local sur réseau de confiance, copie MSP sur un datastore dédié au client Chiffrement facultatif ; restauration plus simple sans clé
Exigence contractuelle ou réglementaire de confidentialité vis-à-vis de l'hébergeur de la copie Chiffrement côté client + master key RSA + paperkey séquestrée
Plusieurs clusters vers le même datastore Une clé différente casse la déduplication entre eux : un namespace ou un datastore par clé

Le chiffrement est en AES-256-GCM, réalisé sur le nœud PVE avant l'envoi : le PBS ne voit jamais les données en clair. PVE n'accepte que des clés sans mot de passe (KDF none), stockées dans /etc/pve/priv/storage/<ID>.enc (lisible par root uniquement).

Avant de toucher la prod

  • PBS installé et datastore pbs01 créé (procédure).
  • Empreinte du certificat PBS relevée (Dashboard → Show Fingerprint).
  • Décision chiffrement oui / non validée et consignée dans le dossier d'exploitation.
  • Si chiffrement : coffre-fort de mots de passe et lieu de séquestre papier identifiés hors du cluster.
  • Port TCP 8007 ouvert des nœuds pve01 à pve03 vers le PBS.

Étapes

1. Créer un compte de service et un jeton côté PBS

  1. Configuration → Access Control → User Management → Add : utilisateur pve-backup, realm pbs, mot de passe long.
  2. Onglet API Token → Add : utilisateur pve-backup@pbs, Token Name pve-cluster. Copier le secret affiché : il ne sera plus jamais visible.
  3. Datastore → pbs01 → Permissions → Add → API Token Permission : chemin /datastore/pbs01, jeton pve-backup@pbs!pve-cluster, rôle DatastoreBackup. Ajouter la même permission pour l'utilisateur pve-backup@pbs (les droits d'un jeton sont l'intersection avec ceux de son utilisateur).
proxmox-backup-manager user create pve-backup@pbs --password 'xxxxxxxx'
proxmox-backup-manager user generate-token pve-backup@pbs pve-cluster   # noter "value"
proxmox-backup-manager acl update /datastore/pbs01 DatastoreBackup --auth-id 'pve-backup@pbs'
proxmox-backup-manager acl update /datastore/pbs01 DatastoreBackup --auth-id 'pve-backup@pbs!pve-cluster'

DatastoreBackup permet de sauvegarder et de restaurer ses propres sauvegardes, pas de les supprimer. La rétention est confiée aux prune jobs du PBS (rétention). Si vous tenez à gérer la rétention depuis PVE, il faut le rôle DatastorePowerUser.

2. Déclarer le stockage dans PVE

  1. Datacenter → Storage → Add → Proxmox Backup Server.
  2. Onglet General : ID pbs-local, Server pbs01.client.lan, Username pve-backup@pbs!pve-cluster, Password = secret du jeton, Datastore pbs01, Namespace vide (ou celui du cluster), Fingerprint.
  3. Onglet Backup Retention : cocher Keep all backups (la rétention est faite par le PBS).
  4. Onglet Encryption (si retenu) : Auto-generate a client encryption key. PVE affiche la clé : la télécharger et l'imprimer immédiatement.
pvesm add pbs pbs-local --server pbs01.client.lan --datastore pbs01 \
  --username 'pve-backup@pbs!pve-cluster' --password \
  --fingerprint 'AB:CD:…:EF' --prune-backups keep-all=1 \
  --encryption-key autogen          # omettre si pas de chiffrement
pvesm status --storage pbs-local

3. Séquestrer la clé (si chiffrement)

# version papier (QR code + texte) de la clé du stockage
proxmox-backup-client key paperkey /etc/pve/priv/storage/pbs-local.enc --output-format text > pbs-local-paperkey.txt

# master key RSA : à générer sur un poste hors cluster, la clé privée ne vient jamais sur PVE
proxmox-backup-client key create-master-key      # produit master-public.pem et master-private.pem
pvesm set pbs-local --master-pubkey "$(base64 -w0 master-public.pem)"
  • Imprimer la paperkey en deux exemplaires : coffre client et séquestre convenu avec le MSP.
  • Conserver master-private.pem et son mot de passe hors ligne. Avec la master key, chaque sauvegarde embarque une copie de la clé AES chiffrée en RSA : la clé se récupère avec proxmox-backup-client key import-with-master-key.
  • Supprimer pbs-local-paperkey.txt du nœud après impression.

Vérifications

pvesm status --storage pbs-local    # pbs-local  pbs  active
vzdump 101 --storage pbs-local --mode snapshot

Dans PBS, Datastore → pbs01 → Content : le groupe vm/101 apparaît ; colonne Encrypted à Yes si le chiffrement est actif. Testez immédiatement un File Restore (RB-13).

Rollback

Retirer le stockage (Datacenter → Storage → Remove) n'efface aucune sauvegarde. Changer de clé : les anciennes sauvegardes exigent toujours l'ancienne clé, à conserver jusqu'à expiration de la rétention (locale et MSP). Désactiver le chiffrement ne déchiffre pas l'existant.

Pièges vus en support

  • Clé générée par autogen jamais exportée : elle n'existe que dans /etc/pve/priv/storage/, donc perdue avec le cluster.
  • Clé régénérée par erreur (autogen relancé) : les sauvegardes suivantes utilisent une nouvelle clé, la première sauvegarde est complète et la déduplication repart de zéro.
  • Utilisateur root@pam du PBS saisi dans PVE : mot de passe root du PBS en clair dans la configuration du cluster. Utiliser un jeton dédié.
  • Empreinte non mise à jour après renouvellement du certificat PBS : tous les jobs échouent (RB-14).
  • Jeton créé sans ACL propre : il n'a aucun droit par défaut, l'ajout du stockage échoue en permission check failed.

Quand ouvrir un ticket iTop

Mise en place du chiffrement et du séquestre de clé avec le MSP : demande de service P4. Sauvegardes chiffrées et clé introuvable : P1, sans attendre. Joindre pvesm status, la configuration du stockage (/etc/pve/storage.cfg, sans secret) et l'empreinte de la clé (Encryption → Fingerprint).

Ouvrir un ticket iTop

Pour aller plus loin