Cifrado de la Base de Datos

Prerrequisitos

El procedimiento descrito en este manual depende de los siguientes requisitos:

Crear clave para cifrado

Permiso de usuario

Para cifrar HBase, es necesario agregar permisos para el usuario que administra el HDFS.

En el navegador, acceda a Ranger en http://<host>:6080.

  • Usuario: keyadmin

  • Contraseña: <contraseña definida en el procedimiento de instalación de Ranger Admin>

En este ejemplo, usaremos el usuario hadoop

Al acceder al Panel de Ranger KMS, haga clic en el repositorio kmsdev del KMS, que redirigirá a la página de policies de kmsdev.

Haga clic para editar la police 1. Al ser redirigido, haga clic en el ícono + dentro de Allow Conditions y complete de la siguiente forma:

  • Select Role: Sin cambios

  • Select Group: Sin cambios

  • Select User: hadoop

  • Permissions: Decrypt EEK, Generate EEK, Get, Get Keys, Get Metadata

  • Delegate Admin: Checked

Para probar el acceso al servidor, ejecute los siguientes comandos para listar las claves y los metadatos de la clave, en caso de que exista una:

hadoop key list
hadoop key list -metadata

El objetivo de la prueba es garantizar que el acceso no será denegado, haya clave o no.

Crear clave

Aún en el panel de Ranger KMS, haga clic en Encryption y, luego, en Key Manager.

En Select Service, seleccione el repositorio kmsdev.

Para crear una clave, haga clic en Add New Key y complete de la siguiente forma:

  • Key Name: hbase

  • Cipher: No realizar cambios

  • Length: 256

  • Description: campo opcional

  • Attributes: No realizar cambios

Al hacer clic en save, la clave será creada y podrá ser accesada por el servidor para encriptación. Para verificar, conéctese al servidor con el usuario que tiene permiso de get key y ejecute los siguientes comandos:

hadoop key list
hadoop key list -metadata

Crear zona de cifrado

Para cifrar la base de datos de Hadoop, es necesario crear una zona de cifrado. De esta forma, todos los datos insertados en esta zona serán redirigidos por el HDFS al KMS para cifrado o descifrado, dependiendo de la petición enviada y de los permisos del usuario en el KMS.

Para crear una zona de cifrado, es necesario que la ruta esté vacía. Por lo tanto, es necesario renombrar la carpeta data de HBase y crear una carpeta con el mismo nombre.

hdfs dfs -mv /apps/hbase/data /apps/hbase/data-bkp
hdfs dfs -mkdir /apps/hbase/data /apps/hbase/data
hdfs dfs -ls /apps/hbase/

# Found 2 items
# drwxr-xr-x   - hadoop hadoop         0 2023-02-17 14:02 /apps/hbase/data
# drwxr-xr-x   - hadoop hadoop         0 2023-02-15 11:58 /apps/hbase/data-bkp

Entonces ejecute el siguiente comando para definir la ruta /apps/hbase/data como una zona de cifrado:

hdfs crypto -createZone -keyName hbase -path /apps/hbase/data

La respuesta debe ser:

Added encryption zone /apps/hbase/data

Para verificar, ejecute el comando para listar las zonas:

hdfs crypto -listZones

Este comando debe devolver el siguiente mensaje:

/apps/hbase/data  hbase

Siendo /apps/hbase/data la zona de cifrado y hbase la clave.

Después de definir la zona de cifrado, copie todo el contenido de la carpeta /apps/hbase/data-bkp dentro de la zona de cifrado /apps/hbase/data.

