IBM Cloud Docs
Schlüsselverwaltung über Key Protect

Schlüsselverwaltung über Key Protect

Im vorliegenden Abschnitt wird die Verwaltung der Spaltenverschlüsselungsschlüssel mithilfe von IBM® Key Protect for IBM Cloud® (Key Protect) beschrieben. Sie erfahren, wie Sie eine Key Protect-Instanz erstellen, Masterschlüssel bereitstellen und verschlüsselte Daten mithilfe dieser Masterschlüssel schreiben und lesen.

Key Protect-Instanz und Masterschlüssel erstellen

Gehen Sie wie folgt vor, um eine Key Protect-Instanz und Masterschlüssel zu erstellen:

  1. Erstellen Sie eine Key Protect-Serviceinstanz. Siehe Service bereitstellen.

  2. Erstellen Sie Kundenrootschlüssel in dieser Instanz. Die Kundenrootschlüssel werden als Masterschlüssel für die Spaltenverschlüsselung verwendet. Siehe Rootschlüssel erstellen.

    Wenn Sie die vorhandenen Rootschlüssel verwenden wollen, können Sie diese importieren. Siehe Rootschlüssel importieren.

  3. Konfigurieren Sie die Benutzerzugriffsberechtigungen für die Masterschlüssel mithilfe des IBM IAM-Service. Siehe Zugriff auf Masterschlüssel erteilen.

Verschlüsselte Daten schreiben

Gehen Sie wie folgt vor, um verschlüsselte Daten zu schreiben:

  1. Übergeben Sie die folgenden Parameter an IBM Analytics Engine Serverless:

    • "parquet.crypto.factory.class": Die Klasse, die die Factory EncryptionPropertiesimplementiert. Wird auf "com.ibm.parquet.key.management.IBMKeyToolsFactory" gesetzt.
      sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
      
    • "parquet.encryption.kms.instance.id": Die ID Ihrer KeyProtect-Instanz. Beispiel:
      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "27861a9a-6779-4026-bca4-01e59acf0767")
      
    • "parquet.encryption.kms.instance.url": Die URL Ihrer KeyProtect-Instanz. Beispiel:
      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<region>.kms.cloud.ibm.com")
      
    • "parquet.encryption.key.access.token": Ein gültiges IAM-Token mit Zugriffsberechtigungen auf die erforderlichen Schlüssel in Ihrer KeyProtect-Instanz. Beispiel:
      sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
      
      Wenn Sie das Token in einer lokalen Datei aufbewahren, können Sie es laden.
      val token = scala.io.Source.fromFile("<token file>").mkString
      sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , token)
      
  2. Geben Sie an, welche Spalten mit welchen Masterschlüsseln verschlüsselt werden sollen. Sie müssen auch den Footerschlüssel angeben. Beim Schlüsselmanagement über Key Protect sind die Masterschlüssel-IDs die IDs der Key Protect-CRKs (Customer Root Keys - Kundenrootschlüssel), die im IBM Cloud-Servicefenster angezeigt werden. Beispiel:

    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>")
    

    Hinweis: Wenn entweder der Parameter "parquet.encryption.column.keys"oder der Parameter "parquet.encryption.footer.key"nicht festgelegt ist, wird eine Ausnahmebedingung ausgelöst.

Verschlüsselte Daten lesen

Die erforderlichen Metadaten einschließlich ID und URL der KeyProtect-Instanz werden in den verschlüsselten Parquet-Dateien gespeichert.

Gehen Sie wie folgt vor, um die verschlüsselten Metadaten zu lesen:

  1. Legen Sie die Klasse fest, die die Factory EncryptionPropertiesimplementiert:
    sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
    
  2. Geben Sie das IAM-Zugriffstoken für die relevanten Schlüssel an:
    sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
    
  3. Rufen Sie die regulären Parquet-Lesebefehle auf, zum Beispiel:
    val dataFrame = spark.read.parquet("<path to encrypted files>")
    

Schlüsselrotation

Wenn die Schlüsselrotation erforderlich ist, muss der Administrator Masterschlüssel in Key Protect mit der unter Manuelle Schlüsselrotationbeschriebenen Prozedur turnusmäßig wechseln. Anschließend kann der Administrator die Rotation der Parquet-Schlüssel auslösen, indem er Folgendes aufruft:

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

Die folgenden Hadoop-Konfigurationseigenschaften müssen festgelegt werden, um Parquet-Schlüsselrotation zu aktivieren:

  • Die Parameter "parquet.encryption.key.access.token", "parquet.encryption.kms.instance.url", "parquet.encryption.kms.instance.id"

  • Der Parameter "parquet.encryption.key.material.store.internally"muss auf "false"gesetzt werden.

  • Der Parameter "parquet.encryption.kms.client.class"muss auf "com.ibm.parquet.key.management.KeyProtectClient"gesetzt werden.

  • Der Parameter "parquet.crypto.factory.class" muss auf "com.ibm.parquet.key.management.IBMKeyToolsFactory" gesetzt werden.

    Beispiel:

    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)