0 / 0
Zurück zur englischen Version der Dokumentation
Schlüsselmanagement über KMS
Letzte Aktualisierung: 04. Okt. 2024
Schlüsselmanagement über KMS

Modulare Parquet-Verschlüsselung kann mit beliebigen KMS-Servern (KMS - Key Management Service) arbeiten. Eine angepasste KMS-Clientklasse, die mit dem ausgewählten KMS-Server kommunizieren kann, muss der Analytics Engine powered by Apache Spark-Instanz bereitgestellt werden. Diese Klasse muss die KmsClient-Schnittstelle (Teil der API für modulare Parquet-Verschlüsselung) implementieren. Analytics Engine powered by Apache Spark enthält VaultClient KmsClient, was ohne Vorbereitungs- oder Anpassungsaufwand verwendet werden kann, wenn Sie Hashicorp Vault als KMS-Server für die Masterschlüssel verwenden. Wenn Sie ein anderes KMS-System verwenden (wollen), können Sie eine angepasste KmsClient-Klasse (auf der Basis des VaultClient-Codes) entwickeln.

Angepasste KmsClient-Klasse

Die modulare Parquet-Verschlüsselung stellt eine einfache Schnittstelle namens org.apache.parquet.crypto.keytools.KmsClient mit den folgenden zwei Hauptfunktionen bereit, die Sie implementieren müssen:

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

Außerdem stellt die Schnittstelle die folgende Initialisierungsfunktion bereit, die KMS-Parameter und andere Konfigurationselemente übergibt:

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

Informationen zum Implementieren eines KmsClient finden Sie unter Beispiel für KmsClient-Implementierung.

Nachdem Sie die angepasste KmsClient-Klasse entwickelt haben, fügen Sie diese einer von Analytics Engine powered by Apache Spark bereitgestellten JAR-Datei hinzu und übergeben Sie den vollständigen Namen in der Spark Hadoop-Konfiguration. Beispiel:

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

Schlüsselmanagement über Hashicorp Vault

Wenn Sie Hashicorp Vault als KMS-Server verwenden, können Sie den vordefinierten VaultClient verwenden:

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

Masterschlüssel erstellen

Spezifikationen zu Hashicorp Vault-Aktionen finden Sie in der entsprechenden Dokumentation. Siehe:

  1. Aktivieren Sie Transit Engine als Standardpfad oder geben Sie einen angepassten Pfad an.
  2. Erstellen Sie benannte Verschlüsselungsschlüssel.
  3. Konfigurieren Sie Zugriffsrichtlinien, über die ein Benutzer oder eine Maschine auf diese benannten Schlüssel zugreifen darf.

Verschlüsselte Daten schreiben

  1. Übergeben Sie dabei folgende Parameter:

    • Setzen Sie "parquet.encryption.kms.client.class" auf "com.ibm.parquet.key.management.VaultClient":

      sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
      
    • Optional: Legen Sie den angepassten Pfad "parquet.encryption.kms.instance.id" für Ihre Transit-Engine fest:

      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "north/transit1")
      
    • Setzen Sie "parquet.encryption.kms.instance.url" auf die URL Ihrer Vault-Instanz:

      sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<hostname>:8200")
      
    • Legen Sie für "parquet.encryption.key.access.token" ein gültiges Zugriffstoken mit der zugeordneten Zugriffsrichtlinie fest, das Zugriffsberechtigungen für die erforderlichen Schlüssel in Ihrer Vault-Instanz bereitstellt:

      sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
      
    • Wenn sich das Token in einer lokalen Datei befindet, laden Sie es:

      val token = scala.io.Source.fromFile("<token file>").mkStringsc.hadoopConfiguration.set("parquet.encryption.key.access.token" , token) 
      
  2. Geben Sie an, welche Spalten verschlüsselt werden müssen und welche Masterschlüssel dafür erforderlich sind. Sie müssen auch den Fußzeilenschlüssel angeben. Beispiel:

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

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

Verschlüsselte Daten lesen

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

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

  1. Setzen Sie den KMS-Client auf die Vault-Clientimplementierung:

    sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
    
  2. Stellen Sie das Zugriffstoken mit der angehängten Richtlinie bereit, die Zugriff auf die relevanten Schlüssel gewährt:

    sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
    
  3. Rufen Sie die regulären Parquet-Lesebefehle auf. Beispiel:

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

Schlüsselrotation

Wenn Schlüsselrotation erforderlich ist, muss ein Administrator mit Zugriffsberechtigungen für die KMS-Schlüsselrotationsaktionen Masterschlüssel in Hashicorp Vault mithilfe der in der Hashicorp Vault-Dokumentation beschriebenen Prozedur rotieren. Danach kann der Administrator Parquet-Schlüsselrotation durch folgenden Aufruf auslösen:

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" und "parquet.encryption.kms.instance.url" und optional "parquet.encryption.kms.instance.id" müssen festgelegt werden.
  • 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.VaultClient"gesetzt werden.

Beispiel:

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)

Übergeordnetes Thema: Parquet-Verschlüsselung

Generative KI-Suche und -Antwort
Diese Antworten werden von einem großen Sprachmodell in watsonx.ai basierend auf dem Inhalt der Produktdokumentation generiert. Weitere Informationen