Bitte beachten Sie:Teile des Blogs enthalten Verweise und Beispiele aus „ANNOUNCING AVAILABILITY OF POSTGRESQL INSTANCE LEVEL ENCRYPTION“ von CyberTec, einem Unternehmen, das Support, Beratung und Schulung für PostgreSQL anbietet.
Organisationen haben mit verschiedenen Arten von Daten zu tun, einschließlich sehr wichtiger Informationen, die in einer Datenbank gespeichert werden müssen. Sicherheit ist ein wichtiger Aspekt, um sicherzustellen, dass sensible Daten wie Krankenakten und Finanztransaktionen nicht mit schändlichen Mitteln in die Hände von Personen gelangen. Im Laufe der Jahre haben Entwickler mehrere Maßnahmen zur Verbesserung der Datenintegrität und des Schutzes entwickelt. Eine der am häufigsten verwendeten Techniken ist die Verschlüsselung, um Datenschutzverletzungen zu verhindern.
So sehr Sie möglicherweise komplexe Schutzmaßnahmen ergriffen haben, einige Personen erhalten möglicherweise dennoch Zugriff auf Ihr System. Verschlüsselung ist eine zusätzliche Sicherheitsebene. PostgreSQL bietet Verschlüsselung auf verschiedenen Ebenen und bietet neben der Flexibilität beim Schutz von Daten vor der Offenlegung durch nicht vertrauenswürdige Administratoren, unsichere Netzwerkverbindungen und Diebstahl von Datenbankservern. PostgreSQL bietet verschiedene Verschlüsselungsoptionen wie:
- SSL-Host-Authentifizierung
- Daten über ein Netzwerk verschlüsseln
- Datenpartitionsverschlüsselung
- Verschlüsselung für bestimmte Spalten
- Passwortspeicherverschlüsselung
- Clientseitige Verschlüsselung
Je ausgefeilter die Verschlüsselungsstrategie ist, die Sie verwenden, desto größer ist jedoch die Wahrscheinlichkeit, dass Sie von Ihren Daten ausgeschlossen werden. Außerdem ist der Lesevorgang nicht nur schwierig, sondern erfordert auch viele Ressourcen zum Abfragen und Entschlüsseln. Welche Verschlüsselungsoption Sie auswählen, hängt von der Art der Daten ab, mit denen Sie es in Bezug auf die Sensibilität zu tun haben. Das folgende Diagramm veranschaulicht das Gesamtverfahren der Datenverschlüsselung und -entschlüsselung während Servertransaktionen.
In diesem Artikel werden verschiedene Möglichkeiten erörtert, wie ein Unternehmen vertrauliche Informationen sichern kann, aber das Hauptinteresse gilt der zuvor erwähnten Verschlüsselung auf Instanzebene.
Verschlüsselung
Verschlüsselung ist eine Methode, Daten so zu verschlüsseln, dass sie nicht mehr in ihrem ursprünglichen Format vorliegen und nicht gelesen werden können. Was die Datenbank betrifft, gibt es zwei Arten von Daten:Daten im Ruhezustand und Daten in Bewegung. Wenn Daten in der Datenbank gespeichert werden, werden sie als ruhende Daten bezeichnet. Wenn andererseits ein Client beispielsweise eine Anfrage an die Datenbank sendet und einige Daten zurückgegeben werden und den Client erreichen müssen, wird dies als Daten in Bewegung bezeichnet. Die beiden unterschiedlichen Datentypen müssen mit ähnlicher Technologie geschützt werden. Wenn beispielsweise eine Anwendung so entwickelt wird, dass ein Benutzer ein Passwort eingeben muss, wird dieses Passwort nicht als Klartext in der Datenbank gespeichert. Es gibt einige Verschlüsselungsverfahren, die verwendet werden, um diesen Klartext vor dem Speichern in eine andere Zeichenfolge umzuwandeln. Wenn der Benutzer dieses Passwort beispielsweise für ein Anmeldesystem verwenden muss, benötigen wir außerdem eine Vergleichsmöglichkeit, die beim Entschlüsselungsprozess übermittelt wird.
Die Datenbankverschlüsselung kann auf verschiedene Arten implementiert werden, aber viele Entwickler berücksichtigen die Transportebene nicht. Die unterschiedlichen Ansätze sind jedoch auch mit unterschiedlichen Fallstricken bei verlangsamten Datenzugriffszeiten verbunden, insbesondere wenn stark auf den virtuellen Speicher zugegriffen wird.
Verschlüsselung ruhender Daten
Ruhende Daten sind inaktive Daten, die physisch auf der Festplatte gespeichert sind. Wenn es darum geht, eine Datenbank in einer Cloud-Umgebung zu hosten, in der der Cloud-Anbieter vollen Zugriff auf die Infrastruktur hat, kann Verschlüsselung eine gute Maßnahme sein, um die Kontrolle über die Daten zu behalten. Einige der Verschlüsselungsstrategien, die Sie verwenden können, werden unten besprochen.
Vollständige Festplattenverschlüsselung (FDE)
Das Konzept hinter FDE besteht im Allgemeinen darin, jede Datei und jeden temporären Speicher zu schützen, der Teile der Daten enthalten kann. Es ist sehr effizient, besonders wenn Sie Schwierigkeiten haben, auszuwählen, was Sie schützen möchten, oder wenn Sie keine Datei verpassen möchten. Der Hauptvorteil dieser Strategie besteht darin, dass der Endbenutzer nach dem Zugriff auf das System keine besondere Aufmerksamkeit erfordert. Dieser Ansatz hat jedoch einige Fallstricke. Dazu gehören:
- Der Verschlüsselungs- und Entschlüsselungsprozess verlangsamt die Gesamtdatenzugriffszeit.
- Daten sind möglicherweise nicht geschützt, wenn das System eingeschaltet ist, da die Informationen entschlüsselt und zum Lesen bereit sind. Sie müssen daher einige andere Verschlüsselungsstrategien einsetzen, z. B. dateibasierte Verschlüsselung.
Dateibasierte Verschlüsselung
In diesem Fall werden die Dateien oder Verzeichnisse durch das stapelbare kryptographische Dateisystem selbst verschlüsselt. In PostgreSQL verwenden wir oft den pg_crypto-Ansatz, wie in diesem Artikel beschrieben.
Einige der Vorteile der Dateisystemverschlüsselung sind:
- Aktionskontrolle kann durch die Verwendung von Public-Key-Kryptografie erzwungen werden
- Getrennte Verwaltung verschlüsselter Dateien, sodass Backups von einzeln geänderten Dateien auch in verschlüsselter Form erstellt werden können, anstatt das gesamte verschlüsselte Volume zu sichern.
Dies ist jedoch keine sehr zuverlässige Verschlüsselungsmethode, die Sie für Ihre geclusterten Daten verwenden können. Der Grund dafür ist, dass einige dateibasierte Verschlüsselungslösungen einen Rest verschlüsselter Dateien hinterlassen können, von denen sich ein Angreifer erholen kann. Der beste Kombinationsansatz besteht daher darin, dies mit einer vollständigen Festplattenverschlüsselung zu kombinieren.
Verschlüsselung auf Instanzebene
Auf Instanzebene werden Puffer verwendet, sodass alle Dateien, aus denen der PostgreSQL-Cluster besteht, als Data-at-Rest-Verschlüsselung auf der Festplatte gespeichert werden. Sie werden dann als Entschlüsselungsblöcke dargestellt, wenn sie von der Festplatte in gemeinsam genutzte Puffer gelesen werden. Nachdem diese Blöcke aus den gemeinsam genutzten Puffern auf die Festplatte geschrieben wurden, werden sie erneut automatisch verschlüsselt. Die Datenbank wird zunächst mit dem Befehl initdb verschlüsselt initialisiert. Zweitens wird der Verschlüsselungsschlüssel während des Starts vom Server auf eine dieser beiden Arten abgerufen; über den Parameter pgcrypto.keysetup_command oder über eine Umgebungsvariable.
Laden Sie noch heute das Whitepaper PostgreSQL-Verwaltung und -Automatisierung mit ClusterControl herunterErfahren Sie, was Sie wissen müssen, um PostgreSQL bereitzustellen, zu überwachen, zu verwalten und zu skalierenLaden Sie das Whitepaper herunterEinrichten der Verschlüsselung auf Instanzebene
Eine kleine Zusammenfassung, wie Sie die Verschlüsselung auf Instanzebene einrichten können, ist in den folgenden Schritten beschrieben:
- Überprüfen Sie, ob Sie „contrib“ installiert haben, indem Sie den Befehl rpm -qa |grep contrib für RedHat-basierte Betriebssysteme oder dpkg -l |grep contrib für Debian-basierte Betriebssysteme verwenden. Wenn es nicht in der Liste enthalten ist, installieren Sie es mit apt-get install postgresql-contrib, wenn Sie die Debian-basierte Umgebung verwenden, oder yum install postgresql-contrib, wenn Sie ein RedHat-basiertes Betriebssystem verwenden.
- Erstellen Sie den PostgreSQL-Code.
- Cluster-Initialisierung durch Einrichten des Verschlüsselungsschlüssels und Ausführen des initdb-Befehls
read -sp "Postgres passphrase: " PGENCRYPTIONKEY export PGENCRYPTIONKEY=$PGENCRYPTIONKEY initdb –data-encryption pgcrypto --data-checksums -D cryptotest
- Starten Sie den Server mit dem Befehl
$ postgres -D /usr/local/pgsql/data
- Setzen der Umgebungsvariable PGENCRYPTIONKEY mit dem Befehl:
Der Schlüssel kann auch durch ein benutzerdefiniertes und sichereres Schlüsselleseverfahren über den oben erwähnten Befehl „pgcrypto.keysetup_command“ postgresql.conf-Parameter festgelegt werden.export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
Leistungserwartungen
Verschlüsselung geht immer zu Lasten der Leistung, da es keine kostenfreien Optionen gibt. Wenn Ihre Arbeitslast IO-orientiert ist, können Sie eine erheblich reduzierte Leistung erwarten, aber dies ist möglicherweise nicht der Fall. Wenn der Datensatz in den Puffern weniger gemeinsam genutzt wird oder seine Verweildauer in den Puffern kurz ist, kann die Leistungseinbuße auf der typischen Serverhardware manchmal vernachlässigbar sein.
Nachdem ich die Verschlüsselung meiner Datenbank durchgeführt hatte, führte ich einen kleinen Test durch, um zu überprüfen, ob die Verschlüsselung die Leistung wirklich beeinflusst, und die Ergebnisse sind unten tabellarisch aufgeführt.
Arbeitslast | Keine Verschlüsselung | Mit Verschlüsselung | Leistungskosten |
---|---|---|---|
Masseneinfügungsvorgang | 26s | 68s | 161 % |
Lese-Schreib-Einpassung in gemeinsam genutzte Puffer (im Verhältnis 1:3) | 3200TPS | 3068TPS | 4,13 % |
Nur aus gemeinsam genutzten Puffern lesen | 2234 TPS | 2219 TPS | 0,68 % |
Nur Lesen passt nicht in gemeinsame Puffer | 1845 TPs | 1434 TPS | 22,28 % |
Lesen-Schreiben passt nicht in gemeinsame Puffer im Verhältnis 1:3 | 3422 TPS | 2545 TPS | 25,6 % |
Wie in der obigen Tabelle dargestellt, können wir sehen, dass die Leistung nicht linear ist, da sie manchmal von 161 % auf 0,7 % springt. Dies ist ein einfacher Hinweis darauf, dass die Verschlüsselungsleistung arbeitslastspezifisch ist und außerdem empfindlich auf die Anzahl der Seiten reagiert, die zwischen gemeinsam genutzten Puffern und Datenträgern verschoben werden. Dies kann sich je nach Auslastung auch auf die Leistung der CPU auswirken. Die Verschlüsselung auf Instanzebene ist eine recht praktikable Option und der einfachste Ansatz für eine Reihe von Umgebungen.
Schlussfolgerung
Die Datenverschlüsselung ist insbesondere für sensible Informationen im Datenbankmanagement ein wichtiges Unterfangen. Es gibt eine Reihe von Optionen für die Datenverschlüsselung, was PostgreSQL betrifft. Bei der Bestimmung des zu verwendenden Ansatzes ist es wichtig, die Daten, die Anwendungsarchitektur und die Datennutzung zu verstehen, da die Verschlüsselung zu Lasten der Leistung geht. Auf diese Weise können Sie nachvollziehen, wann Sie die Verschlüsselung aktivieren sollten, wo Ihre Daten offengelegt und wo sie sicher sind, welches der beste Verschlüsselungsansatz ist.