Utilización de Hyper Protect Crypto Services PKCS #11 para el cifrado nativo de IBM Db2
El cifrado nativo de IBM Db2® protege los archivos de base de datos de claves y las imágenes de copia de seguridad de base de datos del acceso inadecuado a la vez que se almacenan en soportes de almacenamiento externos. El sistema de base de datos cifra y descifra automáticamente los datos cuando lo utilizan los usuarios y las aplicaciones autorizadas. Normalmente, los usuarios de las bases de datos no necesitan conocer el cifrado nativo y las aplicaciones cliente de base de datos no necesitan ser adaptadas específicamente.
El cifrado nativo de db2 utiliza una jerarquía de claves de dos niveles: los datos se cifran con una clave de cifrado de datos (DEK). La DEK se cifra con una clave maestra y se almacena de forma cifrada con la base de datos o la imagen de copia de seguridad. Db2 genera una DEK exclusiva para cada base de datos cifrada y para cada copia de seguridad cifrada.
Se utiliza una clave maestra para cifrar una DEK. Cada base de datos cifrada se asocia a una clave maestra a la vez.
Una cuestión importante cuando planifica el cifrado nativo de Db2 es la ubicación en la que guarda la clave maestra y cómo la protege.
Objetivos
Esta guía de aprendizaje muestra cómo puede mantener un control completo y exclusivo de las claves maestras almacenándolas en IBM Cloud® Hyper Protect Crypto Services. Para ello, debe utilizar la característica de integración de PKCS #11 de Hyper Protect Crypto Services.
Con esta guía de aprendizaje, va a implementar la configuración que se muestra en la siguiente ilustración.
En esta configuración, Db2 es llamar a operaciones para gestionar las claves maestras en la biblioteca de PKCS #11 de Hyper Protect Crypto Services. La biblioteca de PKCS #11 de Hyper Protect Crypto Services interactúa con la instancia de Hyper Protect Crypto Services, que proporciona la mejor tecnología de clase para almacenar y gestionar las claves maestras.
Antes de empezar
Para completar esta guía de aprendizaje, debe cumplir los requisitos previos siguientes:
Flujo de tareas
Para completar esta solución, haremos un recorrido por los pasos siguientes:
Inicializar la instancia de Hyper Protect Crypto Services
-
Para esta guía de aprendizaje, necesita inicializar una instancia de Hyper Protect Crypto Services primero.
Anote el ID de la instancia de la instancia de Hyper Protect Crypto Services y la dirección de punto final de EP11. Necesita esta información para los pasos siguientes.
-
Cree un rol de IAM personalizado
Discover HPCS. Este rol proporciona un permiso muy limitado para descubrir la instancia de Hyper Protect Crypto Services, que es necesaria para la biblioteca PKCS #11. Este rol no tiene permisos para utilizar, crear o gestionar claves o almacenes de claves EP11.- En la interfaz de usuario, vaya a Gestionar > Access (IAM) y seleccione Roles y, a continuación, pulse Crear.
- Especifique el nombre
Discover HPCSpara su rol. - Especifique un ID para el rol. Este ID se utiliza en el CRN, que se utiliza cuando asigna el acceso mediante la API. El ID de rol debe empezar por una letra mayúscula y utilizar sólo caracteres alfanuméricos; por ejemplo,
DiscoverHPCS. - Opcional: Especifique una descripción sucinta y útil que ayude a los usuarios que están asignando el acceso a conocer el nivel de acceso que la asignación de roles proporciona a un usuario. Esta descripción también se muestra en la interfaz de usuario cuando un usuario asigna acceso al servicio.
- En la lista de servicios, seleccione Hyper Protect Crypto Services
- Seleccione Añadir para la acción
hs-crypto.discovery.listserversy, a continuación, pulse Crear.
-
Siga las instrucciones de Configuración de tipos de usuario de API PKCS #11 para configurar los ID de servicio y las claves de API para el usuario normal y el usuario anónimo.
No configure el tipo de usuario de SO que se menciona en las instrucciones. Asimismo, a diferencia de las instrucciones, no asigne el ID de servicio de usuario anónimo al rol personalizado de
Key operator; en su lugar, asigne el rol personalizado deDiscover HPCS.Con esta configuración, el usuario anónimo solo tiene permisos muy limitados en la instancia de Hyper Protect Crypto Services y no puede utilizar, crear ni gestionar claves o almacenes de claves EP11.
-
Guarde el valor de las claves de API para el usuario normal y el usuario anónimo para los pasos siguientes.
-
Siga las instrucciones para crear un almacén de claves EP11 privado y anote el ID de almacén de claves para los pasos siguientes.
Configurar la biblioteca de PKCS #11 de Hyper Protect Crypto Services
1. Ejecutar el contenedor de Db2 Community Edition
-
Utilice el mandato siguiente para ejecutar el contenedor de 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 -
Ejecute el mandato siguiente desde una línea de mandatos del sistema host:
docker exec -it --user root --workdir / mydb bash
Este shell se va a utilizar para ejecutar los mandatos como root para los pasos siguientes.
2. Crear el archivo de configuración de PKCS #11 de Hyper Protect Crypto Services
Ahora, cree un archivo de configuración para la característica de PKCS #11 de Hyper Protect Crypto Services. El archivo de configuración se denomina grep11client.yaml.
Adapte la siguiente plantilla de archivo y asigne un nombre al archivo grep11client.yaml:
- Sustituya
<instance_ID>por el ID de la instancia de Hyper Protect Crypto Services - Sustituya
<EP11_endpoint_URL>y<EP11_endpoint_port_number>por los parámetros respectivos de la dirección de punto final de EP11 de la instancia de Hyper Protect Crypto Services - Sustituya
<private_keystore_id>por el ID del almacén de claves privado que ha creado anteriormente - Sustituya
<anonymous_user_api_key>por la clave de API correspondiente del usuario anónimo
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. Instalar la biblioteca de PKCS #11 de Hyper Protect Crypto Services
-
Copie el archivo de configuración creado previamente
grep11client.yamly la biblioteca PKCS #11pkcs11-grep11-<platform>.so.<version>en el contenedor Db2. -
Ejecute los siguientes mandatos como
rootpara instalar la biblioteca de PKCS #11 de Hyper Protect Crypto Services en la configuración 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
Configurar cifrado nativo de Db2
Ahora, vamos a configurar el cifrado nativo de Db2. Para ello, asegúrese de que dispone de todos los privilegios de administrador de la base de datos.
-
Cree el archivo
/pkcs11/keystore.confcon el siguiente contenido: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 -
Ejecute los siguientes mandatos como
rootpara actualizar la propiedad y los permisos del archivo/pkcs11/keystore.conf:chown -R db2inst1:db2iadm1 /pkcs11/keystore.conf chmod ug+rw /pkcs11/keystore.conf -
Para crear un archivo de ocultación de contraseñas, ejecute los mandatos siguientes y sustituya <normal_user_api_key> por la clave de API del usuario normal que ha creado.
su - db2inst1 db2credman -stash -password "<normal_user_api_key>" -to /pkcs11/pkcs11_pw.sth -
Para actualizar la configuración de Db2, ejecute el mandato siguiente como usuario
db2inst1:db2 update dbm cfg using keystore_location /pkcs11/keystore.conf keystore_type pkcs11 -
Para establecer la variable de entorno
DB2_DEK_MAC_TYPE, ejecute los mandatos siguientes como usuariodb2inst1y reinicie DB2:db2 terminate db2stop export DB2_DEK_MAC_TYPE=HMAC db2startDebe especificar la variable de entorno
DB2_DEK_MAC_TYPE=HMACantes de iniciar Db2. Si utiliza Db2 en Windows, debe establecer la variable de perfil de Db2 utilizando el mandato siguiente:db2set -g DB2_DEK_MAC_TYPE=HMAC -
Para crear una base de datos cifrada, ejecute los mandatos siguientes:
db2 create db cryptdb1 encryptEste mandato imprime la siguiente información:
DB20000I The CREATE DATABASE command completed successfully. -
Para probar la base de datos cifrada, ejecute los mandatos siguientes:
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"Este mandato imprime la siguiente información:
ID DATA ----------- ---------------------------------------------------------------------------------------------------- 1 This is a secret text 1 record(s) selected.
Próximos pasos
Sus datos confidenciales ahora se almacenan de forma segura en el almacenamiento cifrado. Y la clave maestra se mantiene en Hyper Protect Crypto Services de una manera altamente segura y a prueba de manipulaciones.
En esta guía de aprendizaje, ha aprendido a configurar el cifrado nativo de Db2 con Hyper Protect Crypto Services.
- Obtenga más información sobre PKCS #11.
- Obtenga más información sobre la API de PKCS #11.
- Empiece a utilizar la API de PKCS #11.