Hyper Protect Crypto Services PKCS #11 für Oracle Transparent Database Encryption verwenden
Transparent Data Encryption (TDE) ist eine etablierte Technologie zur Verschlüsselung sensibler Daten in Datenbanken. TDE wird von verschiedenen gängigen Datenbanksystemen unterstützt, sowohl in der Cloud als auch lokal, wie z. B. Oracle®-Datenbank. Mit TDE verschlüsselt ein Datenbanksystem Daten auf Datenbankspeichermedien (wie z. B. Tabellenbereichen und Dateien) und auf Sicherungsdatenträgern. Das Datenbanksystem ver- und entschlüsselt Daten automatisch und transparent, wenn sie von berechtigten Benutzern und Anwendungen verwendet werden. Datenbankbenutzer brauchen TDE nicht zu beachten und Datenbankanwendungen müssen nicht speziell für TDE angepasst werden.
In der Regel verwendet TDE eine Schlüsselhierarchie mit zwei Ebenen, die sich aus einem TDE-Masterverschlüsselungsschlüssel und einem TDE-Datenverschlüsselungsschlüssel zusammensetzt. Der TDE-Datenverschlüsselungsschlüssel dient zur Ver- und Entschlüsselung von Daten, während der TDE-Masterverschlüsselungsschlüssel zur Ver- und Entschlüsselung des TDE-Datenverschlüsselungsschlüssels dient.
Daraus ergibt sich eine wichtige Frage, wenn Sie den Einsatz von TDE planen: Wo bewahren Sie den TDE-Masterverschlüsselungsschlüssel auf und wie schützen Sie ihn?
Ziele
Dieses Lernprogramm demonstriert, wie Sie vollständige und exklusive Kontrolle über Ihre TDE-Masterverschlüsselungsschlüssel behalten können, indem Sie sie in IBM Cloud® Hyper Protect Crypto Services speichern. Zu diesem Zweck müssen Sie die PKCS #11-Integrationsfunktion von Hyper Protect Crypto Services verwenden.
Mit diesem Lernprogramm werden Sie die Konfiguration einrichten, die in der folgenden Abbildung dargestellt wird.
Diese Konfiguration sieht vor, dass die Oracle-Datenbank Operationen aufruft, um die TDE-Masterverschlüsselungsschlüssel in der PKCS #11-Bibliothek von Hyper Protect Crypto Services zu verwalten. Die PKCS #11-Bibliothek von Hyper Protect Crypto Services interagiert mit Ihrer Hyper Protect Crypto Services-Instanz, durch die eine führende Technologie zur Speicherung und Verwaltung von TDE-Masterverschlüsselungsschlüssel zur Verfügung gestellt wird.
Vorbereitende Schritte
Zum Durcharbeiten dieses Lernprogramms müssen Sie die folgenden Voraussetzungen erfüllen:
Ablauf
Führen Sie die folgenden Schritte aus, um diese Lösung zu implementieren:
- Initialisieren Sie Ihre Hyper Protect Crypto Services-Instanz.
- Hyper Protect Crypto Services-PKCS #11-Bibliothek in der Oracle-Datenbankumgebung einrichten
- Oracle Database TDE einrichten und Daten verschlüsseln.
Beginnen Sie mit dem Initialisierungsprozess für die Hyper Protect Crypto Services-Instanz.
Hyper Protect Crypto Services-Instanz initialisieren
-
Für dieses Lernprogramm müssen Sie zunächst eine Hyper Protect Crypto Services-Instanz initialisieren.
Notieren Sie die ID Ihrer Hyper Protect Crypto Services-Instanz und die EP11-Endpunktadresse. Sie benötigen diese Informationen für die nachfolgenden Schritte.
-
Generieren Sie einen API-Schlüssel für den Zugriff auf Ihre Hyper Protect Crypto Services-Instanz. Führen Sie den folgenden Befehl aus, um einen API-Schlüssel für Ihr IBM Cloud-Konto zu erstellen:
ibmcloud iam api-key-create apikeyhpcs -d "API key for Hyper Protect Crypto Services PKCS11" -
Speichern Sie den Wert des API-Schlüssels für nachfolgende Schritte.
Hyper Protect Crypto Services-PKCS #11-Bibliothek in der Oracle Database-Umgebung einrichten
1. Oracle Database einrichten
Sie benötigen eine Oracle Database Enterprise Edition-Installation mit Oracle Advanced Security. In diesem Lernprogramm wird ein Oracle Database 19.3 Enterprise Edition Docker-Container mit einer Instanz verwendet. Weitere Informationen zu Oracle Database-Containern und Anweisungen zum Erstellen eines entsprechenden Containers finden Sie unter Oracle Database in Docker.
-
Starten Sie den Oracle Database-Container:
docker run --name oradb -p 1521:1521 -p 5500:5500 -e ORACLE_PWD=password oracle/database:19.3.0-eeWarten Sie ab, bis die Instanz- und Datenbankerstellung abgeschlossen ist.
-
Führen Sie den folgenden Befehl über eine Befehlszeile auf Ihrem Hostsystem aus:
docker exec -it --user root --workdir / oradb bashDiese Shell kann für die Ausführung der Befehle als
rootfür die nachfolgenden Schritte verwendet werden.
2. Hyper Protect Crypto Services-PKCS #11-Bibliothek konfigurieren
Erstellen Sie nun eine Konfigurationsdatei für das PKCS #11-Feature von Hyper Protect Crypto Services. Die Konfigurationsdatei hat den Namen grep11client.yaml.
Passen Sie die folgende Dateivorlage an und geben Sie der Datei den Namen grep11client.yaml:
- Ersetzen Sie
<instance_ID>durch die ID Ihrer Hyper Protect Crypto Services-Instanz. - Ersetzen Sie
<EP11_endpoint_URL>und<EP11_endpoint_port_number>durch die entsprechenden Parameter der EP11-Endpunktadresse Ihrer Hyper Protect Crypto Services-Instanz. - Ersetzen Sie
<your_api_key>durch den Wert des erstellten API-Schlüssels.
iamcredentialtemplate: &defaultiamcredential
enabled: true
endpoint: "https://iam.cloud.ibm.com"
# Keep the 'apikey' empty. It will be overridden by the Anonymous user API key configured later.
apikey:
# The Universally Unique IDentifier (UUID) of your Hyper Protect Crypto Services instance.
instance: "<instance_ID>"
tokens:
0:
grep11connection:
# The EP11 endpoint address starting from 'ep11'.
# For example: "<instance_ID>.ep11.us-south.hs-crypto.appdomain.cloud"
address: "<EP11_endpoint_URL>"
# The EP11 endpoint port number
port: "<EP11_endpoint_port_number>"
tls:
# Grep11 requires TLS connection.
enabled: true
# Grep11 requires server only authentication, so 'mutual' needs to be set as 'false'.
mutual: false
# 'cacert' is a full-path certificate file.
# In Linux with the 'ca-ca-certificates' package installed, this is normally not needed.
cacert:
# Grep11 requires the server-only authentication, so 'certfile' and 'keyfile' need to be empty.
certfile:
keyfile:
storage:
filestore:
enabled: false
storagepath:
# 'remotestore' needs to be enabled if you want to generate keys with the attribute CKA_TOKEN.
remotestore:
enabled: true
users:
0: # The index of the Security Officer (SO) user MUST be 0.
# The name for the Security Officer (SO) user. For example: "Administrator".
# NEVER put the API key under the SO user for security reasons.
name: "Administrator"
iamauth:
<<: *defaultiamcredential
1: # The index of the normal user MUST be 1.
# The name for the normal user. For example: "Normal user".
# NEVER put the API key under the normal user for security reasons.
name: "Normal user"
# The Space ID is a 128-bit UUID and can be chosen freely.
# The UUID can be generated by third-party tools, such as 'https://www.uuidgenerator.net/'.
# For example: "f00db2f1-4421-4032-a505-465bedfa845b".
# 'tokenspaceID' under the normal user is to identify the private keystore.
tokenspaceID: "f00db2f1-4421-4032-a505-465bedfa845b"
iamauth:
<<: *defaultiamcredential
2: # The index of the anonymous user MUST be 2.
# The name for the anonymous user. For example: "Anonymous".
name: "Anonymous"
# The Space ID is a 128-bit UUID and can be chosen freely.
# The UUID can be generated by third-party tools, such as 'https://www.uuidgenerator.net/'.
# For example: "ca22be26-b798-4fdf-8c83-3e3a492dc215".
# 'tokenspaceID' under the anonymous user is to identify the public keystore.
tokenspaceID: "ca22be26-b798-4fdf-8c83-3e3a492dc215"
iamauth:
<<: *defaultiamcredential
# This API key for the Anonymous user must be provided.
# It will overide the 'apikey' in the previous defaultcredentials.iamauth.apikey field
apikey: "<your_api_key>"
logging:
# Set the logging level.
# The supported levels, in an increasing order of verboseness, are:
# 'panic', 'fatal', 'error', 'warning'/'warn', 'info', 'debug', 'trace'.
# The Default value is 'debug'.
loglevel: debug
# The full path of your logging file.
# For example: /tmp/grep11client.log
logpath: /tmp/grep11client.log
3. Hyper Protect Crypto Services-PKCS #11-Bibliothek installieren
-
Kopieren Sie die erstellte Konfigurationsdatei
grep11client.yamlund die PKCS #11-Bibliothekpkcs11-grep11-<platform>.so.<version>in den Ausgangsordner in Ihrem Oracle Database-Container. -
Führen Sie die folgenden Befehle als Rootbenutzer (
root) aus, um die PKCS #11-Bibliothek von Hyper Protect Crypto Services in Ihrem Oracle Database-Setup zu installieren.mkdir /etc/ep11client chmod a+rx /etc/ep11client/ cp grep11client.yaml /etc/ep11client/grep11client.yaml chmod a+r /etc/ep11client/grep11client.yaml mkdir -p /opt/oracle/extapi/64/hsm/ibm cp pkcs11-grep11.so.1.1.3 /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so chown -R oracle:oinstall /opt/oracle/extapi touch /tmp/grep11client.log chmod a+rw /tmp/grep11client.log chown oracle:oinstall /tmp/grep11client.log
Das Verzeichnis /opt/oracle/extapi/64/hsm und die Unterverzeichnisse können nur eine Bibliotheksdatei enthalten. Entfernen Sie alle anderen Dateien aus diesem Verzeichnis und den Unterverzeichnissen.
4. Bibliothekskonfiguration prüfen
-
Installieren Sie das OpenSC-Befehlszeilendienstprogramm (pkcs11-tool) mit dem folgenden Befehl:
sudo yum install opensc -
Führen Sie den folgenden Befehl als Rootbenutzer (
root) aus, um die Bibliothekskonfiguration zu prüfen:pkcs11-tool --module=/opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so -IDieser Befehl gibt Informationen zum Hersteller und zur Bibliothek aus. Beispiel:
Cryptoki version 2.40 Manufacturer IBM ... Library GREP11 PKCS11 client ...
5. Hyper Protect Crypto Services PKCS #11-Bibliothek initialisieren
-
Führen Sie den folgenden Befehl über eine Befehlszeile auf Ihrem Hostsystem aus:
docker exec -it oradb bashDiese Shell kann verwendet werden, um die Befehle als Benutzer
oraclefür die nachfolgenden Schritte auszuführen. -
Führen Sie zum Initialisieren eines Tokens die folgenden Befehle aus und ersetzen Sie
<your_api_key>durch den von Ihnen erstellten API-Schlüssel.pkcs11-tool --module /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so --init-token --label dbtoken --so-pin=<your_api_key>Dieser Befehl gibt eine Statusnachricht wie im folgenden Beispiel aus:
Using slot 0 with a present token (0x0) Token successfully initialized
Oracle Database-TDE einrichten und Ihre Daten verschlüsseln
Nehmen wir nun die Rolle des Datenbankadministrators an.
-
Aktualisieren Sie die Datei „sqlnet.ora“ im Verzeichnis „$ORACLE_HOME/network/admin“, indem Sie folgende Zeile hinzufügen:
encryption_wallet_location=(source=(method=hsm))Dazu können Sie beispielsweise den folgenden Befehl ausführen:
echo "encryption_wallet_location=(source=(method=hsm))" >> $ORACLE_HOME/network/admin/sqlnet.oraStellen Sie sicher, dass die Datei „sqlnet.ora“ keine weitere Einstellung für
encryption_wallet_locationenthält. -
Öffnen Sie den Keystore mit dem folgenden Befehl: Ersetzen Sie
<your_api_key>durch den von Ihnen erstellten API-Schlüssel:export ORACLE_SID=<your SID, e.g. ORCLCDB> sqlplus / as sysdba SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<your_api_key>" CONTAINER=ALL; -
Erstellen Sie die Masterschlüssel mit dem folgenden Befehl. Ersetzen Sie
<your_api_key>durch den von Ihnen erstellten API-Schlüssel:SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<your_api_key>" WITH BACKUP CONTAINER=ALL; -
Erstellen Sie mit dem folgenden Befehl einen verschlüsselten Tabellenbereich:
SQL> CREATE TABLESPACE encrypted_ts DATAFILE 'tbs1_data.dbf' SIZE 128K AUTOEXTEND ON NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT); -
Um die Konfiguration zu überprüfen, können Sie eine Tabelle im verschlüsselten Tabellenbereich erstellen und einige Testdaten einfügen:
SQL> CREATE TABLE tde_ts_test (id NUMBER(10), data VARCHAR2(50)) TABLESPACE encrypted_ts; SQL> INSERT INTO tde_ts_test VALUES (1, 'This is a secret!'); SQL> COMMIT; SQL> SELECT * FROM TDE_TS_TEST; -
Sie können auch eine Tabelle mit einer verschlüsselten Spalte erstellen und einige Testdaten einfügen:
SQL> CREATE USER C##test IDENTIFIED BY test; SQL> GRANT UNLIMITED TABLESPACE TO C##test; SQL> CREATE TABLE C##test.tde_test (id NUMBER(10), data VARCHAR2(50) ENCRYPT); SQL> INSERT INTO C##test.tde_test VALUES (1, 'This is also a secret!'); SQL> COMMIT; SQL> SELECT * FROM C##test.tde_test; # Verify encrypted tablespace and encrypted column SQL> SELECT TABLESPACE_NAME, ENCRYPTED FROM DBA_TABLESPACES; SQL> SELECT * FROM dba_encrypted_columns ;
Nächste Schritte
Ihre sensiblen Daten werden jetzt sicher in verschlüsselten Tabellen und verschlüsselten Spalten gespeichert. Und der TDE-Masterverschlüsselungsschlüssel wird in Hyper Protect Crypto Services in hoch sicherer und manipulationsgeschützter Weise aufbewahrt.
In diesem Lernprogramm haben Sie gelernt, wie Oracle Database TDE mit Hyper Protect Crypto Services eingerichtet wird.
- Machen Sie sich eingehender mit PKCS #11 vertraut.
- Informieren Sie sich weiterhin über die PKCS #11-API.
- Beginnen Sie mit der Verwendung der PKCS #11-API.