Aller au contenu
Virtualisation medium

RBAC Proxmox VE : comprendre les permissions et faire les bons choix

16 min de lecture

Logo Proxmox

Qui peut faire quoi sur votre cluster Proxmox ? Cette question devient critique dès que vous n’êtes plus seul à utiliser le serveur — ou dès que vous automatisez avec des scripts. Ce guide vous donne les modèles mentaux pour comprendre comment Proxmox gère les permissions, puis les critères pour concevoir une stratégie adaptée à votre situation.

Avant de créer des utilisateurs ou d’attribuer des permissions, vous devez comprendre comment Proxmox décide si une action est autorisée. Sans ce modèle mental, vous allez soit tout autoriser (risqué), soit vous retrouver bloqué.

Chaque autorisation dans Proxmox combine 3 éléments :

Autorisation = Sujet × Rôle × Path
ÉlémentQuestionExemples
SujetQui demande ?alice@pve, @devs, backup-token
RôleQuelles actions peut-il faire ?PVEVMUser, PVEAdmin, PVEAuditor
PathSur quoi peut-il agir ?/pool/dev, /vms/100, /storage/backup

La phrase clé : un utilisateur alice@pve ayant le rôle PVEVMUser sur le path /pool/dev peut démarrer/arrêter les VM du pool dev, mais rien d’autre.

Modèle RBAC Proxmox : Sujet + Rôle + Path = ACL

Cette architecture à 3 dimensions a des conséquences pratiques :

  • Un même utilisateur peut avoir plusieurs rôles sur différents paths
  • Un même rôle peut être attribué à plusieurs sujets
  • Les permissions se cumulent (pas d’override négatif)
  • L’héritage descend le long des paths (attention au /)

Proxmox organise les permissions autour de 4 types d’objets. Comprendre chacun vous permet de concevoir une stratégie efficace.

Un sujet est qui demande l’accès. Proxmox distingue 3 types :

TypeFormatCas d’usage
Utilisateuralice@realmAccès humain via l’interface ou l’API
Groupe@devsRegrouper des utilisateurs qui ont les mêmes droits
API Tokenalice@pve!backupAutomatisation (scripts, Ansible, Terraform)

Les realms : le suffixe après @ indique comment l’utilisateur s’authentifie :

RealmSignificationCas d’usage
@pamCompte Linux localroot, comptes système
@pveCompte Proxmox natifUtilisateurs créés dans Proxmox
@ldap / @adAnnuaire externeEntreprise avec Active Directory

Point clé : root@pam est le super-utilisateur Linux. Il a tous les droits quoi qu’il arrive — les ACL Proxmox ne le limitent pas. C’est normal, mais c’est aussi pourquoi vous ne devez pas l’utiliser pour tout.

Un rôle est un paquet de privilèges (permissions atomiques). Proxmox fournit des rôles prédéfinis :

RôleCe qu’il permetCas d’usage
NoAccessRien (bloque l’héritage)Interdire explicitement
PVEAuditorLecture seuleMonitoring, audit, supervision
PVEVMUserConsole VM, démarrer/arrêterOpérateurs quotidiens
PVEVMAdminCréer/supprimer/configurer VMAdministrateurs VM
PVEAdminTout sauf infra (stockage, réseau)Administrateurs applicatifs
AdministratorToutSuper-admin (à éviter sur /)

Chaque rôle est composé de privilèges. Vous n’attribuez jamais un privilège directement — vous passez toujours par un rôle. Mais comprendre les privilèges aide à choisir le bon rôle.

Quelques privilèges importants :

PrivilègeCe qu’il permet
VM.PowerMgmtDémarrer, arrêter, redémarrer
VM.ConsoleAccéder à la console (VNC/SPICE)
VM.Config.*Modifier la configuration VM
VM.AllocateCréer/supprimer des VM
Datastore.AllocateCréer/supprimer sur un stockage
Sys.AuditVoir la configuration système
Sys.ModifyModifier la configuration système

Point clé : VM.Console donne accès à ce qui s’affiche dans la VM. Si quelqu’un y est connecté en root, vous voyez (et pouvez agir sur) sa session. C’est un accès puissant.

