Schlüsselmanagement über die Anwendung
Im vorliegenden Abschnitt wird die Verwaltung der Spaltenverschlüsselungsschlüssel über die Anwendung erläutert. Sie erfahren, wie Masterschlüssel bereitgestellt werden und wie verschlüsselte Daten mithilfe dieser Masterschlüssel gelesen und geschrieben werden.
Masterschlüssel angeben
Gehen Sie wie folgt vor, um Masterschlüssel anzugeben:
-
Legen Sie die Klasse fest, die die Factory EncryptionPropertiesimplementiert:
parameter name: "parquet.crypto.factory.class" parameter value: "com.ibm.parquet.key.management.IBMKeyToolsFactory" -
Übergeben Sie die expliziten Masterschlüssel im folgenden Format:
parameter name: "parquet.encryption.key.list" parameter value: "<master key ID>:<master key (base64)> , <master key ID>:<master key (base64)>.."Beispiel:
sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory") sc.hadoopConfiguration.set("parquet.encryption.key.list" , "k1:iKwfmI5rDf7HwVBcqeNE6w== , k2:LjxH/aXxMduX6IQcwQgOlw== , k3:rnZHCxhUHr79Y6zvQnxSEQ==")Die Masterschlüssel können vor der Base64-Codierung 16, 24 oder 32 Byte (128, 192 oder 256 Bit) lang sein.
Verschlüsselte Daten schreiben
Gehen Sie wie folgt vor, um verschlüsselte Daten zu schreiben:
-
Geben Sie an, welche Spalten verschlüsselt und welche Masterschlüssel verwendet werden sollen:
parameter name: "parquet.encryption.column.keys" parameter value: "<master key ID>:<column>,<column>;<master key ID>:<column>,..." -
Geben Sie den Fußzeilenschlüssel an:
parameter name: "parquet.encryption.footer.key" parameter value: "<master key ID>"Beispiel:
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 werden in den verschlüsselten Parquet-Dateien gespeichert.
Gehen Sie wie folgt vor, um die verschlüsselten Daten zu lesen:
- Legen Sie die Klasse fest, die die Factory EncryptionPropertiesimplementiert:
sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory") - Geben Sie die Chiffrierschlüssel an:
sc.hadoopConfiguration.set("parquet.encryption.key.list" , "k1:iKwfmI5rDf7HwVBcqeNE6w== , k2:LjxH/aXxMduX6IQcwQgOlw== , k3:rnZHCxhUHr79Y6zvQnxSEQ==") - 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, müssen die folgenden Hadoop-Konfigurationseigenschaften festgelegt werden:
- Die Parameter
"parquet.encryption.key.list","parquet.encryption.new.key.list" - 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.InMemoryKMS"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.list", OLD_KEYS)
sc.hadoopConfiguration.set("parquet.encryption.new.key.list", NEW_KEYS)
sc.hadoopConfiguration.set("parquet.encryption.key.material.store.internally", "false")
sc.hadoopConfiguration.set("parquet.encryption.kms.client.class", "com.ibm.parquet.key.management.InMemoryKMS")
sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
KeyToolkit.rotateMasterKeys("<path to encrypted files>", sc.hadoopConfiguration)
Anmerkung: Schlüsselrotation kann nur für Dateien ausgeführt werden, die mit dem Parameter "parquet.encryption.key.material.store.internally"geschrieben wurden, der auf "false"gesetzt ist.