hdfs dfs -cp /apps/hbase/data-bkp/* /apps/hbase/data/

Para verificar el funcionamiento del cifrado, inicie HBase y conéctese al HBase Shell, entonces ejecute los siguientes comandos de lectura de archivo:

Dentro de la zona de cifrado:

hdfs dfs -cat /apps/hbase/data/hbase.id

La respuesta debe ser:

PBUF
$24b1ef30-14b6-46d0-b46b-f49c9c109cb1

Fuera de la zona de cifrado:

hdfs dfs -cat /.reserved/raw/apps/hbase/data/hbase.id

La respuesta debe ser:

▒w▒▒▒▒▒,U▒▒▒k▒y▒,*▒*|▒~▒/U▒U▒▒▒|#

Para obtener información sobre el cifrado del archivo, ejecute el siguiente comando:

hdfs crypto -getFileEncryptionInfo -path /apps/hbase/data/hbase.id

La respuesta debe ser:

{
	cipherSuite: {
		name: AES/CTR/NoPadding,
		algorithmBlockSize: 16
	},
	cryptoProtocolVersion: CryptoProtocolVersion{
		description='Encryption zones',
		version=2,
		unknownValue=null
	},
	edek: 0b79b49c77335747824d78e97e5e0bf2a54f428ddc81faf6dc220c4ecea7c7de,
	iv: ee35b713df8994046758372cee3eeea0,
	keyName: hbase,
	ezKeyVersionName: hbase@0
}

Procedimiento de cambio de clave

Procedimiento de Rollover de la clave

Para crear una clave, haga clic en Add New Key y complete de la siguiente forma:

Para cambiar la clave de cifrado, acceda al panel de Ranger KMS y haga clic en Encryption y, luego, en Key Manager.

En Select Service, seleccione el repositorio kmsdev.

En la clave utilizada para la zona de cifrado, en el lado derecho de la pantalla en Action, haga clic en el ícono descrito como Rollover.

Al hacer clic en Rollover, será necesario confirmar la operación en un pop-up.

Después de confirmar el Rollover, Hadoop continuará usando la clave anterior, pero la clave nueva también estará disponible en Ranger KMS. Por este motivo no es necesaria la detención de los servicios para este procedimiento.

Para verificar la disponibilidad de las claves y sus respectivas versiones, ejecute el siguiente comando:

curl http://localhost:9292/kms/v1/key/hbase/_versions?user.name=hadoop

La respuesta debe ser:

[
	{
		"material": "NIoXKS9lHMIPBUhIARV3V5TCzTj12IHEOjVwD00R8NM",
		"name": "hbase",
		"versionName": "hbase@0"
	},
	{
		"material": "RjAvLWzEu7BuRvPpXs7K2Q8EqRTa_gJsDm-NF8D_HSc",
		"name": "hbase",
		"versionName": "hbase@1"
	},
	...
]

En esta respuesta, se observa que Hadoop está usando la clave hbase@0, sin embargo ya está disponible la clave hbase@1 en el KMS.

Procedimiento de re-cifrado

El procedimiento de re-cifrado puede realizarse durante el funcionamiento pleno del sistema por dos puntos:

El tipo de cifrado

Hadoop utiliza cifrado del tipo TDE (transparent data encryption). Este tipo de cifrado actúa en la base de datos solo a nivel de archivo, permitiendo que los datos estén disponibles para las aplicaciones sin la necesidad de cifrar o descifrar en cada operación.

Información de cifrado en el archivo

Cada archivo cifrado posee un encabezado o paquete con la información del cifrado, incluyendo la versión de la clave utilizada. Esta información se consulta directamente en cualquier procedimiento de cifrado.

Para verificar la información de cifrado en el archivo, ejecute el siguiente comando:

hdfs crypto -getFileEncryptionInfo -path /apps/hbase/data/hbase.id

La respuesta debe ser:

{
	cipherSuite: {
		name: AES/CTR/NoPadding,
		algorithmBlockSize: 16
	},
	cryptoProtocolVersion: CryptoProtocolVersion{
		description='Encryption zones',
		version=2,
		unknownValue=null
	},
	edek: 0b79b49c77335747824d78e97e5e0bf2a54f428ddc81faf6dc220c4ecea7c7de,
	iv: ee35b713df8994046758372cee3eeea0,
	keyName: hbase,
	ezKeyVersionName: hbase@0
}

Para re-cifrar la zona de cifrado después del Rollover de la clave, ejecute los siguientes comandos:

  • Para listar las zonas de cifrado:

hdfs crypto -listZones
  • Para re-cifrar la zona deseada con la nueva clave:

hdfs crypto -reencryptZone -start -path /apps/hbase/data/

La respuesta debe ser un mensaje confirmando la solicitud de re-cifrado:

re-encrypt command successfully submitted for zone: /apps/hbase/data/ action: START

Después de la solicitud, Hadoop iniciará el re-cifrado de los datos con la clave actualizada proporcionada por Ranger KMS.

Para comprobar el estado del re-cifrado, ejecute el siguiente comando:

hdfs crypto -listReencryptionStatus

La respuesta debe ser un informe con el estado de la operación:

Zone Name         Status     EZKey Version Name  Submission Time               Is Canceled?     Completion Time               Number of files re-encrypted  Number of failures  Last File Checkpointed
/apps/hbase/data  Completed  hbase@1             2023-02-17 15:43:15,429-0300  false            2023-02-17 15:43:15,623-0300  28                            0

Para verificar si la información de cifrado fue actualizada en los archivos, ejecute nuevamente el comando -getFileEncryptionInfo:

hdfs crypto -getFileEncryptionInfo -path /apps/hbase/data/hbase.id

Si el cambio de las claves se realizó con éxito, el campo ezKeyVersionName reflejará el nombre de la nueva versión:

{
	cipherSuite: {
		name: AES/CTR/NoPadding,
		algorithmBlockSize: 16
	},
	cryptoProtocolVersion: CryptoProtocolVersionc{
		description='Encryption zones',
		version=2,
		unknownValue=null
	},
	edek: 995afbc575fa88ff0ef72a908e0caa8397c18b2df852cb86e35fcc4577ed257b,
	iv: ee35b713df8994046758372cee3eeea0,
	keyName: hbase,
	ezKeyVersionName: hbase@1
}

Última actualización

¿Te fue útil?