Gestión de claves por Key Protect

En este tema, se describe la gestión de claves de cifrado de columnas utilizando IBM® Key Protect for IBM Cloud® (Key Protect). Se explica cómo crear una instancia de Key Protect y cómo proporcionar claves maestras y cómo escribir y leer datos cifrados utilizando estas claves maestras.

Creación de una instancia de Key Protect y claves maestras

Para crear una instancia de Key Protect y claves maestras:

  1. Cree una instancia de servicio de Key Protect. Consulte Suministro del servicio.

  2. Cree las claves raíz en esta instancia. Las claves raíz del cliente actúan como claves maestras para el cifrado de columnas. Consulte Creación de claves raíz.

    Si desea utilizar las claves raíz existentes, puede importarlas. Consulte Importación de claves raíz.

  3. Configure los derechos de acceso del usuario a las claves maestras utilizando el servicio IBM IAM. Consulte Cómo otorgar acceso a las claves maestras.

Escritura de datos cifrados

Para escribir datos cifrados:

  1. Pase los parámetros siguientes a IBM Analytics Engine Serverless:

    • "parquet.crypto.factory.class": la clase que implementa EncryptionPropertiesFactory. Establézcalo en "com.ibm.parquet.key.management.IBMKeyToolsFactory".
      sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
      
    • "parquet.encryption.kms.instance.id": el ID de la instancia de KeyProtect, por ejemplo:
      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "27861a9a-6779-4026-bca4-01e59acf0767")
      
    • "parquet.encryption.kms.instance.url": el URL de la instancia de KeyProtect, por ejemplo:
      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<region>.kms.cloud.ibm.com")
      
    • "parquet.encryption.key.access.token": una señal de IAM válida con derechos de acceso a las claves necesarias en la instancia de KeyProtect, por ejemplo:
      sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
      
      Si mantiene la señal en un archivo local, puede cargarla.
      val token = scala.io.Source.fromFile("<token file>").mkString
      sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , token)
      
  2. Especifique qué columnas se deben cifrar y con qué claves maestras. También debe especificar la clave del pie de página. En la gestión de clave por Key Protect, los ID de clave maestra son los ID de las CRK (claves raíz de cliente) de Key Protect, que puede encontrar en la ventana de servicio de IBM Cloud. Por ejemplo:

    val k1 = "d1ae3fc2-6b7d-4a03-abb6-644e02933734"
    val k2 = "c4a21521-2a78-4968-a7c2-57c481f58d5c"
    val k3 = "a4ae4bc2-9d78-8748-f8a2-17f584d48c5b"
    
    dataFrame.write
    .option("parquet.encryption.footer.key" , k1)
    .option("parquet.encryption.column.keys" , k2+":SSN,Address;"+k3+":CreditCard")
    .parquet("<path to encrypted files>")
    

    Nota:: Si el parámetro "parquet.encryption.column.keys" o el parámetro "parquet.encryption.footer.key" no están establecidos, se generará una excepción.

Lectura de datos cifrados

Los metadatos necesarios, incluidos el ID y el URL de la instancia de KeyProtect, se almacenan en los archivos Parquet cifrados.

Para leer los metadatos cifrados:

  1. Establezca la clase que implementa EncryptionPropertiesFactory:
    sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
    
  2. Proporcione la señal de acceso IAM para las claves relevantes:
    sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
    
  3. Llame a los mandatos de lectura de Parquet habituales como, por ejemplo:
    val dataFrame = spark.read.parquet("<path to encrypted files>")
    

Rotación de claves

Si es necesaria la rotación de claves, el administrador tiene que rotar las claves maestras en Key Protect utilizando el procedimiento descrito en Rotación manual de claves. A continuación, el administrador puede activar la rotación de claves de Parquet llamando a:

public static void KeyToolkit.rotateMasterKeys(String folderPath, Configuration hadoopConfig)

Para habilitar la rotación de claves de Parquet, deben establecerse las siguientes propiedades de configuración de Hadoop:

  • Los parámetros "parquet.encryption.key.access.token", "parquet.encryption.kms.instance.url", "parquet.encryption.kms.instance.id"

  • El parámetro "parquet.encryption.key.material.store.internally" se debe establecer en "false"

  • El parámetro "parquet.encryption.kms.client.class" se debe establecer en "com.ibm.parquet.key.management.KeyProtectClient"

  • • El parámetro "parquet.crypto.factory.class" debe establecerse en "com.ibm.parquet.key.management.IBMKeyToolsFactory"

    Por ejemplo:

    sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
    sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<region>.kms.cloud.ibm.com")
    sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id", "27861a9a-6779-4026-bca4-01e59acf0767")
    sc.hadoopConfiguration.set("parquet.encryption.key.material.store.internally", "false")
    sc.hadoopConfiguration.set("parquet.encryption.kms.client.class" "com.ibm.parquet.key.management.KeyProtectClient")
    sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
    
    KeyToolkit.rotateMasterKeys("<path to encrypted files>", sc.hadoopConfiguration)