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.
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 :
Initialisation de votre instance Hyper Protect Crypto Services
-
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.
-
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.- Dans l'interface utilisateur, accédez à Gérer > Accès (IAM), sélectionnez Rôles, puis cliquez sur Créer.
- Entrez le nom
Discover HPCSpour votre rôle. - 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. - 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.
- Dans la liste des services, sélectionnez Services Hyper Protect Crypto
- Sélectionnez Ajouter pour l'action
hs-crypto.discovery.listservers, puis cliquez sur Créer.
-
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.
-
Enregistrez la valeur des clés de l'API pour l'utilisateur normal et l'utilisateur anonyme pour les étapes suivantes.
-
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
-
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 -
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
-
Copiez le fichier de configuration
grep11client.yamlet la bibliothèque #11 PKCSpkcs11-grep11-<platform>.so.<version>dans votre conteneur Db2. -
Exécutez les commandes suivantes en tant qu'utilisateur
rootpour 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.
-
Créez le fichier
/pkcs11/keystore.confavec 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 -
Exécutez les commandes suivantes en tant qu'utilisateur
rootpour 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 -
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 -
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 -
Pour définir la variable d'environnement
DB2_DEK_MAC_TYPE, exécutez les commandes suivantes en tant qu'utilisateurdb2inst1et redémarrez DB2 :db2 terminate db2stop export DB2_DEK_MAC_TYPE=HMAC db2startVous devez indiquer la variable d'environnement
DB2_DEK_MAC_TYPE=HMACavant 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 -
Pour créer une base de données chiffrée, exécutez les commandes suivantes :
db2 create db cryptdb1 encryptCette commande génère les informations suivantes :
DB20000I The CREATE DATABASE command completed successfully. -
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.
- En savoir plus sur PKCS #11
- En savoir plus sur l'API PKCS #11
- Commencer à utiliser l'API PKCS #11