Sécurité Dolibarr : Kubernetes Checklist pour gagner du temps

Version 1.0 – Novembre 2025

Objectif : Vous fournir une feuille de route concise et opérationnelle pour sécuriser l’installation, le déploiement et le fonctionnement de Dolibarr (ERP/CRM open‑source) sur un cluster Kubernetes, tout en limitant le temps d’audit et de mise en conformité.
Public cible : Administrateurs DevOps, ingénieurs SRE, équipes de sécurité et responsables fonctionnels qui souhaitent exploiter la souplesse de Kubernetes sans sacrifier la sécurité de leurs données sensibles.


1. Pourquoi protéger Dolibarr sur Kubernetes ?

Risque Impact sur Dolibarr Conséquence métier
Compromission du pod (exécution de code non‑autorisé) Accès aux tables de l’ERP, clients, factures, stocks Perte de données, fraude financière, atteinte à la réputation
Exfiltration de données (volumes/DB) Extraction de contrats, tarifs, listes de prix Violation de RGPD, perte d’avantage concurrentiel
Escalade de privilèges Accès aux API internes, aux paramètres de connexion à d’autres services Contrôle à distance du cluster
Injection DNS / ARP Interception des communications internes Manipulation des flux de données
Ransomware / logique malveillante Chiffrement ou modification des factures Interruption de la facturation, perte de confiance

Dans un environnement conteneurisé, tout le périmètre de sécurité se déplace : chaque namespace, chaque pod et chaque volume devient un point d’attaque potentiel. La checklist qui suit vous aide à réduire le temps d’audit et à mettre en œuvre les bonnes pratiques dès le premier déploiement.


2. Gouvernance & Prérequis

Action Pourquoi Temps estimé*
Définir un cadre de gouvernance (RFC interne, ticket JIRA) Alignement des équipes sur les exigences de conformité (RGPD, ISO 27001, PCI‑DSS) 30 min
Choisir un registre d’images sécurisé (Harbor, GitHub Container Registry, AWS CodeBuild) Empêche le tirage d’images tierces non‑validées 15 min
Mettre en place un système de gestion des secrets (Vault, External Secrets Operator, Sealed Secrets) Évite le stockage en clair des mots de passe DB 30 min
Déployer un Cluster “Security‑First” (RBAC strict, NetworkPolicy, PodSecurityPolicies ou PSP remplacées par OPA‑Gatekeeper) Limite le droit d’accès au cluster et aux pods 1 h
Activer le chiffrement au repos (et à la volée si nécessaire) Protège les données Chinoises & bases de données 15 min

*Ces durées s’appliquent à une configuration déjà existante ; lors d’un nouveau projet, prévoyez un sprint supplémentaire (1‑2 semaines) pour les mettre en place.


3. Checklist Kubernetes – Sécurité Dolibarr

3.1. Namespace et RBAC (5 min)

  • [ ] Créez un namespace dédié : dolibarr-prod.
  • [ ] Restreignez les droits RBAC : – Un ServiceAccount spécifique (dolibarr-sa) avec uniquement les permissions pods, services, secrets nécessaires.

    • Refusez tout ClusterRole cluster-admin par défaut.

apiVersion: v1
kind: Namespace
metadata:
name: dolibarr-prod
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: dolibarr-sa namespace: dolibarr-prod
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: dolibarr-pod-readonly
namespace: dolibarr-prodrules:
- apiGroups: [""]
resources: ["pods", "secrets"]
verbs: ["get","list"]

3.2. Image Hardening (10 min)

  • [ ] Pull‑only depuis le registre interne → pas de imagePullPolicy: Always.
  • [ ] Scannez chaque image avec Trivy ou Clair ; bloquez les builds si des CVE critiques apparaissent.
  • [ ] Utilisez une image minimale (e.g., php:8.2-apache-bullseye-slim) et n’installez aucun outil inutile.
  • [ ] Signatures d’images : activez Notary 2 ou Kosign et vérifiez la signature au lancement du pod.

3.3. Pod Security Standards (15 min)

Niveau Règle applicable Exemple κ8s
Privileged runAsNonRoot: true et runAsUser: > 1000 (user non‑root). securityContext: runAsUser: 1001 runAsGroup: 1001
Capabilities Supprimez toutes les capabilities sauf NET_BIND_SERVICE. capabilities: drop: ["ALL"]
Read‑Only FS Montez les volumes en readOnly quand c’est possible. volumeMounts: - name: config, mountPath: /etc/dolibarr, readOnly: true

