无法使用服务器端加密保存到s3

72qzrwbm  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(317)

我正在运行aws emr cluster来运行spark作业。为了使用s3 bucket,hadoop配置中设置了访问密钥、秘密密钥、enableserversideencryption和用于加密的算法。请看下面的代码 val hadoopConf = sc.hadoopConfiguration; hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") hadoopConf.set("fs.s3.awsAccessKeyId", "") hadoopConf.set("fs.s3.awsSecretAccessKey", "") hadoopConf.set("fs.s3.enableServerSideEncryption", "true") hadoopConf.set("fs.s3.serverSideEncryptionAlgorithm","AES256") 在上述配置下,spark程序能够从s3 bucket读取数据,进行处理。但当它试图将结果保存到s3时失败,s3强制要求数据必须加密。如果bucket允许未加密的数据,则会成功地保存未加密的数据。
即使集群是使用强制服务器端加密的选项构建的,也会发生这种情况 --emrfs Encryption=ServerSide,Args=[fs.s3.serverSideEncryptionAlgorithm=AES256] .
从emr上的hdfs到s3的hadoop distcp也失败了。但是,当设置--s3serversideencryption选项时,s3 dist copy(aws版本hdfs distcp)可以成功工作。
但是,ec2示例具有所需的角色权限,可以通过服务器端加密将数据上载到同一个bucket,而不使用任何用户访问密钥。请参阅下面的命令示例。如果在下面的命令中省略-sse,它将抛出一个“拒绝访问错误” aws s3 cp test.txt s3://encrypted-bucket/ —sse 如果有人能够帮助进行spark/hadoop中所需的配置,以使用服务器端加密将数据保存到awss3,这将非常有帮助。

0ejtzxu1

0ejtzxu11#

现在这个问题解决了。 --emrfs 没有正确应用配置。但下面的选项 aws emr create-cluster 与spark和 hadoop distcp . --configurations '[{"Classification":"emrfs-site","Properties":{"fs.s3.enableServerSideEncryption":"true"},"Configurations":[]}]' 由于ec2示例已经设置了从bucket读/写的角色配置文件,因此我的spark代码可以工作,而不必提供aws访问密钥。
中提供了更多emr配置选项,可与一起使用 --configuration 带的选项 emr create-cluster http://docs.aws.amazon.com/elasticmapreduce/latest/releaseguide/emr-configure-apps.html
我不知道为什么aws emr会给出两个选项来做同样的事情。一个有效,另一个无效。

相关问题