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.5Alternativ 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.