Serverseitige Verschlüsselung (SSE-C)

Relution kann die Objekte, die es in einem S3-kompatiblen Bucket speichert, mit Server-Side Encryption und einem kundenseitig bereitgestellten Schlüssel (SSE-C) verschlüsseln. Bei SSE-C sendet Relution den Schlüssel mit jeder Anfrage mit, und das Speicher-Backend verwendet ihn, um Objekte beim Schreiben zu verschlüsseln und beim Lesen zu entschlüsseln. Das Backend speichert den Schlüssel niemals selbst - die sichere Aufbewahrung liegt ausschließlich in der eigenen Verantwortung.


Voraussetzungen

  • Eine funktionierende S3-kompatible Objektspeicher-Einrichtung - siehe Objektspeicher verbinden →.
  • Ein Objektspeicher-Backend, das SSE-C unterstützt. Wir haben die Unterstützung mit SeaweedFS und Hetzner Object Storage getestet. Andere S3-kompatible Backends können funktionieren, wurden aber nicht getestet.
  • Ein 256-Bit-Schlüssel (siehe unten).

Schlüssel generieren

SSE-C benötigt einen 256-Bit-Schlüssel (32 Byte), der als Base64-codierte Zeichenkette bereitgestellt wird. Ein Schlüssel lässt sich mit openssl generieren:

openssl rand -base64 32

Den resultierenden Wert sicher aufbewahren. Geht dieser Schlüssel verloren, können alle verschlüsselten Objekte im S3-Bucket nicht mehr entschlüsselt werden und sind unwiederbringlich verloren.


Konfiguration

SSE-C wird aktiviert, sobald ein Schlüssel konfiguriert ist. Der Schlüssel kann entweder direkt über die Konfiguration relution.storage.s3.serverSideEncryption.key angegeben (Option A und B) oder als Datei über relution.storage.s3.serverSideEncryption.keyFile bereitgestellt werden (Option C). Sind beide gesetzt, hat die Schlüsseldatei Vorrang.

Option A: Verwendung von application.yml

Den serverSideEncryption-Block zur application.yml hinzufügen:

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

Option B: Verwendung von Umgebungsvariablen

Die folgende Umgebungsvariable zum relution Service in der compose.yml hinzufügen:

services:
  relution:
    environment:
      - RELUTION_STORAGE_S3_SERVERSIDEENCRYPTION_KEY=%IHR-BASE64-SCHLÜSSEL%

Option C: Schlüssel als Datei

Neu in 26.5

Alternativ zur direkten Angabe kann der Schlüssel aus einer Datei gelesen werden. Das ist vor allem dann sinnvoll, wenn der Schlüssel als Docker- oder Kubernetes-Secret in den Container eingehängt wird. Der Pfad zur Schlüsseldatei wird über relution.storage.s3.serverSideEncryption.keyFile konfiguriert:

relution:
  storage:
    s3:
      serverSideEncryption:
        keyFile: /pfad/zu/ssec.key

Oder über die entsprechende Umgebungsvariable:

services:
  relution:
    environment:
      - RELUTION_STORAGE_S3_SERVERSIDEENCRYPTION_KEYFILE=/pfad/zu/ssec.key

Die Datei muss denselben Base64-codierten 256-Bit-Schlüssel enthalten wie bei der direkten Angabe (z. B. erzeugt mit openssl rand -base64 32). Ein abschließender Zeilenumbruch ist unkritisch, da der Wert automatisch bereinigt wird; binär oder hexadezimal codierte Schlüssel werden abgelehnt.

Beim Start protokolliert Relution das Einlesen mit Reading SSE-C key from file <Pfad>. Fehlt die Datei oder enthält sie keinen 32-Byte-Schlüssel, bricht der Start mit einer entsprechenden Fehlermeldung ab.


Wichtige Hinweise

Top