按应用程序进行密钥管理

本主题介绍了如何按应用程序管理列加密密钥。 本文介绍了如何生成主密钥,以及如何使用这些主密钥对数据进行加密和解密。

提供主钥匙

提供主钥匙:

  1. 请按以下格式提供显式主密钥:

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

    例如:

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

    在进行 base64 编码之前,主密钥的长度可以是16、24或32字节(128、192或256位)。

写入加密数据

要写入加密数据:

  1. 指定要加密的列以及要使用的主密钥:

    parameter name:  "encryption.column.keys"
    parameter value: "<master key ID>:<column>,<column>;<master key ID>:<column> .."
    
  2. 请指定页脚键:

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

    例如:

    dataFrame.write
    .option("encryption.footer.key" , "k1")
    .option("encryption.column.keys" , "k2:SSN,Address;k3:CreditCard")
    .parquet("<path to encrypted files>")
    
    注: ` ""` 必须包含 URL 中的字符串 ".encrypted`",例如 " /path/to/my_table.parquet.encrypted `。如果未设置`" encryption.column.keys "`参数或`" encryption.footer.key "`参数,则会出现异常。

读取加密数据

所需的元数据存储在加密的 Parquet 文件中。

要读取加密数据:

  1. 请提供加密密钥:

    sc.hadoopConfiguration.set("encryption.key.list" , "k1:iKwfmI5rDf7HwVBcqeNE6w== , k2:LjxH/aXxMduX6IQcwQgOlw== , k3:rnZHCxhUHr79Y6zvQnxSEQ==")
    
  2. 调用常规的 Parquet 读取命令,例如:

    val dataFrame = spark.read.parquet("<path to encrypted files>")
    
    注: ` "" URL 中必须包含字符串".encrypted",例如 " /path/to/my_table.parquet.encrypted "。