Gestione chiavi per Key Protect

Questo topic descrive la gestione delle chiavi di codifica delle colonne utilizzando IBM® Key Protect for IBM Cloud® (Key Protect). Spiega come creare un'istanza Key Protect e fornire chiavi master e come scrivere e leggere dati codificati utilizzando queste chiavi master.

Creazione di un'istanza Key Protect e di chiavi master

Per creare un'istanza di protezione chiave e le chiavi principali:

  1. Crea un'istanza del servizio Key Protect. Vedi Provisioning del servizio.

  2. Creare le chiavi root del cliente in questa istanza. Le chiavi root del cliente servono come chiavi principali per la crittografia della colonna. Consultare Creazione di chiavi root.

    Se si desidera utilizzare le chiavi root esistenti, è possibile importarle. Consultare Importazione di chiavi root.

  3. Configurare i diritti di accesso utente alle chiavi master utilizzando il servizio IBM IAM. Consultare Concessione dell'accesso alle chiavi principali.

Scrittura di dati codificati

Per scrivere i dati codificati:

  1. Passare i seguenti parametri a IBM Analytics Engine Serverless:

    • "parquet.crypto.factory.class": la classe che implementa EncryptionPropertiesFactory. Impostare su "com.ibm.parquet.key.management.IBMKeyToolsFactory".
      sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
      
    • "parquet.encryption.kms.instance.id": l'ID della tua istanza KeyProtect, ad esempio:
      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "27861a9a-6779-4026-bca4-01e59acf0767")
      
    • "parquet.encryption.kms.instance.url": l'URL della tua istanza KeyProtect, ad esempio:
      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<region>.kms.cloud.ibm.com")
      
    • "parquet.encryption.key.access.token": un token IAM valido con i diritti di accesso alle chiavi richieste nella tua istanza KeyProtect, ad esempio:
      sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
      
      Se si conserva il token in un file locale, è possibile caricarlo.
      val token = scala.io.Source.fromFile("<token file>").mkString
      sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , token)
      
  2. Specificare quali colonne devono essere codificate e con quali chiavi principali. È necessario specificare anche la chiave del piè di pagina. Nella gestione delle chiavi da Key Protect, gli ID chiave master sono gli ID dei CRK Key Protect (chiavi root del cliente), che puoi trovare nella finestra del servizio IBM Cloud. Ad esempio:

    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: se il parametro "parquet.encryption.column.keys" o il parametro "parquet.encryption.footer.key" non è impostato, verrà generata un'eccezione.

Lettura dei dati codificati

I metadati richiesti, inclusi ID e URL dell'istanza KeyProtect, vengono memorizzati nei file Parquet crittografati.

Per leggere i metadati codificati:

  1. Impostare la classe che implementa EncryptionPropertiesFactory:
    sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
    
  2. Fornisci il token di accesso IAM per le chiavi pertinenti:
    sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
    
  3. Richiamare i comandi di lettura del parquet regolari, come:
    val dataFrame = spark.read.parquet("<path to encrypted files>")
    

Rotazione delle chiavi

Se è richiesta la rotazione della chiave, l'amministratore deve ruotare le chiavi principali in Key Protect utilizzando la procedura descritta in Ruota manuale delle chiavi. Quindi l'amministratore può attivare la rotazione della chiave Parquet chiamando:

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

Per abilitare la rotazione della chiave Parquet, è necessario impostare le seguenti proprietà di configurazione Hadoop:

  • I parametri "parquet.encryption.key.access.token", "parquet.encryption.kms.instance.url", "parquet.encryption.kms.instance.id"

  • Il parametro "parquet.encryption.key.material.store.internally" deve essere impostato su "false"

  • Il parametro "parquet.encryption.kms.client.class" deve essere impostato su "com.ibm.parquet.key.management.KeyProtectClient"

  • Il parametro "parquet.crypto.factory.class" deve essere impostato su "com.ibm.parquet.key.management.IBMKeyToolsFactory"

    Ad esempio:

    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)