Un path désigne s’applique une permission. Proxmox organise tous les objets en arborescence :

/ ← Racine (tout Proxmox)
├── /access ← Gestion des users/groupes/ACL
├── /nodes ← Serveurs physiques
│ └── /nodes/pve1 ← Un serveur spécifique
├── /vms ← Toutes les VM (par VMID)
│ └── /vms/100 ← VM n°100
├── /storage ← Stockages
│ └── /storage/local ← Un stockage spécifique
└── /pool ← Pools de ressources
└── /pool/dev ← Pool "dev"

L’héritage : une permission sur un path s’applique à tous les chemins en dessous.

Permission sur…S’applique à…
/Tout Proxmox (danger !)
/nodesTous les serveurs
/nodes/pve1Un seul serveur
/pool/devToutes les VM du pool dev
/vms/100Une seule VM

Un pool est un conteneur logique qui regroupe plusieurs VM/conteneurs. C’est l’unité idéale pour attribuer des permissions.

ApprocheProblèmeSolution
Permissions par VMMaintenance pénible : ajouter/retirer chaque VMUtiliser des pools
Permissions par nodeTrop large : donne accès à toutes les VM du serveurUtiliser des pools
Permissions par pool✅ Ajouter une VM au pool = elle hérite automatiquementApproche recommandée

Exemple concret :

  1. Créer le pool dev
  2. Attribuer PVEVMUser au groupe @devs sur /pool/dev
  3. Ajouter les VM de dev dans le pool
  4. → Les développeurs peuvent gérer ces VM, rien d’autre

Comprendre le flux d’une demande d’accès aide à débugger les problèmes de permissions.

Quand un utilisateur tente une action, Proxmox suit cette logique :

  1. Identifier le sujet : qui demande ? (user, group, token)
  2. Identifier l’objet : sur quoi ? (VM, storage, node…)
  3. Calculer le path : quel est le chemin de l’objet ?
  4. Chercher les ACL : quelles ACL s’appliquent à ce sujet sur ce path ou ses parents ?
  5. Vérifier les privilèges : les rôles trouvés contiennent-ils le privilège requis ?
  6. Décision : si oui → autorisé ; si non → refusé
SituationCe qui se passe
ACL sur /pool/dev + VM dans le pool✅ L’utilisateur peut agir sur la VM
ACL sur /pool/dev + VM hors du pool❌ Pas d’accès (même si l’ACL existe)
ACL sur /vms/100 uniquement✅ Accès à VM 100 seulement
Aucune ACL trouvée❌ Refus par défaut

Point clé : Proxmox refuse par défaut. Si aucune ACL n’accorde le privilège, l’action est interdite.

Plutôt que de créer des permissions au cas par cas, partez de profils métier et adaptez.

Besoin : voir l’état du cluster sans pouvoir modifier quoi que ce soit.

ÉlémentValeur
RôlePVEAuditor
Path/ (tout voir) ou /pool/X (périmètre limité)
UsageMonitoring, revue de conformité, support N1

Ce qu’il peut faire : voir les configurations, consulter les logs, regarder les métriques.

Ce qu’il ne peut pas faire : démarrer/arrêter des VM, modifier des configs, supprimer quoi que ce soit.

Besoin : gérer les VM au quotidien (démarrer, arrêter, console) sans pouvoir en créer ou les supprimer.

ÉlémentValeur
RôlePVEVMUser
Path/pool/X (recommandé) ou /vms/Y (VM spécifique)
UsageÉquipe applicative, support N2, développeurs

Ce qu’il peut faire : démarrer/arrêter, accéder à la console, voir la configuration.

Ce qu’il ne peut pas faire : créer des VM, modifier la configuration matérielle, supprimer.

Besoin : gérer l’infrastructure (stockage, réseau, cluster) mais pas forcément les VM applicatives.

ÉlémentValeur
RôlePVEAdmin ou rôle custom
Path/nodes, /storage
UsageÉquipe infrastructure, SRE

Ce qu’il peut faire : configurer le réseau, gérer les stockages, administrer les nœuds.

Ce qu’il ne peut pas faire : accéder aux VM d’un autre pool (si séparation par pool).

Besoin : scripts, Ansible, Terraform qui doivent interagir avec l’API Proxmox.

