0 / 0
Volver a la versión inglesa de la documentación
Gestión de claves con KMS
Última actualización: 07 oct 2024
Gestión de claves con KMS

El cifrado modular de Parquet puede funcionar con servidores KMS (Key Management Service). Se debe proporcionar una clase de cliente KMS personalizada, que puede comunicarse con el servidor KMS seleccionado, a la instancia de Analytics Engine basado en Apache Spark. Esta clase debe implementar la interfaz KmsClient (parte de la API de cifrado modular de Parquet). Analytics Engine basado en Apache Spark incluye VaultClient KmsClient, que se puede utilizar tal cual si utiliza Hashicorp Vault como servidor KMS para las claves maestras. Si utiliza o tiene previsto utilizar un sistema KMS diferente, puede desarrollar una clase KmsClient personalizada (utilizando el código de VaultClient como ejemplo).

Clase KmsClient personalizada

El cifrado modular de parquet proporciona una interfaz simple denominada org.apache.parquet.crypto.keytools.KmsClient con las dos funciones principales siguientes que debe implementar:

// Wraps a key - encrypts it with the master key, encodes the result and 
// potentially adds KMS-specific metadata.
public String wrapKey(byte[] keyBytes, String masterKeyIdentifier)
// Decrypts (unwraps) a key with the master key.
public byte[] unwrapKey(String wrappedKey, String masterKeyIdentifier)

Además, la interfaz proporciona la siguiente función de inicialización que pasa parámetros KMS y otra configuración:

public void initialize(Configuration configuration, String kmsInstanceID, String kmsInstanceURL, String accessToken)

Consulte Ejemplo de implementación de KmsClient para saber cómo implementar un KmsClient.

Una vez desarrollada la clase KmsClient personalizada, añádala a un jar suministrado a Analytics Engine basado en Apache Spark y pase su nombre completo en la configuración de Spark Hadoop, por ejemplo:

sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "full.name.of.YourKmsClient"

Gestión de claves con Hashicorp Vault

Si decide utilizar Hashicorp Vault como servidor KMS, puede utilizar VaultClient preempaquetado:

sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")

Creación de claves maestras

Consulte la documentación de Hashicorp Vault para obtener información específica sobre las acciones de Vault. Consulte:

  1. Habilite Transit Engine en la vía de acceso predeterminada o proporcione una vía de acceso personalizada.
  2. Cree claves de cifrado con nombre.
  3. Configure las políticas de acceso con las que se permite a un usuario o máquina acceder a estas claves con nombre.

Escritura de datos cifrados

  1. Pase los siguientes parámetros:

    • Establezca "parquet.encryption.kms.client.class" en "com.ibm.parquet.key.management.VaultClient":

      sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
      
    • Opcional: Establezca la vía de acceso personalizada "parquet.encryption.kms.instance.id" en el motor de tránsito:

      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "north/transit1")
      
    • Establezca "parquet.encryption.kms.instance.url" en el URL de la instancia de caja fuerte:

      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<hostname>:8200")
      
    • Establezca "parquet.encryption.key.access.token" en una señal de acceso válida con la política de acceso conectada, que proporciona derechos de acceso a las claves necesarias en la instancia de la caja fuerte:

      sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
      
    • Si la señal se encuentra en un archivo local, cárguelo:

      val token = scala.io.Source.fromFile("<token file>").mkStringsc.hadoopConfiguration.set("parquet.encryption.key.access.token" , token) 
      
  2. Especifique qué columnas deben cifrarse y con qué claves maestras. También debe especificar la clave del pie de página. Por ejemplo:

    val k1 = "key1"
    val k2 = "key2"
    val k3 = "key3"
    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 "parquet.encryption.footer.key" no está establecido, se generará una excepción.

Lectura de datos cifrados

Los metadatos necesarios, incluido el ID y el URL de la instancia de Hashicorp Vault, se almacenan en los archivos Parquet cifrados.

Para leer los metadatos cifrados:

  1. Defina el cliente KMS en la implementación del cliente de Vault:

    sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
    
  2. Proporcione la señal de acceso con la política conectada que otorga acceso a las claves relevantes:

    sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
    
  3. Llame a los mandatos de lectura de Parquet, como por ejemplo:

    val dataFrame = spark.read.parquet("<path to encrypted files>")
    

Rotación de claves

Si es necesaria la rotación de claves, un administrador con derechos de acceso a las acciones de rotación de claves de KMS debe rotar las claves maestras en Hashicorp Vault mediante el procedimiento descrito en la documentación de Hashicorp Vault. Posteriormente, el administrador puede activar la rotación de claves de Parquet con la llamada siguiente:

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" y "parquet.encryption.kms.instance.url" deben establecerse, y opcionalmente "parquet.encryption.kms.instance.id"
  • El parámetro "parquet.encryption.key.material.store.internally" debe establecerse en "false".
  • El parámetro "parquet.encryption.kms.client.class" se debe establecer en "com.ibm.parquet.key.management.VaultClient"

Por ejemplo:

sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<hostname>:8200")sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
sc.hadoopConfiguration.set("parquet.encryption.kms.client.class","com.ibm.parquet.key.management.VaultClient")
sc.hadoopConfiguration.set("parquet.encryption.key.material.store.internally", "false")
KeyToolkit.rotateMasterKeys("<path to encrypted files>", sc.hadoopConfiguration)

Tema principal: Cifrado de Parquet

Búsqueda y respuesta de IA generativa
Estas respuestas las genera un modelo de lenguaje grande en watsonx.ai que se basa en el contenido de la documentación del producto. Más información