Confidentialite¶
Appliquer les politiques de sécurité adaptées a la classification Interne — avec des options pour les documents Confidentiel et Restreint.
Classification applicable¶
Cette rubrique releve du perimetre Services d'entreprise, zone Interne (🔵). Consultez le cadre de classification pour les définitions complètes des niveaux.
| Niveau | Outils concernes | Mesures spécifiques |
|---|---|---|
| Interne | Nextcloud, Mattermost | SSO, TLS, journalisation |
| Confidentiel | Nextcloud (dossiers restreints) | RBAC strict, chiffrement server-side, audit |
| Restreint | CryptPad | E2E, accès nominatif, traces d'accès |
Politiques de partage de fichiers¶
Partage interne¶
Par defaut, les fichiers sont partageables uniquement entre membres de l'organisation authentifies via Keycloak.
| Regle | Configuration |
|---|---|
| Partage limite aux membres du groupe | shareapi_only_share_with_group_members = yes |
| Pas de lien public sans mot de passe | shareapi_enforce_links_password = yes |
| Expiration automatique des liens | shareapi_default_expire_date = yes (7 jours) |
| Re-partage interdit | shareapi_allow_resharing = no |
Partage externe¶
Le partage avec des personnes extérieures a l'organisation est desactive par defaut. L'activation requiert :
- Demande formelle au responsable du perimetre
- Validation de la classification du contenu (pas de Confidentiel ni Restreint)
- Configuration d'un lien protège par mot de passe avec expiration
# Activer/desactiver le partage externe globalement
podman exec -u www-data nextcloud php occ config:app:set core \
shareapi_allow_links --value="yes"
# Limiter le partage externe a certains groupes
podman exec -u www-data nextcloud php occ config:app:set core \
shareapi_allow_share_dialog_user_enumeration --value="no"
Chiffrement¶
Chiffrement en transit¶
Toutes les communications sont chiffrees via TLS 1.3 au niveau du reverse proxy. Aucune exception.
| Flux | Protocole | Certificat |
|---|---|---|
| Client → Reverse proxy | TLS 1.3 | Let's Encrypt / ACME |
| Reverse proxy → Backend | HTTP | Réseau interne isole |
| Backend → PostgreSQL | TLS | Certificat interne |
| Backend → MinIO | TLS | Certificat interne |
Chiffrement au repos (server-side)¶
Nextcloud propose un chiffrement server-side qui chiffre les fichiers sur le disque. Le serveur detient les cles — ce n'est pas du E2E.
# Activer le module de chiffrement
podman exec -u www-data nextcloud php occ app:enable encryption
podman exec -u www-data nextcloud php occ encryption:enable
# Chiffrer les fichiers existants
podman exec -u www-data nextcloud php occ encryption:encrypt-all
Impact sur les performances
Le chiffrement server-side ajoute 10-30 % d'overhead CPU sur les opérations de lecture/écriture. Activez-le uniquement si le backend de stockage n'est pas déjà chiffre (par exemple, MinIO avec SSE n'a pas besoin du chiffrement Nextcloud en plus).
Chiffrement bout en bout (E2E)¶
Pour les documents classifies Confidentiel ou Restreint, le chiffrement server-side ne suffit pas — le serveur a accès aux cles.
Option 1 : Nextcloud E2E (experimental)
L'utilisateur active le chiffrement E2E sur un dossier spécifique. Les fichiers sont chiffres côté client avant l'upload. Le serveur ne peut pas les dechiffrer.
Limitations E2E Nextcloud
- Pas de co-edition des fichiers chiffres E2E
- Pas de previsualisation côté serveur
- La perte de la cle prive utilisateur = perte des fichiers
- Fonctionnalité experimentale — ne pas utiliser pour des données critiques sans backup
Option 2 : CryptPad (recommande pour Confidentiel/Restreint)
CryptPad chiffre tous les documents côté client par conception. C'est la solution recommandee pour les documents sensibles. Voir Comparaison pour les details.
RBAC — Contrôle d'accès par rôles¶
Groupes Nextcloud synchronises depuis Keycloak¶
Les groupes definis dans Keycloak sont automatiquement repliques dans Nextcloud via le mapping OIDC :
| Groupe Keycloak | Groupe Nextcloud | Permissions |
|---|---|---|
dsi-admin | admin | Administration complète |
dsi-dev | developers | Accès aux dossiers projet, partage interne |
dsi-ops | operations | Accès aux dossiers infra, documentation ops |
dsi-management | management | Accès aux dossiers RH, financier (Confidentiel) |
external-partners | external | Accès limite aux dossiers partages explicitement |
Dossiers de groupe¶
Nextcloud Group Folders permet de créer des dossiers partages par groupe avec des permissions granulaires :
podman exec -u www-data nextcloud php occ app:install groupfolders
# Creer un dossier de groupe
podman exec -u www-data nextcloud php occ groupfolders:create "Projets"
# Attribuer le dossier a un groupe avec permissions
podman exec -u www-data nextcloud php occ groupfolders:group 1 developers write
podman exec -u www-data nextcloud php occ groupfolders:group 1 operations read
Rôles Mattermost¶
| Rôle Mattermost | Équivalent Keycloak | Permissions |
|---|---|---|
| System Admin | dsi-admin | Gestion complète de l'instance |
| Team Admin | dsi-lead | Gestion des canaux et membres de l'équipe |
| Channel Admin | (par canal) | Gestion d'un canal spécifique |
| Member | dsi-* | Envoyer des messages, créer des canaux publics |
| Guest | external-partners | Accès a des canaux spécifiques uniquement |
Audit et journalisation¶
Nextcloud Audit Log¶
L'application admin_audit enregistre tous les événements de sécurité :
Événements traces :
| Événement | Detail enregistre |
|---|---|
| Connexion | Utilisateur, IP, user-agent, succès/echec |
| Accès fichier | Utilisateur, chemin, action (lecture/écriture) |
| Partage cree | Créateur, destinataire, type, expiration |
| Partage supprime | Créateur, destinataire, raison |
| Modification mot de passe | Utilisateur, timestamp |
| Suppression fichier | Utilisateur, chemin, timestamp |
Les logs sont écrits dans /var/www/html/data/audit.log au format JSON :
{
"reqId": "abc123",
"level": 1,
"time": "2026-04-16T10:30:00+0200",
"app": "admin_audit",
"message": "File accessed: \"/Documents/rapport-q1.pdf\" (read)",
"userAgent": "Mozilla/5.0...",
"user": "alice",
"ip": "10.0.1.42"
}
Centralisation des logs
Exportez les logs d'audit vers votre stack d'observabilité (Loki, Elasticsearch) pour la correlation avec les événements système et réseau.
Mattermost Compliance¶
Les logs de compliance enregistrent les messages, les modifications et les suppressions :
# Activer le compliance export
MM_COMPLIANCESETTINGS_ENABLE=true
MM_COMPLIANCESETTINGS_DIRECTORY=./data/compliance
Politiques de retention¶
| Type de données | Duree de retention | Action a expiration |
|---|---|---|
| Fichiers utilisateur | Illimitée | Nettoyage par l'utilisateur |
| Fichiers corbeille | 30 jours | Suppression automatique |
| Versions de fichiers | 90 jours | Suppression automatique |
| Messages Mattermost | 365 jours | Archivage ou suppression |
| Fichiers joints (chat) | 365 jours | Suppression avec le message |
| Logs d'audit | 730 jours (2 ans) | Archivage froid (S3 Glacier) |
Configuration de la retention Nextcloud :
# Limiter les versions a 90 jours
podman exec -u www-data nextcloud php occ config:system:set \
versions_retention_obligation --value="auto, 90"
# Purger la corbeille apres 30 jours
podman exec -u www-data nextcloud php occ config:system:set \
trashbin_retention_obligation --value="auto, 30"
Configuration de la retention Mattermost :
# Politique de retention globale
MM_DATARETENTIONSETTINGS_ENABLEMESSAGEDELETION=true
MM_DATARETENTIONSETTINGS_MESSAGERETENIONDAYS=365
MM_DATARETENTIONSETTINGS_ENABLEFILEDELETION=true
MM_DATARETENTIONSETTINGS_FILERETENTIONDAYS=365
Chiffrement des sauvegardes¶
Les sauvegardes contiennent l'integralite des données — elles doivent etre chiffrees.
# Sauvegarde PostgreSQL chiffree
pg_dump -U nextcloud nextcloud | \
gpg --symmetric --cipher-algo AES256 \
--output /backup/nextcloud-db-$(date +%F).sql.gpg
# Sauvegarde MinIO chiffree
mc mirror --encrypt-key "backup-key" \
minio/nextcloud /backup/nextcloud-files/
Cles de chiffrement
Les cles de chiffrement des sauvegardes doivent etre stockees séparément des sauvegardes elles-mêmes. Utilisez un gestionnaire de secrets (OpenBao) ou un coffre-fort physique.
Isolation réseau¶
Les services de collaboration doivent etre dans un segment réseau dedie, isole des services de production et de la chaîne logicielle :
graph LR
subgraph "Zone Interne"
NC["Nextcloud"]
MM["Mattermost"]
CO["Collabora"]
end
subgraph "Zone Donnees"
PG["PostgreSQL"]
S3["MinIO"]
RD["Redis"]
end
subgraph "Zone DMZ"
RP["Reverse Proxy"]
end
RP --> NC
RP --> MM
RP --> CO
NC --> PG
NC --> S3
NC --> RD
MM --> PG
MM --> S3 | Regle de flux | Source | Destination | Port | Action |
|---|---|---|---|---|
| Accès utilisateur | DMZ | Zone Interne | 8080, 8065, 9980 | Allow |
| Accès base de données | Zone Interne | Zone Données | 5432 | Allow |
| Accès stockage | Zone Interne | Zone Données | 9000 | Allow |
| Accès cache | Zone Interne | Zone Données | 6379 | Allow |
| Tout autre flux | * | * | * | Deny |