ÉlémentValeur
TypeAPI Token (pas un utilisateur)
RôleLe minimum nécessaire à la tâche
PathLe plus restreint possible

Exemples :

AutomatisationRôlePath
Backup automatiquePVEDatastoreUser/storage/backup
Provisionning TerraformPVEVMAdmin/pool/terraform
MonitoringPVEAuditor/

Symptôme : un utilisateur a accès à tout alors qu’il ne devrait pas.

Cause : permission accordée sur / au lieu du path spécifique.

Solution : toujours utiliser le path complet (/pool/dev, pas /).

Symptôme : impossible de donner accès à un sous-ensemble de VM.

Cause : permissions sur /nodes/pve1 (trop large) au lieu de /pool/X.

Solution : utiliser les pools pour regrouper les ressources par usage.

Symptôme : un token de backup peut créer des VM.

Cause : rôle trop permissif ou path trop large.

Solution : un token = une tâche = le rôle minimum.

Symptôme : l’utilisateur ne peut pas se connecter ou a des droits différents de ceux attendus.

Cause : confusion entre alice@pam, alice@pve, alice@ldap.

Solution : chaque realm est indépendant. alice@pve n’est pas alice@pam.

Symptôme : quelqu’un peut restaurer une VM de prod qu’il ne devrait pas voir.

Cause : accès au stockage de backup sans réflexion sur ce qu’il contient.

Solution : les backups contiennent les données des VM. Limitez l’accès en lecture/restore.

Symptôme : un utilisateur “lecture seule” peut quand même agir sur une VM.

Cause : accès console permet de voir (et utiliser) les sessions ouvertes dans la VM.

Solution : VM.Console est un privilège sensible. Ne le donnez pas à l’audit.

La structure la plus maintenable :

PoolContenuGroupe(s)Rôle(s)
prodVM de production@opsPVEVMUser
preprodVM de préproduction@ops, @devsPVEVMUser
devVM de développement@devsPVEVMAdmin
infraVM d’infrastructure@adminsPVEAdmin

Pourquoi ça fonctionne :

  • Ajouter une VM au bon pool = permissions automatiques
  • Changer les droits d’une équipe = modifier une seule ACL
  • Audit clair : qui a accès à quoi
AutomatisationTokenRôlePath
Backups PBSbackup-bot@pve!pbsPVEDatastoreUser/storage/pbs
Terraform devterraform@pve!devPVEVMAdmin/pool/dev
Monitoringmonitoring@pve!zabbixPVEAuditor/

Tous les trimestres :

  1. Lister les ACL actives : des permissions obsolètes ?
  2. Vérifier les tokens : utilisés ? à rotation ?
  3. Valider les groupes : membres à jour ?

Sans entrer dans les procédures de création, voici comment lire l’état de votre RBAC :

Fenêtre de terminal
# Lister tous les utilisateurs
pveum user list
# Lister les groupes
pveum group list
# Lister les rôles disponibles
pveum role list
# Voir les ACL (qui a quoi où)
pveum acl list
# Voir les tokens d'un utilisateur
pveum user token list alice@pve
# Voir les privilèges d'un rôle
pveum role list PVEVMUser --output json

Ces commandes sont de la lecture, pas de la modification.

  1. Autorisation = Sujet × Rôle × Path : comprendre cette formule évite 90% des erreurs de permissions.

  2. Le slash / est dangereux : une permission sur / se propage partout. Utilisez les paths complets.

  3. Les pools simplifient tout : regroupez les VM par usage et attribuez les permissions sur les pools, pas sur les VM individuelles.

  4. Un token = une tâche : pour l’automatisation, créez un token dédié avec le minimum de droits.

  5. root@pam bypass tout : le compte root Linux n’est pas limité par les ACL Proxmox. Utilisez-le uniquement pour l’urgence.

  6. Console = accès sensible : VM.Console permet de voir et utiliser les sessions ouvertes. Ne le donnez pas aux auditeurs.

  7. Les backups contiennent les données : l’accès au stockage backup = accès aux données des VM. Limitez-le.

  8. Revue trimestrielle : permissions, tokens, groupes. Les droits s’accumulent si on ne nettoie pas.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.