Zum Inhalt springen

Dateianhänge und Speicher konfigurieren

SignMeUp speichert Metadaten und Zugriffsbeziehungen in PostgreSQL. Die eigentlichen Dateiinhalte werden wahlweise in einem privaten Dateisystemverzeichnis oder einem S3-kompatiblen Objektspeicher abgelegt.

Da Anmeldeantworten, Notenimporte und Bestandsdokumente grundsätzlich als vertraulich behandelt werden, startet die API nur mit einer wirksamen Speicherverschlüsselung. Konfigurieren Sie daher vor dem ersten Start entweder S3-seitiges AES256 oder die Anwendungsverschlüsselung ApplicationAesGcm.

Für produktive Installationen mit mehreren Instanzen wird ein privater S3-Bucket empfohlen. Unterstützt der S3-Endpunkt keine serverseitige Verschlüsselung, aktivieren Sie die Anwendungsverschlüsselung mit AES-256-GCM.

Terminal-Fenster
FileStorage__Provider=S3
FileStorage__S3__ServiceUrl=https://s3.example.com
FileStorage__S3__Bucket=signmeup-files
FileStorage__S3__AccessKey=your-access-key
FileStorage__S3__SecretKey=your-secret-key-or-token
FileStorage__S3__ForcePathStyle=true
FileStorage__S3__ServerSideEncryption=None
FileStorage__Encryption__Mode=ApplicationAesGcm
FileStorage__Encryption__KeyVersion=v1
FileStorage__Encryption__KeyBase64=base64-encoded-32-byte-key
FileStorage__Migration__RunOnStartup=true
FileStorage__Migration__BatchSize=50
FileStorage__StagedRetentionHours=24

Erzeugen Sie den Anwendungsschlüssel beispielsweise mit:

Terminal-Fenster
openssl rand -base64 32

Speichern Sie Zugangsdaten und Schlüssel ausschließlich als Deployment-Secrets oder mit .NET User Secrets. Tragen Sie diese Werte nicht in versionierte Konfigurationsdateien ein.

Wenn Ihr S3-kompatibler Anbieter SSE-S3 unterstützt, können Sie stattdessen folgende Werte verwenden:

Terminal-Fenster
FileStorage__S3__ServerSideEncryption=Aes256
FileStorage__Encryption__Mode=None

Prüfen Sie dies vorab mit Ihrem Anbieter. Einige S3-kompatible Endpunkte unterstützen den AES256-Header nicht. Der Bucket muss privat bleiben; Downloads erfolgen über die authentifizierten SignMeUp-Endpunkte.

Das Dateisystem eignet sich für Entwicklung oder eine einzelne Instanz mit dauerhaft eingebundenem Speicher:

Terminal-Fenster
FileStorage__Provider=FileSystem
FileStorage__FileSystem__RootPath=/var/lib/signmeup/files
FileStorage__Encryption__Mode=ApplicationAesGcm
FileStorage__Encryption__KeyVersion=v1
FileStorage__Encryption__KeyBase64=base64-encoded-32-byte-key

Das Verzeichnis darf nicht öffentlich vom Webserver ausgeliefert werden. Geben Sie dem API-Prozess Lese-, Schreib- und Löschrechte und nehmen Sie das Verzeichnis in die Datensicherung auf. Mehrere API-Instanzen benötigen ein gemeinsames, dauerhaftes Dateisystem; verwenden Sie andernfalls S3.

Mit FileStorage__Migration__RunOnStartup=true verschiebt SignMeUp bestehende Document.Content-Daten beim Start in den konfigurierten Dateispeicher. Die Dokument-IDs bleiben erhalten. Erst nach erfolgreicher Speicherung wird der Binärinhalt aus PostgreSQL entfernt.

Empfohlenes Vorgehen:

  1. Sichern Sie PostgreSQL sowie Verschlüsselungsschlüssel und Speicherzugang.
  2. Prüfen Sie Schreib-, Lese- und Löschzugriff auf den Ziel-Speicher.
  3. Aktivieren Sie die gewünschte Verschlüsselung.
  4. Starten Sie die API und beobachten Sie die Migrationsprotokolle.
  5. Prüfen Sie anschließend in PostgreSQL:
SELECT COUNT(*)
FROM "Documents"
WHERE "StoredFileId" IS NULL
AND "Content" IS NOT NULL;

Das erwartete Ergebnis ist 0. Bei Fehlern bleiben die ursprünglichen Daten erhalten und können nach Behebung der Ursache erneut migriert werden. Die Batchgröße muss zwischen 1 und 500 liegen.

Der Hangfire-Job stored-file-cleanup läuft stündlich. Er entfernt nicht mehr referenzierte Dateien, zum Löschen vorgemerkte Objekte und abgelaufene, noch nicht zugeordnete Uploads. FileStorage__StagedRetentionHours legt die Aufbewahrungsdauer solcher Uploads fest und muss größer als 0 sein.

Soft-gelöschte Events und Anmeldungen behalten ihre Dateien, solange die Datensätze wiederherstellbar sind. Erst die endgültige Bereinigung entfernt die Verknüpfungen und anschließend nicht mehr benötigte Speicherobjekte.

  • API startet ohne Fehler der FileStorage-Konfigurationsvalidierung.
  • Bucket oder Verzeichnis ist privat, dauerhaft und gesichert.
  • Ein nicht vertraulicher Testanhang erscheint in der E-Mail.
  • Ein vertraulicher Testanhang fehlt in der E-Mail und ist nach dem Login abrufbar.
  • Die Dokumentmigration meldet keine verbleibenden Datensätze.
  • Der Hangfire-Job stored-file-cleanup wird stündlich ausgeführt.

Weitere technische Details und Diagramme finden Sie in der Entwicklerdokumentation zum Dateispeicher.

Eine verständliche Beschreibung für Endnutzerinnen und Endnutzer finden Sie unter So schützt SignMeUp Ihre Dateien.