INSTALLATION VON POSTGRESQL 12.X TDE

PostgreSQL 12.x TDE ist eine Version von PostgreSQL, die transparente Datenverschlüsselung unterstützt. Für viele Unternehmen ist es notwendig, Daten auf der Festplatte zu verschlüsseln. PostgreSQL TDE wurde entwickelt, um genau dies auf effizienteste Art und Weise zu tun.

Erfahren Sie hier, wie Sie PostgreSQL TDE Schritt für Schritt auf Linux und Mac OS X installieren können:

  1. Herunterladen des Quellcodes
  2. Extrahieren und Konfigurieren von PostgreSQL 12 TDE
  3. Kompilieren des Codes
  4. Einrichten der Schlüsselverwaltung
  5. Anlegen einer Datenbankinstanz/Cluster

1. HERUNTERLADEN DES QUELLCODES

Um PostgreSQL TDE herunterzuladen, gehen Sie bitte auf unsere Website und downloaden das neueste tar file. Wenn Sie es vorziehen, mit „command line“ zu arbeiten, können Sie auch einfach „wget“ benutzen, um die Datei zu erhalten. Hier ist ein Beispiel:

wget https://download.cybertec-postgresql.com/postgresql-12.X_TDE_1.0beta2.tar.gz 

2. EXTRAHIEREN UND KONFIGURIEREN VON POSTGRESQL 12 TDE

Sobald Sie die Datei heruntergeladen haben, können Sie diese problemlos entpacken. So funktioniert’s:

tar xvfz postgresql-12.X-TDE-1.0beta2.tar.gz 

Es wird ein Verzeichnis erstellt, das den gesamten Quellcode von PostgreSQL TDE enthält. Gehen Sie in das Verzeichnis und führen Sie den folgenden Befehl aus:

 

Für Mac OS X:

./configure --prefix=/Users/hs/pg12tde \ 
   --with-openssl \
   --with-perl \
   --with-python --with-ldap \
   CPPFLAGS="-I$(brew --prefix openssl)/include" \
   LDFLAGS="-L$(brew --prefix openssl)/lib"


⎟ Hinweis: Bei OS X ist es sinnvoll, HomeBrew zu installieren, um sicherzustellen, dass Sie alle Abhängigkeiten zur Kompilierung des Codes zuerst installieren können. Es ist der einfachste Weg, die gesamte Software dazu zu bringen, PostgreSQL zu kompilieren und auszuführen.

 

Für Linux:

Unter Linux ist das Kompilieren von PostgreSQL ziemlich einfach. Stellen Sie sicher, dass alle in der Dokumentation beschriebenen Abhängigkeiten erfüllt sind. Dann führen Sie sie folgendes aus:

./configure --prefix=/usr/local/pg12tde --with-openssl --with-perl \
   --with-python --with-ldap

Wenn bei der Konfiguration etwas schief geht, ist es sehr wahrscheinlich, dass Sie ein Paket übersehen haben.

3. KOMPILIEREN DES CODES

Sobald der Schritt „Konfigurieren“ erfolgreich ausgeführt wurde, können Sie den Code mühelos kompilieren:

make install
cd contrib
make install

Wenn Sie mehr als einen CPU-Kern verwenden möchten, können Sie -j zu „make“ hinzufügen, um Code parallel zu kompilieren.

Normalerweise wird der Code innerhalb von 1 bis 2 Minuten kompiliert.

PostgreSQL ist jetzt bereit, und Sie können anfangen, Ihre Server-Infrastruktur vorzubereiten, indem Sie die $PATH-Umgebungsvariablen so anpassen, dass Sie ganz einfach auf die Datenbank zugreifen können.

4. EINRICHTEN DER SCHLÜSSELVERWALTUNG

Key management ist ein wichtiger Aspekt. Um eine Datenbankinstanz zu verschlüsseln, muss auch ein geeigneter Schlüssel dafür von irgendwo her kommen. Im Falle von PostgreSQL TDE kommt der Schlüssel von einem externen Programm, das völlig flexibel ist. Im Idealfall kommt der Schlüssel NICHT aus dem lokalen Dateisystem, sondern aus einem entfernten, sicheren Schlüsselspeicher.

Bevor Sie Ihre Datenbankinstanz erstellen, müssen Sie aber einen Code erstellen, um sicherzustellen, dass der Schlüssel während des Starts und der Instanzerstellung von der Datenbank gelesen werden kann.

Hier ist ein möglichst einfaches Beispiel:

 % cat /somewhere/provide_key.sh  #!/bin/sh   echo 882fb7c12e80280fd664c69d2d636913

Alles, was Sie brauchen, ist ein Programm, das den Schlüssel als stdout ausgibt – und das war’s! Stellen Sie sicher, dass PostgreSQL in der Lage ist, dieses Programm auszuführen:

 % chmod +x /somewhere/provide_key.sh 

⎟   Hinweis: Sie müssen kein Shell-Skript schreiben – Sie können jede Art von ausführbarer Datei wie C, Go oder Python verwenden.

5. ANLEGEN EINER DATENBANKINSTANZ / EINES CLUSTERS

