【发布时间】: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