Hyper Protect Crypto Services PKCS #11 für die native IBM Db2-Verschlüsselung verwenden
Die native IBM Db2®-Verschlüsselung schützt wichtige Datenbankdateien und Datenbank-Backup-Images gegen unzulässigen Zugriff, während sie auf externen Speichermedien gespeichert sind. Das Datenbanksystem ver- und entschlüsselt Daten automatisch, wenn sie von berechtigten Benutzern und Anwendungen verwendet werden. In der Regel brauchen Datenbankbenutzer die native Verschlüsselung nicht besonders zu beachten und Datenbankclientanwendungen müssen nicht speziell angepasst werden.
Die native Db2-Verschlüsselung verwendet eine zweischichtige Schlüsselhierarchie: Daten werden mit einem Datenverschlüsselungsschlüssel (DEK - Data Encryption Key) verschlüsselt. Der DEK wird mit einem Masterschlüssel verschlüsselt und in verschlüsselter Form zusammen mit der Datenbank oder dem Backup-Image gespeichert. Von Db2 wird ein eindeutiger DEK für jede verschlüsselte Datenbank und für jedes verschlüsselte Backup generiert.
Ein Masterschlüssel wird zur Verschlüsselung eines DEK verwendet. Jede verschlüsselte Datenbank ist zu einem Zeitpunkt nur einem Masterschlüssel zugeordnet.
Wenn Sie eine native Verschlüsselung von Db2 planen, ist unbedingt zu klären, wo Sie den Masterschlüssel aufbewahren und wie Sie ihn sichern wollen.
Ziele
Dieses Lernprogramm demonstriert, wie Sie vollständige und exklusive Kontrolle über Ihre 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 Db2 Operationen zur Verwaltung der Masterschlüssel in der PKCS #11-Bibliothek von Hyper Protect Crypto Services aufrufen soll. 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 Ihrer Masterschlü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:
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.
-
Erstellen Sie eine angepasste IAM-Rolle
Discover HPCS. Diese Rolle bietet eine sehr eingeschränkte Berechtigung zur Erkennung Ihrer Hyper Protect Crypto Services-Instanz, die für die PKCS #11-Bibliothek erforderlich ist. Diese Rolle hat keine Berechtigungen zum Verwenden, Erstellen oder Verwalten von Schlüsseln oder EP11-Keystores.- Rufen Sie in der Benutzerschnittstelle Verwalten > Zugriff (IAM) auf, wählen Sie Rollen aus und klicken Sie dann auf Erstellen.
- Geben Sie den Namen
Discover HPCSfür Ihre Rolle ein. - Geben Sie eine ID für die Rolle ein. Diese ID wird in dem CRN verwendet, der verwendet wird, wenn Sie den Zugriff über die API zuordnen. Die Rollen-ID muss mit einem Großbuchstaben beginnen und darf nur alphanumerische Zeichen enthalten,
z. B.
DiscoverHPCS. - Optional können Sie eine kurze und hilfreiche Beschreibung eingeben, die Benutzer, die Zugriffsberechtigungen zuweisen, darüber informiert, welche Zugriffsebene diese Rollenzuweisung einem Benutzer erteilt. Diese Beschreibung wird auch in der Benutzerschnittstelle angezeigt, wenn ein Benutzer Zugriff auf den Service zuordnet.
- Wählen Sie in der Liste der Services Hyper Protect Crypto Services aus.
- Wählen Sie Hinzufügen als Aktion
hs-crypto.discovery.listserversaus und klicken Sie dann auf Erstellen.
-
Befolgen Sie die Anweisungen unter PKCS #11-API-Benutzertypen einrichten, um die Service-IDs und API-Schlüssel für den normalen Benutzer und den anonymen Benutzer einzurichten.
Richten Sie nicht den in den Anweisungen genannten SO-Benutzertyp ein. Weisen Sie im Gegensatz zu den Anweisungen auch der anonymen Benutzerservice-ID nicht die angepasste Rolle
Key operatorzu, sondern weisen Sie stattdessen die angepasste RolleDiscover HPCSzu.Bei dieser Konfiguration besitzt der anonyme Benutzer nur sehr begrenzte Berechtigungen für Ihre Hyper Protect Crypto Services-Instanz und kann keine Schlüssel oder EP11-Schlüsselspeicher verwenden, erstellen oder verwalten.
-
Speichern Sie den Wert der API-Schlüssel für den normalen Benutzer sowie den anonymen Benutzer für nachfolgende Schritte.
-
Befolgen Sie die Anweisungen unter Anweisungen, um einen privaten EP11-Keystore zu erstellen, und notieren Sie die Keystore-ID für nachfolgende Schritte.
Hyper Protect Crypto Services-PKCS #11-Bibliothek einrichten
1. Db2 Community Edition-Container ausführen
-
Verwenden Sie den folgenden Befehl, um den Db2 Community Edition-Container auszuführen:
docker run -itd --name mydb --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=password -e DBNAME=testdb ibmcom/db2 -
Führen Sie den folgenden Befehl über eine Befehlszeile auf Ihrem Hostsystem aus:
docker exec -it --user root --workdir / mydb bash
Diese Shell wird zum Ausführen der Befehle unter dem Rootbenutzer (root) für die nachfolgenden Schritte verwendet.
2. Hyper Protect Crypto Services-PKCS #11-Konfigurationsdatei einrichten
Sie erstellen 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
<private_keystore_id>durch die ID des privaten Keystores, den Sie zuvor erstellt haben. - Ersetzen Sie
<anonymous_user_api_key>durch den entsprechenden API-Schlüssel des anonymen Benutzers.
iamcredentialtemplate: &defaultiamcredential
enabled: true
endpoint: "https://iam.cloud.ibm.com"
# 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>"
port: "<EP11_endpoint_port_number>" # The EP11 endpoint port number
tls:
enabled: true # EP11 requires TLS connection.
mutual: false
storage:
remotestore:
enabled: true
users:
# The Security Officer (SO) user
0: # The index of the Security Officer (SO) user MUST be 0.
# The name for the Security Officer (SO) user. For example: "Administrator":
name: "Administrator"
iamauth: *defaultiamcredential
# The normal user
1: # The index of the normal user MUST be 1.
# The name for the normal user. For example: "Normal user":
name: "Normal user"
# The 128-bit UUID of the private keystore which you created previously
tokenspaceID: "<private_keystore_id>"
iamauth: *defaultiamcredential
# The anonymous user
2: # The index of the anonymous user MUST be 2.
# The name for the anonymous user. For example: "Anonymous":
name: "Anonymous"
# The public keystore will not be used with this setup.
# Specify an arbitrary 128-bit UUID below, e.g.:
tokenspaceID: "12345678-1234-1234-1234-1234567890AB"
iamauth:
<<: *defaultiamcredential
# Provide the API key for the Anonymous user.
apikey: "<anonymous_user_api_key>"
logging:
# Set the logging level.
# The supported levels, in an increasing order of verboseness: 'panic', 'fatal', 'error', 'warning'/'warn', 'info', 'debug', 'trace'. The Default value is 'warning'.
loglevel: "info"
logpath: "/tmp/grep11client.log" # The full path of your logging file.
3. Hyper Protect Crypto Services-PKCS #11-Bibliothek installieren
-
Kopieren Sie die zuvor erstellte Konfigurationsdatei
grep11client.yamlund die PKCS #11-Bibliothekpkcs11-grep11-<platform>.so.<version>in Ihren Db2-Container. -
Führen Sie die folgenden Befehle als Rootbenutzer (
root) aus, um die PKCS #11-Bibliothek von Hyper Protect Crypto Services in Ihrem Db2 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 /pkcs11 cp pkcs11-grep11-<platform>.so.<version> /pkcs11/pkcs11-grep11.so chmod -R a+rwx /pkcs11 touch /tmp/grep11client.log chmod a+rw /tmp/grep11client.log
Native Db2-Verschlüsselung einrichten
Jetzt richten wir die native Db2-Verschlüsselung ein. Stellen Sie zunächst sicher, dass Sie über alle Datenbankadministratorberechtigungen verfügen.
-
Erstellen Sie die Datei
/pkcs11/keystore.confmit dem folgenden Inhalt:VERSION=1 PRODUCT_NAME=Other ALLOW_KEY_INSERT_WITHOUT_KEYSTORE_BACKUP=true LIBRARY=/pkcs11/pkcs11-grep11.so SLOT_ID=0 NEW_OBJECT_TYPE=PRIVATE KEYSTORE_STASH=/pkcs11/pkcs11_pw.sth -
Führen Sie die folgenden Befehls als Rootbenutzer (
root) aus, um die Eigentümerschaft und die Berechtigungen der Datei/pkcs11/keystore.confzu aktualisieren:chown -R db2inst1:db2iadm1 /pkcs11/keystore.conf chmod ug+rw /pkcs11/keystore.conf -
Führen Sie die folgenden Befehle aus und ersetzen Sie <normal_user_api_key> durch den API-Schlüssel des von Ihnen erstellten normalen Benutzers, um eine Kennwort-Stashdatei zu erstellen.
su - db2inst1 db2credman -stash -password "<normal_user_api_key>" -to /pkcs11/pkcs11_pw.sth -
Um die Db2-Konfiguration zu aktualisieren, führen Sie den folgenden Befehl als Benutzer
db2inst1aus:db2 update dbm cfg using keystore_location /pkcs11/keystore.conf keystore_type pkcs11 -
Zum Festlegen der Umgebungsvariablen
DB2_DEK_MAC_TYPEführen Sie die folgenden Befehle als Benutzerdb2inst1aus und starten Db2 erneut:db2 terminate db2stop export DB2_DEK_MAC_TYPE=HMAC db2startBevor Sie Db2 starten, müssen Sie die Umgebungsvariable
DB2_DEK_MAC_TYPE=HMACangeben. Wenn Sie Db2 unter Windows verwenden, müssen Sie die Db2-Profilvariable mit dem folgenden Befehl festlegen:db2set -g DB2_DEK_MAC_TYPE=HMAC -
Führen Sie die folgenden Befehle aus, um eine verschlüsselte Datenbank zu erstellen:
db2 create db cryptdb1 encryptDieser Befehl gibt die folgenden Informationen aus:
DB20000I The CREATE DATABASE command completed successfully. -
Zum Testen der verschlüsselten Datenbank führen Sie die folgenden Befehle aus:
db2 connect to cryptdb1 db2 "create table test (id int not null, data varchar(100))" db2 "insert into test values (1, 'This is a secret text')" db2 "select * from test"Dieser Befehl gibt die folgenden Informationen aus:
ID DATA ----------- ---------------------------------------------------------------------------------------------------- 1 This is a secret text 1 record(s) selected.
Nächste Schritte
Ihre schutzwürdigen Daten werden jetzt sicher in einem verschlüsselten Speicher gespeichert. Und der Masterschlüssel wird in Hyper Protect Crypto Services in hochsicherer und gegen Manipulation geschützter Weise aufbewahrt.
In diesem Lernprogramm haben Sie gelernt, wie die native Db2-Verschlüsselung 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.