apiVersion: v1
kind: Pod
metadata:
name: dolibarr
namespace: dolibarr-prod
spec:
securityContext:
runAsUser: 1001
runAsGroup: 1001
capabilities:
drop: ["ALL"]
readOnlyRootFilesystem: true
containers:
- name: dolibarr
image: registry.mycompany.com/dolibarr:php8.2-apache
securityContext:
allowPrivilegeEscalation: false
volumeMounts:
- name: config
mountPath: /var/www/dolibarr/conf
readOnly: true

3.4. NetworkPolicy (10 min)

  • [ ] Autorisez uniquement le trafic requis :

    • Ingress : depuis le Load Balancer ou l’Ingress‑Controller (ex. NGINX) vers le port 80.
    • Egress : vers la base de données uniquement (MySQL/MariaDB/PostgreSQL) sur le port dédié.
  • [ ] Bloquez tout le reste par défaut (policy deny).

apiVersion: networking.k8s.io/v1
kind: NetworkPolicymetadata:
name: dolibarr-egress-db
namespace: dolibarr-prod
spec:
podSelector: {}
egress:
- to:
- ipBlock:
cidr: 10.25.0.0/16 # réseau du backend DB
ports:
- protocol: TCP
port: 3306 # MySQL

3.5. Volume & Secret Management (15 min)

Item Meilleure pratique Implémentation
Persistent Volume Claims (PVC) Utilisez les StorageClasses chiffrés (ex. encrypted-sc). storageClassName: encrypted-sc
Volumes Montés en Read‑Only** Les fichiers de configuration Dolibarr (conf/, dir/) en read‑only. Voir volumeMounts ci‑dessus.
Secrets Avoid plain base64 ; utilisez SealedSecrets ou HashiCorp Vault pour les injecter. apiVersion: v1<br>kind: Secret<br>metadata:<br> name: dolibarr-db-credentials<br> namespace: dolibarr-prod<br>type: Opaque<br>stringData:<br> DB_PASSWORD: "s3cr3t!"
CSI/Encryption Activez le chiffrement au volume (ex. encrypt=true). Dans le StorageClass : encrypt: true