Sobald die gewünschte Schlüsselverwaltung eingerichtet ist, können wir mit der Erstellung der Datenbankinstanz beginnen. Das Schöne daran ist, dass es nur eine einzige Zeile braucht. PostgreSQL übernimmt die gesamte Arbeit für Sie:

 % initdb -D /some_path/db12tde -K /somewhere/provide_key.sh 
 The files belonging to this database system will be owned by user "hs".
 This user must also own the server process.

 The database cluster will be initialized with locale "C".
 The default database encoding has accordingly been set to "SQL_ASCII".
 The default text search configuration will be set to "english".

 Data page checksums are disabled.
 Data encryption is enabled.

 creating directory /some_path/db12tde ... ok
 creating subdirectories ... ok
 selecting dynamic shared memory implementation ... posix
 selecting default max_connections ... 100
 selecting default shared_buffers ... 128MB
 selecting default time zone ... Europe/Berlin
 creating configuration files ... ok
 running bootstrap script ... ok
 performing post-bootstrap initialization ... ok
 syncing data to disk ... ok

 initdb: warning: enabling "trust" authentication for local connections
 You can change this by editing pg_hba.conf or using the option -A, or
 --auth-local and --auth-host, the next time you run initdb.

 Success. You can now start the database server using:

     pg_ctl -D /some_path/db12tde -l logfile start

Der einzige Unterschied zwischen PostgreSQL und PostgreSQL TDE besteht darin, dass es eine optionale -K-Option gibt. Sobald Sie den Namen Ihrer ausführbaren Schlüsselverwaltungsdatei an initdb übergeben, passiert der Rest ganz automatisch. Sie müssen nichts weiter tun und können die Datenbank ganz normal starten:

 % pg_ctl -D /some_path/db12tde start
 2020-01-29 11:54:19.131 CET [42193] LOG:  starting PostgreSQL 12.X-TDE-1.0beta2 on
 x86_64-apple-darwin19.2.0, compiled by Apple clang version 11.0.0 (clang-1100.0.33.17),
 64-bit
 2020-01-29 11:54:19.132 CET [42193] LOG:  listening on IPv6 address "::1", port 5432
 2020-01-29 11:54:19.132 CET [42193] LOG:  listening on IPv4 address "127.0.0.1", port
 5432
 2020-01-29 11:54:19.133 CET [42193] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
 waiting for server to start.…
 2020-01-29 11:54:19.151 CET [42197] LOG:  database system was shut down at 2020-01-29  
 11:54:05 CET
 2020-01-29 11:54:19.154 CET [42193] LOG:  database system is ready to accept connections
  done
 server started

Es bedarf keiner zusätzlichen Parameter. Im Hintergrund ist bereits alles für Sie vorbereitet.

Sie können die englische Installationsanleitung „INSTALLING POSTGRESQL 12.X TDE FROM SOURCE“ hier als PDF herunterladen:

Download TDE installation guide >>

Bugs bitte an [email protected] reporten!

Bug melden >>

ENCRYPTION BEHIND THE SCENES

Der Grund, warum Sie keine zusätzlichen Parameter benötigen, ist, dass initdb die Konfiguration bereits in postgresql.conf für Sie hinzugefügt hat:

 % grep encryption_key postgresql.conf 
 encryption_key_command = '/somewhere/provide_key.sh'

postgresql.conf verfügt bereits über die Informationen, um den Schlüssel beim Start abzurufen. Der Vorteil ist, dass Sie keine bestehenden Skripte anpassen müssen. Die einzige Änderung, die Sie vornehmen müssen, ist das Hinzufügen eines weiteren Parameters zu initdb. Et voilá – Sie sind fertig!

 

IST MEIN DATENBANK-SERVER NUN VERSCHLÜSSELT?

Die naheliegendste und häufigste Frage ist an dieser Stelle: Ist das wirklich alles? Wie kann ich überprüfen, ob mein Server wirklich verschlüsselt ist? Dazu können Sie pg_controldata verwenden, ein Programm, das einige nützliche Informationen aus Ihrem Datenbankserver extrahiert. Denken Sie daran, dass pg_controldata NICHTS mit TDE zu tun hat – es ist ohnehin vorhanden in PostgreSQL.

Im Falle von PostgreSQL TDE produziert pg_controldata etwas mehr Informationen als üblich:

 % pg_controldata /some_where/ | grep -i encryp
 Data encryption:           on
 Data encryption fingerprint:          740A905130FE614CE0BE36B612157A09

Wie Sie sehen können, ist die Verschlüsselung eingeschaltet und Ihre Daten sind sicher.

Wenn Sie jedoch keinen Zugriff auf den Rechner über SSH haben, gibt es eine zweite Möglichkeit, um zu sehen, ob die Daten verschlüsselt sind:

 test=# SHOW data_encryption;
  data_encryption 
 ----------------
  on
 (1 row)

PostgreSQL TDE bietet eine zusätzliche Variable. data_encryption on / off zeigt Ihnen an, ob die Datenbank verschlüsselt ist oder nicht.

MEHR INFORMATION

Wenn Sie mehr erfahren möchten, empfehlen wir Ihnen, regelmäßig unsere Website zu besuchen und uns auf Twitter (@PostgresSupport) zu folgen.

Wir werden Sie über die neuesten Entwicklungen auf dem Laufenden halten. Wir möchten Sie auch darauf hinweisen, dass CYBERTEC kommerziellen 24×7-Support für PostgreSQL TDE anbietet.

Wenn Sie Fragen haben, können Sie uns gerne kontaktieren!

KONTAKT >>

 

<< Zurück zu PostgreSQL Transparent Data Encryption