Utilisation de Hyper Protect Crypto Services PKCS #11 for Oracle Transparent Database Encryption
Transparent Data Encryption (TDE) est une technologie reconnue permettant de chiffrer des données sensibles dans des bases de données. TDE est pris en charge par différents systèmes de base de données populaires, à la fois dans le cloud et sur site, comme la base de données Oracle®. Avec TDE, un système de base de données chiffre les données sur les supports de stockage de la base de données, tels que les espaces de table et les fichiers, et sur les supports de sauvegarde. Le système de base de données chiffre et déchiffre automatiquement et de façon transparente les données lorsqu'il est utilisé par les utilisateurs et les applications autorisés. Les utilisateurs de base de données n'ont pas besoin de connaître TDE et les applications de base de données n'ont pas besoin d'être adaptées spécifiquement pour TDE.
En général, TDE utilise une hiérarchie de clés à deux niveaux, qui se compose d'une clé de chiffrement principale TDE et d'une clé de chiffrement des données TDE. La clé de chiffrement de données TDE est utilisée pour chiffrer et déchiffrer les données, tandis que la clé de chiffrement principale TDE est utilisée pour chiffrer et déchiffrer la clé de chiffrement de données TDE.
Par conséquent, une question importante lorsque vous établissez un plan pour TDE est la suivante : Où gardez-vous la clé de chiffrement principale TDE et comment la sécurisez-vous ?
Objectifs
Ce tutoriel vous montre comment garder le contrôle complet et exclusif de vos clés de chiffrement principales TDE 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, le système Oracle Database appelle des opérations pour gérer les clés de chiffrement principales TDE 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 TDE.
Avant de commencer
Avant de suivre ce tutoriel, vous devez :
Flux de tâches
Pour mener à bien cette solution, voici les étapes à suivre :
- Initialiser votre instance Hyper Protect Crypto Services.
- Configurer la bibliothèque Hyper Protect Crypto Services PKCS #11 dans votre environnement Oracle Database.
- Configurer le TDE Oracle Database et chiffrer vos données.
Commençons par le processus d'initialisation de l'instance Hyper Protect Crypto Services.
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.
-
Générez une clé d'API pour accéder à votre instance Hyper Protect Crypto Services. Exécutez la commande suivante afin de créer une clé d'API pour votre compte IBM Cloud :
ibmcloud iam api-key-create apikeyhpcs -d "API key for Hyper Protect Crypto Services PKCS11" -
Sauvegardez la valeur de la clé d'API pour les étapes ultérieures.
Configuration de la bibliothèque PKCS #11 d'Hyper Protect Crypto Services dans votre environnement Oracle Database
1. Configuration du système Oracle Database
Vous avez besoin d'une installation Oracle Database Enterprise Edition avec Oracle Advanced Security. Ce tutoriel utilise une seule instance de conteneur Oracle Database 19.3 Enterprise Edition Docker. Pour plus d'informations sur les conteneurs Oracle Database et les instructions de génération d'un conteneur respectif, voir Oracle Database sur Docker.
-
Démarrez le conteneur Oracle Database :
docker run --name oradb -p 1521:1521 -p 5500:5500 -e ORACLE_PWD=password oracle/database:19.3.0-eeAttendez que les créations d'instance et de base de données soient terminées.
-
Exécutez la commande suivante à partir d'une ligne de commande sur le système hôte :
docker exec -it --user root --workdir / oradb bashCet interpréteur de commandes peut être utilisé pour exécuter les commandes en tant que
rootdans les étapes suivantes.
2. Configuration de la bibliothèque 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
<your_api_key>par la valeur de la clé d'API que vous avez créée.
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. Installation de la bibliothèque PKCS #11 d'Hyper Protect Crypto Services
-
Copiez le fichier de configuration créé
grep11client.yamlet la bibliothèque PKCS #11pkcs11-grep11-<platform>.so.<version>dans le dossier de base de votre conteneur Oracle Database. -
Exécutez les commandes suivantes en tant qu'utilisateur
rootpour installer la bibliothèque PKCS #11 d'Hyper Protect Crypto Services dans votre configuration Oracle Database :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
Le répertoire /opt/oracle/extapi/64/hsm et ses sous-dossiers ne doivent contenir qu'un seul fichier de bibliothèque. Retirez tous les autres fichiers.
4. Vérification de la configuration de la bibliothèque
-
Installez l'utilitaire de ligne de commande OpenSC (pkcs11-tool) à l'aide de la commande suivante :
sudo yum install opensc -
Exécutez la commande suivante en tant qu'utilisateur
rootpour vérifier la configuration de la bibliothèque :pkcs11-tool --module=/opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so -ICette commande imprime des informations relatives au fabricant et à la bibliothèque, par exemple :
Cryptoki version 2.40 Manufacturer IBM ... Library GREP11 PKCS11 client ...
5. Initialiser la bibliothèque PKCS #11 Hyper Protect Crypto Services
-
Exécutez la commande suivante à partir d'une ligne de commande sur le système hôte :
docker exec -it oradb bashCet interpréteur de commandes peut être utilisé pour exécuter les commandes en tant qu'utilisateur
oraclepour les étapes suivantes. -
Pour initialiser un jeton, exécutez les commandes suivantes et remplacez
<your_api_key>par la clé d'API que vous avez créée.pkcs11-tool --module /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so --init-token --label dbtoken --so-pin=<your_api_key>Cette commande imprime le message d'état suivant, par exemple :
Using slot 0 with a present token (0x0) Token successfully initialized
Configurez Oracle Database TDE et chiffrez vos données
Maintenant, prenons le rôle de l'administrateur de la base de données.
-
Mettez à jour le fichier 'sqlnet.ora' dans le répertoire '$ORACLE_HOME/network/admin' en ajoutant la ligne suivante :
encryption_wallet_location=(source=(method=hsm))Pour ce faire, vous pouvez, par exemple, exécuter la commande suivante :
echo "encryption_wallet_location=(source=(method=hsm))" >> $ORACLE_HOME/network/admin/sqlnet.oraAssurez-vous que le fichier 'sqlnet.ora' ne contient pas un autre paramètre pour
encryption_wallet_location. -
Ouvrez le fichier de clés à l'aide de la commande suivante. Remplacez
<your_api_key>par la clé d'API que vous avez créée :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; -
Créez les clés principales à l'aide de la commande suivante. Remplacez
<your_api_key>par la clé d'API que vous avez créée :SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<your_api_key>" WITH BACKUP CONTAINER=ALL; -
Créez un espace table chiffré à l'aide de la commande suivante :
SQL> CREATE TABLESPACE encrypted_ts DATAFILE 'tbs1_data.dbf' SIZE 128K AUTOEXTEND ON NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT); -
Pour vérifier la configuration, vous pouvez créer une table dans l'espace table chiffré et insérer des données de test :
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; -
Vous pouvez également créer une table avec une colonne chiffrée et insérer des données de test :
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 ;
Etapes suivantes
Vos données sensibles sont désormais stockées en toute sécurité dans des tableaux chiffrés et des colonnes cryptées. Et, la clé de chiffrement principale TDE 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 Oracle Database TDE à 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