Beiträge in diesem Abschnitt

Checkliste zur Produktionshärtung

Veröffentlicht:
Aktualisiert:

Verwenden Sie diese Checkliste, um eine Bereitstellung von MobilityManager vor der Inbetriebnahme zu überprüfen. Jeder Punkt entspricht einer Einstellung oder einem Verhalten, das die Plattform erzwingt. Arbeiten Sie sie zusammen mit den verlinkten Detailartikeln durch.

Geheimnisse und Schlüssel

  • Legen Sie einen starken Jwt__Key von mindestens 32 Byte fest, der kein eingecheckter Standardwert ist. Andernfalls verweigert die Anwendung in der Produktion den Start.
  • Legen Sie DocumentStorage__LocalEncryptionKey (base64, 32 Byte) fest, sobald die Verschlüsselung im Ruhezustand aktiviert ist, oder deaktivieren Sie diese ausdrücklich.
  • Verwenden Sie ein eindeutiges, starkes Datenbankkennwort und verwenden Sie niemals Beispielwerte aus .env.example erneut.
  • Bewahren Sie alle Geheimnisse in einem Secret-Store oder einem Kubernetes-Secret auf — niemals in ConfigMaps oder in der Versionsverwaltung.

Umgebung und Datenbank

  • Betreiben Sie die Anwendung mit ASPNETCORE_ENVIRONMENT=Production, damit die Fail-Fast-Sicherheitsprüfungen aktiv sind.
  • Setzen Sie DatabaseProvider auf PostgreSQL oder SqlServer und richten Sie SystemConnection und TenantConnection auf verwaltete Datenbanken aus.
  • Behalten Sie für SQL-Server-Verbindungen Encrypt=True bei und validieren Sie das Serverzertifikat.
  • Stellen Sie sicher, dass das Konto in jeder Verbindungszeichenfolge nur die benötigten Berechtigungen besitzt.

Transport und Netzwerk

  • Terminieren Sie TLS an einem Reverse-Proxy, Load-Balancer oder Ingress; der Container liefert reines HTTP über Port 8080 aus.
  • Machen Sie den Container-Port nicht direkt im Internet verfügbar.
  • Beschränken Sie die Datenbank-Ports ausschließlich auf das Anwendungsnetzwerk.

Warnung: Die Docker-Compose-Datei für die Entwicklung veröffentlicht PostgreSQL der Bequemlichkeit halber über Port 5432. Übernehmen Sie diese Port-Zuordnung nicht auf einen Produktionshost.

Härtung von Laufzeit und Container

  • Betreiben Sie den Container als Nicht-Root-Benutzer mit einem schreibgeschützten Root-Dateisystem und entzogenen Linux-Capabilities, so wie es die Kubernetes-Basismanifeste tun.
  • Stellen Sie beschreibbare Volumes nur dort bereit, wo sie benötigt werden (/tmp, /app/data, /app/logs).
  • Legen Sie Ressourcenanforderungen und -grenzen fest, damit eine einzelne Instanz nicht den Arbeitsspeicher des Knotens erschöpfen kann.
  • Binden Sie das Image an einen bestimmten Versions-Tag statt an latest.

Verfügbarkeit und Überwachung

  • Betreiben Sie mindestens zwei Replikate mit einem PodDisruptionBudget, damit Upgrades und Knotenwartungen die Verfügbarkeit des Dienstes wahren.
  • Verbinden Sie die Liveness-, Readiness- und Startup-Probes mit /livez, /readyz und /healthz.
  • Überwachen Sie die Health-Endpunkte über Ihr NOC oder Ihre Uptime-Werkzeuge.

Datenschutz

  • Konfigurieren Sie automatisierte Sicherungen sowohl für die System- als auch für die Mandantendatenbank und testen Sie eine Wiederherstellung.
  • Sichern Sie den JWT-Schlüssel und den Dokumentverschlüsselungsschlüssel zuverlässig; der Verlust des Verschlüsselungsschlüssels macht verschlüsselte Dokumente unwiederbringlich.

Hinweis: Uploads sind durch die Anwendung auf 50 MB pro Anfrage begrenzt. Berücksichtigen Sie dies bei der Dimensionierung der Body-Grenzen des Reverse-Proxys, damit große, aber gültige Uploads nicht bereits vorgelagert blockiert werden.

Verwandte Artikel

  • Den JWT-Signaturschlüssel für die Produktion festlegen
  • Den Schlüssel zur Dokumentverschlüsselung im Ruhezustand konfigurieren
  • Überblick über die Kubernetes-Bereitstellung
  • Ihre Datenbanken sichern und wiederherstellen
AH
Geschrieben von Alexander Hagemann
Aktualisiert:
Zugriff abgelehnt
Zugriff abgelehnt