【问题标题】:Spark/Hadoop - Not able to save to s3 with server side encryptionSpark/Hadoop - 无法使用服务器端加密保存到 s3
【发布时间】:2016-06-03 15:30:47
【问题描述】:

我正在运行 AWS EMR 集群来运行 spark 作业。为了使用 s3 存储桶,hadoop 配置设置了访问密钥、密钥、enableServerSideEncryption 和用于加密的算法。请看下面的代码

val hadoopConf = sc.hadoopConfiguration; hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") hadoopConf.set("fs.s3.awsAccessKeyId", "xxx") hadoopConf.set("fs.s3.awsSecretAccessKey", "xxx") hadoopConf.set("fs.s3.enableServerSideEncryption", "true") hadoopConf.set("fs.s3.serverSideEncryptionAlgorithm","AES256")

在上述配置下,spark程序可以从s3 bucket中读取数据,进行处理。但是当它尝试将结果保存到 s3 时失败,这强制数据必须加密。如果存储桶允许未加密的数据,则它会以未加密的方式成功保存。

即使集群是使用强制服务器端加密--emrfs Encryption=ServerSide,Args=[fs.s3.serverSideEncryptionAlgorithm=AES256] 的选项构建的,也会发生这种情况。

从 emr 上的 hdfs 到 s3 的 hadoop distcp 也失败了。但是,使用 --s3ServerSideEncryption 选项设置的 s3-dist-copy(aws 版本 hdfs distcp)可以成功。

但是,ec2 实例具有将数据上传到具有服务器端加密的同一存储桶所需的角色权限,而无需使用任何用户访问密钥。请参阅下面的示例命令。如果在下面的命令中省略了 -sse,则会抛出“拒绝访问错误”。

aws s3 cp test.txt s3://encrypted-bucket/ —sse

如果有人可以帮助进行 spark/hadoop 中所需的配置以使用服务器端加密将数据保存到 aws s3,那将会很有帮助。

【问题讨论】:

    标签: hadoop encryption amazon-s3 apache-spark emr


    【解决方案1】:

    现在已经解决了。 --emrfs 没有正确应用配置。但是下面带有aws emr create-cluster 的选项适用于spark 和hadoop distcp

    --configurations '[{"Classification":"emrfs-site","Properties":{"fs.s3.enableServerSideEncryption":"true"},"Configurations":[]}]'

    由于已使用角色配置文件设置 ec2 实例以从存储桶读取/写入,因此我的 spark 代码无需提供 aws 访问密钥即可工作。

    提供更多的emr配置选项,可以使用--configuration选项和emr create-clusterhttp://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html

    我不确定为什么 aws emr 会提供 2 个选项来做同样的事情。一个有效,另一个无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 2021-01-02
      • 2014-05-28
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多