Chiffrement côté serveur (SSE-C)

Relution peut chiffrer les objets qu’il stocke dans un bucket compatible S3 à l’aide du chiffrement côté serveur avec une clé fournie par le client (SSE-C). Avec SSE-C, Relution envoie la clé avec chaque requête, et le backend de stockage l’utilise pour chiffrer les objets à l’écriture et les déchiffrer à la lecture. Le backend ne stocke jamais lui-même la clé : sa conservation en toute sécurité relève de la seule responsabilité de l’exploitant.

À lire avant l’activation : SSE-C prend effet immédiatement au démarrage, et Relution ne chiffre pas les objets déjà présents dans le bucket. L’activer uniquement sur une instance neuve avec un bucket vide, ou chiffrer d’abord tous les objets existants. En cas de perte de la clé, toutes les données chiffrées sont perdues de manière définitive. Voir Remarques importantes ci-dessous pour plus de détails.
SSE-C vs. chiffrement KMS : SSE-C n’est pas la même chose que le chiffrement côté client via AWS KMS. Avec KMS, une clé gérée par le client (CMK) est détenue et gérée par AWS KMS. Avec SSE-C, la clé est transmise par Relution à chaque requête vers S3 et stockée uniquement par l’exploitant. Ces deux mécanismes s’excluent mutuellement - il est possible d’activer SSE-C ou KMS ou aucun des deux, mais jamais les deux en même temps.

Prérequis

  • Une configuration de stockage objet compatible S3 fonctionnelle - voir Connecter le stockage →.
  • Un backend de stockage objet prenant en charge SSE-C. La prise en charge a été vérifiée avec SeaweedFS et Hetzner Object Storage. D’autres backends compatibles S3 peuvent fonctionner, mais n’ont pas été testés.
  • Une clé de 256 bits (voir ci-dessous).

Générer la clé

SSE-C nécessite une clé de 256 bits (32 octets), fournie sous forme de chaîne encodée en Base64. Une clé peut être générée avec openssl :

openssl rand -base64 32

Conserver la valeur obtenue en toute sécurité. En cas de perte de cette clé, tous les objets chiffrés du bucket S3 ne pourront plus être déchiffrés et seront perdus de manière définitive.


Configuration

SSE-C est activé dès qu’une clé est configurée. La clé peut être fournie soit directement via la propriété relution.storage.s3.serverSideEncryption.key (options A et B), soit sous forme de fichier via relution.storage.s3.serverSideEncryption.keyFile (option C). Si les deux sont définis, le fichier de clé est prioritaire.

Option A : utilisation de application.yml

Ajouter le bloc serverSideEncryption à application.yml :

relution:
  storage:
    resourceStorageType: S3
    s3:
      customEndpoint: http://seaweedfs:8333
      accessKey: %ACCESS-KEY%
      secretKey: %SECRET-KEY%
      bucketName: relution
      serverSideEncryption:
        key: %BASE64-KEY%

Option B : utilisation de variables d’environnement

Ajouter la variable d’environnement suivante au service relution dans le compose.yaml :

services:
  relution:
    environment:
      - RELUTION_STORAGE_S3_SERVERSIDEENCRYPTION_KEY=%BASE64-KEY%

Option C : clé sous forme de fichier

Au lieu d’indiquer la clé directement, il est possible de la lire depuis un fichier. Cela est particulièrement utile lorsque la clé est montée dans le conteneur sous forme de secret Docker ou Kubernetes. Le chemin vers le fichier de clé est configuré via relution.storage.s3.serverSideEncryption.keyFile :

relution:
  storage:
    s3:
      serverSideEncryption:
        keyFile: /chemin/vers/ssec.key

Ou via la variable d’environnement correspondante :

services:
  relution:
    environment:
      - RELUTION_STORAGE_S3_SERVERSIDEENCRYPTION_KEYFILE=/chemin/vers/ssec.key

Le fichier doit contenir la même clé de 256 bits encodée en Base64 que pour l’indication directe (par exemple, générée avec openssl rand -base64 32). Un saut de ligne final est sans conséquence, car la valeur est nettoyée ; les clés binaires ou hexadécimales sont rejetées.

Au démarrage, Relution journalise la lecture avec Reading SSE-C key from file <chemin>. Si le fichier est absent ou ne contient pas une clé de 32 octets, le démarrage s’interrompt avec un message d’erreur correspondant.

Vérifier l’activation

Au démarrage, Relution journalise le chiffrement actif, pour SSE-C avec S3 storage encryption: SSE-C (server-side). Une clé indiquée directement (options A et B) est également vérifiée au démarrage : si la valeur n’est pas un Base64 valide ou ne donne pas une clé de 32 octets, le démarrage s’interrompt, avec SSE-C key must be 32 bytes (AES-256) en cas de longueur incorrecte.


Remarques importantes

Aucune migration des fichiers existants : SSE-C prend effet immédiatement dès que Relution démarre avec la clé configurée. Relution ne chiffre pas les objets déjà présents dans le bucket. Utiliser SSE-C uniquement sur une instance neuve avec un bucket vide, ou chiffrer tous les objets S3 existants avant de démarrer Relution avec la clé. Sinon, les objets précédemment stockés resteront non chiffrés et pourraient devenir inaccessibles.
La perte de la clé signifie la perte des données : Le backend de stockage ne stocke pas la clé : sa conservation relève de la seule responsabilité de l’exploitant. Si la clé est perdue, tous les objets chiffrés du bucket deviennent définitivement irrécupérables, et Relution ne peut plus livrer d’applications ou de ressources depuis le stockage objet. Conserver la clé dans un endroit sûr et sauvegardé.
La rotation de la clé nécessite un rechiffrement : La rotation de la clé relève de la responsabilité de l’exploitant. Relution ne rechiffre pas les objets lors d’un changement de clé. Pour effectuer la rotation de la clé, il est nécessaire de rechiffrer tous les objets existants du bucket avec la nouvelle clé (par exemple en les copiant avec la nouvelle clé) avant de démarrer Relution avec la configuration mise à jour. Si Relution démarre avec une nouvelle clé alors que des objets sont encore chiffrés avec l’ancienne, ces objets deviendront inaccessibles.
Exclusion mutuelle avec KMS : Le chiffrement côté serveur (SSE-C) et le chiffrement côté client (KMS) ne peuvent pas être actifs simultanément. Si les deux sont configurés, le démarrage s’interrompt avec Conflicting encryption configuration: client and server side encryption active.

Cet article a-t-il été utile ?