Translation not up to date
Modulární šifrování Parquet může fungovat s aplikačními servery KMS (Key Management Service). Vlastní třída klienta KMS, schopná komunikovat s vybraným serverem KMS, musí být poskytnuta pro instanci Analytics Engine , který je založen na instanci Apache Spark . Tato třída musí implementovat rozhraní KmsClient (část Modulární šifrovací rozhraní API Parquet). Produkt Analytics Engine , který je založen na Apache Spark , obsahuje VaultClient KmsClient, který může být použit mimo rámeček, pokud používáte Hashicorp Vault jako KMS server pro hlavní klíče. Používáte-li nebo plánujete použít jiný systém KMS, můžete vyvinout vlastní třídu KmsClient jako příklad (s použitím kódu VaultClient ).
Vlastní třída KmsClient
Modulární šifrování Parquet poskytuje jednoduché rozhraní s názvem org.apache.parquet.crypto.keytools.KmsClient
s následujícími dvěma hlavními funkcemi, které musíte implementovat:
// 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)
Kromě toho poskytuje rozhraní následující inicializační funkci, která předává parametry KMS a další konfiguraci:
public void initialize(Configuration configuration, String kmsInstanceID, String kmsInstanceURL, String accessToken)
Informace o tom, jak implementovat KmsClient, najdete v tématu Příklad implementace KmsClient .
Poté, co jste vyvinuli vlastní třídu KmsClient , přidejte ji do souboru JAR dodaného do produktu Analytics Engine , který je napájen produktem Apache Spark, a předejte jeho úplný název v konfiguraci Hadoop , například:
sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "full.name.of.YourKmsClient"
Správa šifrovacích klíčů pomocí Hashicorp Vault
Pokud se rozhodnete použít Hashicorp Vault jako server KMS, můžete použít předbalený VaultClient:
sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
Vytváření hlavních klíčů
Konkrétní informace o akcích na bezpečném úložišti naleznete v dokumentaci k produktu Hashicorp Vault . Viz:
- Povolte Transit Engine buď na výchozí cestě, nebo zadejte vlastní cestu.
- Vytvořte pojmenované šifrovací klíče.
- Nakonfigurujte přístupové zásady, se kterými má uživatel nebo počítač přístup k těmto pojmenovaným klíčům.
Zápis šifrovaných dat
Projděte následující parametry:
Nastavit
"parquet.encryption.kms.client.class"
na"com.ibm.parquet.key.management.VaultClient"
:sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
Volitelné: Nastavte vlastní cestu
"parquet.encryption.kms.instance.id"
k vašemu tranzitnímu režimu:sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "north/transit1")
Nastavte volbu
"parquet.encryption.kms.instance.url"
na adresu URL vaší instance bezpečného úložiště:sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<hostname>:8200")
Nastavte
"parquet.encryption.key.access.token"
na platný přístupový token s připojenou zásadou přístupu, která poskytuje přístupová práva k požadovaným klávesám ve vaší instanci bezpečného úložiště:sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
Je-li token umístěn v lokálním souboru, načtěte jej:
val token = scala.io.Source.fromFile("<token file>").mkStringsc.hadoopConfiguration.set("parquet.encryption.key.access.token" , token)
Určete, které sloupce potřebují být šifrovány, a s nimiž jsou hlavní klíče. Je třeba také určit klíč zápatí. Například:
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>")
Poznámka: Pokud není nastaven parametr
"parquet.encryption.column.keys"
nebo"parquet.encryption.footer.key"
, dojde k výjimce.
Čtení šifrovaných dat
Požadovaná metadata, včetně ID a adresy URL instance Hashicorp Vault , jsou uložena v šifrovaných souborech Parquet.
Chcete-li číst šifrovaná metadata:
Nastavit klienta KMS na implementaci klienta bezpečného úložiště:
sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
Poskytněte přístupový token s připojenou zásadou, která uděluje přístup k příslušným klávesám:
sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
Volejte pravidelné příkazy čtení Parquet, jako jsou:
val dataFrame = spark.read.parquet("<path to encrypted files>")
Rotace klíče
Je-li požadována rotace kláves, musí administrátor s přístupovými právy ke klávesám rotaci KMS rotovat hlavní klíče v produktu Hashicorp Vault pomocí postupu popsaného v dokumentaci produktu Hashicorp Vault . Poté může administrátor spustit rotaci klávesy Parquet voláním:
public static void KeyToolkit.rotateMasterKeys(String folderPath, Configuration hadoopConfig)
Chcete-li povolit rotaci klíče Parquet, musí být nastaveny následující vlastnosti konfigurace Hadoop :
- Parametry
"parquet.encryption.key.access.token"
a"parquet.encryption.kms.instance.url"
musí nastavit sadu a volitelně"parquet.encryption.kms.instance.id"
- Parametr
"parquet.encryption.key.material.store.internally"
musí být nastaven na"false"
. - Parametr
"parquet.encryption.kms.client.class"
musí být nastaven na"com.ibm.parquet.key.management.VaultClient"
Například:
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)
Nadřízené téma: Šifrování Parquet