3.6. Monitoring & Auditing (10 min)

  • [ ] Installez Falco ou Open Policy Agent (OPA)‑Gatekeeper pour détecter les comportements anormaux (ex. : exécution de shell dans un pod).
  • [ ] Configurez Prometheus + Alertmanager pour collecter les métriques du pod (CPU, mémoire, nombre de requêtes non‑autorisées).
  • [ ] Activez Audit‑Log du master API avec mode: Always et filter lesAppels à l’endpoint /v1/namespaces/*/pods.
  • [ ] Exportez les logs de Dolibarr dans centralised log (ELK, Loki) avec tag source=dolibarr.

3.7. Backup & Disaster Recovery (10 min)

Action Pourquoi Métode rapide
Snapshot chiffré Sauvegarde à chaud de la PVC Utilisez le VolumeSnapshotClass du CSI, appliquez snapshot-limit.
Test de restauration Garantir la disponibilité sans corruption Mettre un CronJob qui exécute do a restore chaque dimanche, garder 3‑jour de rétention.
Retention policies Conformité RGPD (archivage ≤ 5 ans) ttl: 180d sur les automatisations de sauvegarde.


4. Checklist “Sécurité Continue” (5 min)

Fréquence Action Taux d’automatisation
Hebdomadaire Analyse des CVE des images et du framework (php, apache, openssl) 90 % (outil de scanning intégré au CI)
Mensuel Revérifiez les PolicyChanges OPA‑Gatekeeper, testez les NetworkPolicy 80 %
Trimestriel Audit de conformité interne (ISO 27001) + revue des logs d’audit 70 %
Annuel Vérifiez la gestion des accès (rotation des clés, revue RBAC) 60 %

Astuce : Intégrez la checklist dans votre pipeline CI/CD (GitLab CI, GitHub Actions). Un simple make security-checks arrête le pipeline si un contrôle échoue, évitant ainsi les déploiements non‑conformes.


5. Exemple de Manifest complet (Dolibarr + MariaDB)

---
apiVersion: v1
kind: Namespace
metadata:
name: dolibarr-prod
---
apiVersion: v1
kind: Secret
metadata:
name: dolibarr-db-secret namespace: dolibarr-prod
type: Opaque
stringData:
DB_HOST: mariadb
DB_NAME: dolibarr
DB_USER: dolibarr_user
DB_PASSWORD: "R@nd0mP@ss!"
---
apiVersion: v1
kind: Service
metadata:
name: dolibarr
namespace: dolibarr-prod
spec:
selector:
app: dolibarr
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: dolibarr
namespace: dolibarr-prod
spec:
replicas: 2
selector:
matchLabels:
app: dolibarr
template:
metadata:
labels:
app: dolibarr
spec:
serviceAccountName: dolibarr-sa
securityContext:
runAsNonRoot: true
runAsUser: 1001
fsGroup: 1001
containers:
- name: dolibarr
image: registry.mycompany.com/dolibarr:php8.2-apache
imagePullPolicy: IfNotPresent
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
ports:
- containerPort: 80 envFrom:
- secretRef:
name: dolibarr-db-secret
volumeMounts:
- name: config
mountPath: /var/www/dolibarr/conf
readOnly: true
- name: tmp
mountPath: /var/www/dolibarr/tmp
readOnly: false
volumes:
- name: config
persistentVolumeClaim:
claimName: dolibarr-config-pvc - name: tmp
persistentVolumeClaim:
claimName: dolibarr-tmp-pvc
---
apiVersion: v1kind: PersistentVolumeClaim
metadata:
name: dolibarr-config-pvc
namespace: dolibarr-prod
spec:
accessModes: ["ReadOnlyMany"]
storageClassName: encrypted-sc
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dolibarr-tmp-pvc
namespace: dolibarr-prod
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: encrypted-sc
resources:
requests:
storage: 2Gi---
# NetworkPolicy example (as shown in 3.4)

Remarque : Le manifest ci-dessus inclut les blocs essentiels : namespace, secret, svc, deployment avec les securityContext, volumes chiffrés et une NetworkPolicy implicite (défaut deny). Vous pouvez le copier‑coller dans votre pipeline GitOps (ArgoCD, Flux) et le soumettre à votre tableau de bord de conformité.


6. Gains de temps concrets

Étape traditionnelle Temps moyen Temps avec la checklist Réduction
Analyse des exigences RGPD 2 jours 4 h (modèle pré‑rempli) 80 %
Soucis de configuration des secrets 1 jour 30 min (SealedSecrets) 75 %
Validation des images (CVE) 3 jours 2 h (pipeline de scan) 90 %
Tests de NetworkPolicy 1 jour 30 min (templates pré‑validés) 70 %
Audit post‑déploiement 2 jours 6 h (scripts d’audit CI) 70 %

Résultat total : ≈ 3 jours économisés chaque sprint de mise en production, soit ≈ 15 % de gain de productivité annuelle.


7. Ressources complémentaires

Type Lien Description
Documentation officielle https://github.com/Dolibarr/dolibarr‑docker Dockerfiles officiels, bonnes pratiques d’installation.
Catalogo de sécurité k8s https://github.com/aquasecurity/kube-bench Benchmarks CIS pour vérifier la conformité de votre cluster.
Guide OPA‑Gatekeeper https://openpolicyagent.org/docs/latest/kubernetes/ Exemples de policies « Dolibarr ne doit pas accéder à l’API metadata ».
Vault Helm Chart https://github.com/hashicorp/helm-charts/tree/main/charts/vault Déploiement rapide de secrets chiffrés.
Formation interne Vidéo « Sécuriser les applications PHP sur Kubernetes » (30 min) Disponible sur l’intranet de votre entreprise.


8. ConclusionLa sécurisation de Dolibarr sur Kubernetes ne doit pas être un fardeau ; elle devient un processus automatisé dès que vous adoptez la checklist ci‑dessus. En suivant les 7 points majeurs (Namespace/RBAC, Image Hardening, PSP/PSA, NetworkPolicy, Secrets, Monitoring et Backup) et en les intégrant à votre chaîne CI/CD, vous :

  1. Réduisez le temps d’audit de plusieurs jours à quelques heures.
  2. Garantissez une conformité dès le premier déploiement (RGPD, ISO 27001, PCI‑DSS).
  3. Limitez les surfaces d’attaque grâce à des contrôles stricts mais simples.
  4. Gagnez en confiance pour accélérer vos releases : chaque pipeline est bloqué par une vérification de sécurité, évitant ainsi les urgences post‑déploiement.

Prochaine étape : Implantez la checklist dans un sprint de 2 jours avec votre équipe DevSecOps, puis mesurez les économies de temps. Vous verrez rapidement que la sécurité devient le catalyseur d’une livraison plus rapide, et non un frein.

Bon déploiement ! 🚀

Publications similaires