EMR + Spark + KMS - 保存解密数据

时间:2018-06-01 19:16:32

标签: pyspark amazon-emr aws-kms

我们正在使用spark处理EMR中的KMS客户端加密数据。我能够使用以下配置成功处理加密数据,但即使写入s3的聚合数据也是加密的。有没有办法用这些设置将未加密的数据写入s3?如果没有,我们如何在将其加载到RDS中进行报告之前对其进行解密?

sc._jsc.hadoopConfiguration().set("fs.s3.cse.materialsDescription.enabled", "true");
sc._jsc.hadoopConfiguration().set("fs.s3.cse.encryptionMaterialsProvider", "com.amazon.ws.emr.hadoop.fs.cse.KMSEncryptionMaterialsProvider");
sc._jsc.hadoopConfiguration().set("fs.s3.cse.kms.keyId","arn:aws:kms:us-east-1:abcd");
sc._jsc.hadoopConfiguration().set("fs.s3.cse.enabled", "true");

print('写入目录...'+ OUTPUT_DIR) formatted_ags.repartition(1).saveAsTextFile(OUTPUT_DIR)

2 个答案:

答案 0 :(得分:0)

查看this question的答案,其中描述了如何使用每个自定义uri方案使用不同加密配置的解决方法。

答案 1 :(得分:0)

要在保存数据时使用不同的加密密钥/解密进行配置,我们可以遵循以下策略。

配置一个新的文件系统,您可以将其命名为s3X,其中X可以用任何字符替换。 一种示例配置如下。

   {
      "classification":"emrfs-site",
      "properties":{
         "fs.s3k.cse.kms.keyId":"arn:aws:kms:us-east-1:XXXXXXXXXXXX",
         "fs.s3k.cse.enabled":"true",         
         "fs.s3k.cse.encryptionMaterialsProvider":"com.amazon.ws.emr.hadoop.fs.cse.KMSEncryptionMaterialsProvider",         
      }
   },
   {
      "classification":"spark-defaults",
      "properties":{
         "spark.hadoop.fs.s3k.impl":"com.amazon.ws.emr.hadoop.fs.EmrFileSystem",
  }

并在保存输出时使用s3k协议。

如果您要禁用加密,我们可以像“fs.s3k.cse.enabled”:“false”

那样配置