Utilisation de Hyper Protect Crypto Services PKCS #11 pour le chiffrement natif IBM Db2

Le chiffrement natif d'IBM Db2® protège les fichiers de base de données de clés et les images de sauvegarde de base de données de tout accès inapproprié lorsque ces éléments sont stockés sur des supports de stockage externes. Le système de base de données chiffre et déchiffre automatiquement les données lorsqu'il est utilisé par les utilisateurs et les applications autorisés. En général, les utilisateurs de base de données n'ont pas besoin de connaître le chiffrement natif et les applications client de base de données n'ont pas besoin d'être adaptées spécifiquement.

Le chiffrement natif de Db2 utilise une hiérarchie de clés à deux niveaux : les données sont chiffrées à l'aide d'une clé de chiffrement de données (DEK). La clé de chiffrement de données (DEK) est chiffrée avec une clé principale et est stockée sous sa forme chiffrée avec la base de données ou l'image de sauvegarde. Une clé de chiffrement de données (DEK) unique est générée par Db2 pour chaque base de données chiffrée et pour chaque sauvegarde chiffrée.

Une clé principale est utilisée pour chiffrer une clé de chiffrement de données (DEK). Chaque base de données chiffrée est associée à une clé principale à la fois.

Une question importante lorsque vous planifiez le chiffrement natif Db2 est de savoir où vous conservez la clé principale et comment vous la sécurisez.

Objectifs

Ce tutoriel vous montre comment garder le contrôle complet et exclusif de vos clés principales en les stockant dans IBM Cloud® Hyper Protect Crypto Services. Pour cela, vous devez utiliser la fonction d'intégration PKCS #11 d'Hyper Protect Crypto Services.

Au cours de ce tutoriel, vous allez implémenter la configuration décrite dans l'illustration ci-après.

IBM Db2 avec l'API PKCS #11 standard
Figure 1. Chiffrement par défaut IBM Db2 avec l'API #11 standard de PKCS

Dans cette configuration, Db2 appelle des opérations pour gérer les clés principales sur la bibliothèque PKCS #11 d'Hyper Protect Crypto Services. La bibliothèque PKCS #11 d'Hyper Protect Crypto Services interagit avec votre instance Hyper Protect Crypto Services afin de fournir la technologie de référence pour le stockage et la gestion de vos clés de chiffrement principales.

Avant de commencer

Avant de suivre ce tutoriel, vous devez :

Flux de tâches

Pour mener à bien cette solution, voici les étapes à suivre :

  1. Initialisation de votre instance Hyper Protect Crypto Services
  2. Configuration de la bibliothèque PKCS #11 d'Hyper Protect Crypto Services
  3. Configuration de Db2 et du chiffrement natif de Db2

Initialisation de votre instance Hyper Protect Crypto Services

  1. Avant d'exécuter ce tutoriel, vous devez commencer par initialiser une instance Hyper Protect Crypto Services.

    Notez l'ID de votre instance Hyper Protect Crypto Services et l'adresse de noeud final EP11. Vous aurez besoin de ces informations pour les étapes ultérieures.

  2. Créez un rôle IAM personnalisé Discover HPCS. Ce rôle fournit une autorisation très limitée pour la reconnaissance de votre instance Hyper Protect Crypto Services, qui est requise par la bibliothèque PKCS #11. Ce rôle n'est pas autorisé à utiliser, créer ou gérer des clés ou des fichiers de clés EP11.

    1. Dans l'interface utilisateur, accédez à Gérer > Accès (IAM), sélectionnez Rôles, puis cliquez sur Créer.
    2. Entrez le nom Discover HPCS pour votre rôle.
    3. Entrez un ID pour le rôle. Cet ID est utilisé dans le CRN, qui est utilisé lorsque vous affectez un accès à l'aide de l'API. L'ID de rôle doit commencer par une lettre majuscule et utiliser uniquement des caractères alphanumériques ; par exemple, DiscoverHPCS.
    4. Facultatif : entrez une description brève et utile qui aidera les utilisateurs qui attribuent les accès à savoir quel niveau d'accès cette affectation de rôle donnera à un utilisateur. Cette description apparaît également dans l'interface utilisateur lorsqu'un utilisateur affecte un accès au service.
    5. Dans la liste des services, sélectionnez Services Hyper Protect Crypto
    6. Sélectionnez Ajouter pour l'action hs-crypto.discovery.listservers, puis cliquez sur Créer.
  3. Suivez les instructions de Configuration des types d'utilisateur de l'API PKCS #11 pour configurer les ID de service et les clés d'API pour l'utilisateur normal et l'utilisateur anonyme.

    Ne définissez pas le type d'utilisateur SO mentionné dans les instructions. Par ailleurs, contrairement aux instructions, n'attribuez pas le rôle personnalisé Key operator à l'ID de service de l'utilisateur anonyme, mais plutôt le rôle personnalisé Discover HPCS.

    Avec cette configuration, l'utilisateur anonyme ne dispose que de droits très limités sur votre instance Hyper Protect Crypto Services et ne peut pas utiliser, créer ou gérer des clés ou des fichiers de clés EP11.

  4. Enregistrez la valeur des clés de l'API pour l'utilisateur normal et l'utilisateur anonyme pour les étapes suivantes.

  5. Suivez les instructions pour créer un fichier de clés EP11 privé et notez l'ID du fichier de clés pour les étapes suivantes.

