Die Swisscom AG bzw. ihre Division Swisscom Health ist führend für vernetzte Lösungen in der schnell wachsenden eHealth-Welt. Zu ihren Kunden zählen namhafte Institutionen im Gesundheitswesen der Schweiz. Die Swisscom Health ist zudem Technologie-Provider für die XAD Stammgemeinschaft, dem grössten EPD-Anbieter der Schweiz.
Als Technologie-Provider der EPD Stammgemeinschaft XAD entwickelt und betreibt die Swisscom Health die technische Plattform der in der Schweiz angebotenen EPD Funktionalitäten. Dazu zählen alle Schnittstellen (APIs) für die tiefe Integration der am EPD angeschlossenen Institutionen sowie die Portale für Patienten und Leistungserbringer.
Im Zuge der Modernisierung des Swisscom Rechenzentrums bestand die Aufgabe, die komplette EPD-Plattform auf einen aktuellen und nachhaltigen Technologiestack (Cloud Native Stack) anzuheben. Die Sicherheit der Plattform stand dabei an oberster Stelle.
Novaloop wurde beauftragt, die gesamte System- und Deploymentarchitektur der EPD-Plattform zu modernisieren und eine leitende Rolle im Gesamtprojekt einzunehmen. Im Zuge der Modernisierung wurde darauf geachtet, dass der Prozess von der Entwicklung bis zum Rollout aller Komponenten von Entwicklungsteams autonom übernommen werden können (Self-Service, DevSecOps).
Bei der Modernisierung der Plattform wurden folgende Ziele verfolgt:
Für die Umsetzung hat Novaloop sich an den state-of-the-art Technologien aus dem Cloud Native Ökosystem orientiert. Die folgende Liste ist nicht abschliessend und fokussiert hauptsächlich auf die Konfigurations- und Deploymentaspekte der Plattform. Technologien zur Implementierung weiterer operativer Aspekte wie Logging, Monitoring und Backup wurden hier bewusst weggelassen.
Für die Orchestrierung von Containern wurde die Open-Source-Lösung Kubernetes aus dem Hause Google verwendet. Out-of-the-box genügen die Kubernetes Installationen nicht den hohen Sicherheitsanforderungen für den Betrieb einer eHealth Lösung.
Eine konsequente Anwendung von "Principle of Least Privilege" für Zugriffe von Personen und Systemen sind zentral. Die Umsetzung erfolgte durch die von Kubernetes zur Verfügung stehenden Boardmitteln:
Für das kontinuierliche Deployment und die Environment-spezifischen Konfigurationen der Infrastruktur- und Softwareartefakte hat Novaloop sich am Prinzip von GitOps orientiert. Bei GitOps werden alle für das Deployment notwendige Konfigurationen in ein oder mehrere Git Repositories abgespeichert. Daraus ergeben sich u.a. folgende Vorteile:
Für die Kompositionen der Kubernetes Deployment-Manifeste werden die Werkzeuge Kustomize und Helm verwendet. Aus Gründen der besseren Lesbarkeit wurde Kustomize für die Kompositionen der Softwareartefakte für den Workload verwendet. Helm wurde ausschliesslich für Infrastrukturkomponenten wie z.B. HashiCorp Vault verwendet. In der Regel bieten bereits viele Open-Source Softwareanbieter ihre Konfiguration in Form von Helm-Charts an.
Die speziell im eHealth-Bereich sehr hohen Anforderungen an die Netzwerksicherheit reduzieren die Effizienz in der Auslieferung. Nicht-funktionale Aspekte wie die Transportverschlüsselung und das damit verbundene Zertifikatsmanagement sind keine trivialen Aufgaben für ein Entwicklerteam. In früher eingesetzten Lösungen, musste die Transportverschlüsselung und das Zertifikatshandling direkt im Applikationscode implementiert und gepflegt werden. Eine zentrale Verwaltung für die Transportverschlüsselung gab es nicht. Dieses Know-how musste also in jedem Entwicklungsteam vorhanden sein.
Abhilfe schaffen hier Service Meshes, welche die früher dezentralen Konfigurationen pro Team obsolet machen und zentral durch ein System/Plattform-Team verwaltet werden können. Dies führt einerseits zu einem Effizienzgewinn, andererseits können damit allfällige Sicherheitsprobleme zentral mitigiert werden. Ein bekanntes Problem ist beispielsweise, dass die Validierung der Trust-Chain im Applikationsstack aus praktischen Gründen deaktiviert wird. Die Deaktivierung führt dazu, dass die Anwendung alle Endpunkte, auch nicht vertrauenswürdige, zulässt. In einem Service Mesh können diese Verbindungen zentral kontrolliert und sicher enforced werden.
Sicherheit funktioniert nach dem Zwiebelschalen-Prinzip und muss auf mehreren Ebenen greifen. Dies gilt auch für die Transportsicherung innerhalb der Plattform. Komponenten dürfen sich gegenseitig nur dann erreichen, wenn das von einem konkreten Anwendungsfall in der Lösung verlangt wird. Die aufeinanderliegenden Ebenen (Bottom-Up) sind:
Wird eine Ebene kompromittiert, schützt die nächste darunterliegende Ebene. Dieses Sicherheitskonzept nennt sich "Zero-Trust-Modell".
Der korrekte Umgang mit Passwörtern und Zertifikaten ist nicht trivial. Die Prozesse für die Verwaltung von sensitiven Informationen unterscheiden sich idealerweise nicht zwischen den verschiedenen Stages (Dev, Test, Prod). Der Umgang mit den Day-2 Prozessen rundum Passwörter und Zertifikaten lassen sich damit bereits in den Entwicklungsteams etablieren und kontinuierlich anwenden.
HashiCorp Vault bietet für die Speicherung von sensitiven Informationen einen sicheren Key-Value Store an. Passwörter werden bei einem Init-Deployment einer Umgebung automatisch erzeugt und in den Key-Value Store abgelegt. Die Logik für die Passwortverteilung wird deklarativ in einer YAML-Definition beschrieben (GitOps). Die Passwörter werden via Init-Container in Form eines verschlüsselten in-memory volumes der verschiedenen Applikationscontainer zur Verfügung gestellt.
Für die Herausgabe von internen X.509 Zertifikate wird HashiCorp Vault PKI verwendet. Die erstmalige Herausgabe, sowie das Rotieren von Zertifikaten, geschieht via API-Calls und ist vollständig automatisiert. Dies ist eine wichtige Voraussetzung für die Einführung von kurzlebigen (short-lived) Zertifikaten. Auf umständliche und fehleranfällige Widerrufsprozesse (CRL, OCSP) kann für internen Traffic daher verzichtet werden. Die Gültigkeitsdauer eines Zertifikates kann z.B. auf 15min beschränkt werden.
Wir haben mit Novaloop für den Aufbau und die Entwicklung unserer Cloud Native Plattform zusammengearbeitet. Wir sind mit der Umsetzung der Aufgabenstellung und den konkreten Projektergebnissen sehr zufrieden. Unsere neue Plattform hat die Autonomie unserer Entwicklerteams gefördert, die Deploymentzeiten um ein Vielfaches verkürzt und letztlich die Effizienz im Delivery erhöht.
Federico Marmori, Head of Development & Operations Health at Swisscom