0 / 0
Go back to the English version of the documentation
Správa klíčů KMS
Last updated: 29. 9. 2023
Správa klíčů KMS

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:

  1. Povolte Transit Engine buď na výchozí cestě, nebo zadejte vlastní cestu.
  2. Vytvořte pojmenované šifrovací klíče.
  3. 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

  1. 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) 
      
  2. 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:

  1. 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")
    
  2. 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>")
    
  3. 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

Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more