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.

IBM Db2 Standardverschlüsselung mit der Standard-PKCS #11 -API
Abbildung 1. IBM Db2-Standardverschlüsselung mit der Standard-PKCS #11-API

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:

  1. Hyper Protect Crypto Services-Instanz initialisieren
  2. Hyper Protect Crypto Services-PKCS #11-Bibliothek einrichten
  3. Db2 einrichten und native Db2-Verschlüsselung konfigurieren

Hyper Protect Crypto Services-Instanz initialisieren

  1. 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.

  2. 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.

    1. Rufen Sie in der Benutzerschnittstelle Verwalten > Zugriff (IAM) auf, wählen Sie Rollen aus und klicken Sie dann auf Erstellen.
    2. Geben Sie den Namen Discover HPCS für Ihre Rolle ein.
    3. 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.
    4. 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.
    5. Wählen Sie in der Liste der Services Hyper Protect Crypto Services aus.
    6. Wählen Sie Hinzufügen als Aktion hs-crypto.discovery.listservers aus und klicken Sie dann auf Erstellen.
  3. 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 operator zu, sondern weisen Sie stattdessen die angepasste Rolle Discover HPCS zu.

    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.

  4. Speichern Sie den Wert der API-Schlüssel für den normalen Benutzer sowie den anonymen Benutzer für nachfolgende Schritte.

  5. 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

  1. 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
    
  2. 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

  1. Laden Sie die neueste PKCS #11 -Bibliothek herunter.

  2. Kopieren Sie die zuvor erstellte Konfigurationsdatei grep11client.yaml und die PKCS #11-Bibliothek pkcs11-grep11-<platform>.so.<version> in Ihren Db2-Container.

  3. 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.

  1. Erstellen Sie die Datei /pkcs11/keystore.conf mit 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
    
  2. Führen Sie die folgenden Befehls als Rootbenutzer (root) aus, um die Eigentümerschaft und die Berechtigungen der Datei /pkcs11/keystore.conf zu aktualisieren:

    chown -R db2inst1:db2iadm1 /pkcs11/keystore.conf
    chmod ug+rw /pkcs11/keystore.conf
    
  3. 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
    
  4. Um die Db2-Konfiguration zu aktualisieren, führen Sie den folgenden Befehl als Benutzer db2inst1 aus:

    db2 update dbm cfg using keystore_location /pkcs11/keystore.conf  keystore_type pkcs11
    
  5. Zum Festlegen der Umgebungsvariablen DB2_DEK_MAC_TYPE führen Sie die folgenden Befehle als Benutzer db2inst1 aus und starten Db2 erneut:

    db2 terminate
    db2stop
    export DB2_DEK_MAC_TYPE=HMAC
    db2start
    

    Bevor Sie Db2 starten, müssen Sie die Umgebungsvariable DB2_DEK_MAC_TYPE=HMAC angeben. Wenn Sie Db2 unter Windows verwenden, müssen Sie die Db2-Profilvariable mit dem folgenden Befehl festlegen:

    db2set -g DB2_DEK_MAC_TYPE=HMAC
    
  6. Führen Sie die folgenden Befehle aus, um eine verschlüsselte Datenbank zu erstellen:

    db2 create db cryptdb1 encrypt
    

    Dieser Befehl gibt die folgenden Informationen aus:

    DB20000I  The CREATE DATABASE command completed successfully.
    
  7. 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.