Aller au contenu

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 :

  1. Demande formelle au responsable du perimetre
  2. Validation de la classification du contenu (pas de Confidentiel ni Restreint)
  3. 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)

podman exec -u www-data nextcloud php occ app:install end_to_end_encryption

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é :

podman exec -u www-data nextcloud php occ app:install admin_audit

É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