Gerenciamento de chave por aplicativo

Este tópico descreve como gerenciar chaves de criptografia da coluna por aplicativo. Ele explica como fornecer chaves mestras e como gravar e ler dados criptografados usando essas chaves mestras.

Fornecendo chaves mestras

Para fornecer chaves mestras:

  1. Transmita as chaves mestras explícitas no formato a seguir:

    parameter name: "encryption.key.list"
    parameter value: "<master key ID>:<master key (base64)> , <master key ID>:<master key (base64)>.."
    

    Por exemplo:

    sc.hadoopConfiguration.set("encryption.key.list" , "k1:iKwfmI5rDf7HwVBcqeNE6w== , k2:LjxH/aXxMduX6IQcwQgOlw== , k3:rnZHCxhUHr79Y6zvQnxSEQ==")
    

    O comprimento das chaves mestras antes da codificação base64 pode ser de 16, 24 ou 32 bytes (128, 192 ou 256 bits).

Gravando dados criptografados

Para gravar dados criptografados:

  1. Especifique quais colunas criptografar e quais chaves mestras usar:

    parameter name:  "encryption.column.keys"
    parameter value: "<master key ID>:<column>,<column>;<master key ID>:<column> .."
    
  2. Especifique a chave de rodapé:

    parameter name:  "encryption.footer.key"
    parameter value:  "<master key ID>"
    

    Por exemplo:

    dataFrame.write
    .option("encryption.footer.key" , "k1")
    .option("encryption.column.keys" , "k2:SSN,Address;k3:CreditCard")
    .parquet("<path to encrypted files>")
    
    Nota: ` "" ` deve conter a cadeia de caracteres `.encrypted` no endereço URL, por exemplo, ` /path/to/my_table.parquet.encrypted `. Se o parâmetro `" encryption.column.keys "` ou o parâmetro `" encryption.footer.key "` não estiver definido, será lançada uma exceção.

Lendo dados criptografados

Os metadados necessários são armazenados nos arquivos do Parquet criptografados.

Para ler os dados criptografados:

  1. Forneça as chaves de criptografia:

    sc.hadoopConfiguration.set("encryption.key.list" , "k1:iKwfmI5rDf7HwVBcqeNE6w== , k2:LjxH/aXxMduX6IQcwQgOlw== , k3:rnZHCxhUHr79Y6zvQnxSEQ==")
    
  2. Chame os comandos de leitura do Parquet regulares, como:

    val dataFrame = spark.read.parquet("<path to encrypted files>")
    
    Nota: ` ""` deve conter a string `.encrypted` no endereço URL, por exemplo, ` /path/to/my_table.parquet.encrypted `.