Configuration de la bibliothèque PKCS #11 d'Hyper Protect Crypto Services

1. Exécution du conteneur Db2 Community Edition

  1. Utilisez la commande suivante pour exécuter le conteneur Db2 Community Edition :

    docker run -itd --name mydb --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=password -e DBNAME=testdb ibmcom/db2
    
  2. Exécutez la commande suivante à partir d'une ligne de commande sur le système hôte :

    docker exec -it --user root --workdir / mydb bash
    

Cet interpréteur de commandes sera utilisé pour exécuter les commandes en tant qu'utilisateur root pour les étapes ultérieures.

2. Création du fichier de configuration PKCS #11 d'Hyper Protect Crypto Services

A présent, créez un fichier de configuration pour la fonction PKCS #11 d'Hyper Protect Crypto Services. Ce fichier de configuration se nomme grep11client.yaml.

Adaptez le modèle de fichier suivant et nommez le fichier grep11client.yaml :

  • Remplacez <instance_ID> par l'ID de votre instance Hyper Protect Crypto Services
  • Remplacez <EP11_endpoint_URL> et <EP11_endpoint_port_number> par les paramètres respectifs de l'adresse de nœud final EP11 de votre instance Hyper Protect Crypto Services
  • Remplacez <private_keystore_id> par l'ID du fichier de clés privé que vous avez créé précédemment
  • Remplacez <anonymous_user_api_key> par la clé d'API respective de l'utilisateur anonyme
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. Installation de la bibliothèque PKCS #11 d'Hyper Protect Crypto Services

  1. Téléchargez la dernière bibliothèque PKCS #11.

  2. Copiez le fichier de configuration grep11client.yaml et la bibliothèque #11 PKCS pkcs11-grep11-<platform>.so.<version> dans votre conteneur Db2.

  3. Exécutez les commandes suivantes en tant qu'utilisateur root pour installer la bibliothèque PKCS #11 d'Hyper Protect Crypto Services dans votre configuration de Db2 :

    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
    

Configuration du chiffrement natif de Db2

Passons à la configuration du chiffrement natif Db2. Pour ce faire, vérifiez que vous disposez des droits d'administrateur de base de données.

  1. Créez le fichier /pkcs11/keystore.conf avec le contenu suivant :

    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. Exécutez les commandes suivantes en tant qu'utilisateur root pour mettre à jour la propriété et les droits du fichier /pkcs11/keystore.conf :

    chown -R db2inst1:db2iadm1 /pkcs11/keystore.conf
    chmod ug+rw /pkcs11/keystore.conf
    
  3. Pour créer un fichier de dissimulation de mot de passe, exécutez les commandes suivantes et remplacez <normal_user_api_key> par la clé d'API de l'utilisateur normal que vous avez créé.

    su - db2inst1
    db2credman -stash -password "<normal_user_api_key>" -to /pkcs11/pkcs11_pw.sth
    
  4. Pour mettre à jour la configuration Db2, exécutez la commande suivante en tant qu'utilisateur db2inst1 :

    db2 update dbm cfg using keystore_location /pkcs11/keystore.conf  keystore_type pkcs11
    
  5. Pour définir la variable d'environnement DB2_DEK_MAC_TYPE, exécutez les commandes suivantes en tant qu'utilisateur db2inst1 et redémarrez DB2 :

    db2 terminate
    db2stop
    export DB2_DEK_MAC_TYPE=HMAC
    db2start
    

    Vous devez indiquer la variable d'environnement DB2_DEK_MAC_TYPE=HMAC avant de démarrer Db2. Si vous utilisez Db2 sous Windows, vous devez définir la variable de profil Db2 en exécutant la commande suivante :

    db2set -g DB2_DEK_MAC_TYPE=HMAC
    
  6. Pour créer une base de données chiffrée, exécutez les commandes suivantes :

    db2 create db cryptdb1 encrypt
    

    Cette commande génère les informations suivantes :

    DB20000I  The CREATE DATABASE command completed successfully.
    
  7. Pour tester la base de données chiffrée, exécutez les commandes suivantes :

    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"
    

    Cette commande génère les informations suivantes :

    ID          DATA
    ----------- ----------------------------------------------------------------------------------------------------
          1 This is a secret text
    
    1 record(s) selected.
    

Etapes suivantes

Vos données sensibles sont à présent stockées en toute sécurité dans un espace de stockage sécurisé. Et la clé principale est conservée dans Hyper Protect Crypto Services de manière hautement sécurisée et inviolable.

Au cours de ce tutoriel, vous avez appris à configurer le chiffrement natif de Db2 à l'aide d'Hyper Protect Crypto Services.