我正在尝试使用服务器端加密将RDD写入S3。 以下是我的一段代码。
val sparkConf = new SparkConf().
setMaster("local[*]").
setAppName("aws-encryption")
val sc = new SparkContext(sparkConf)
sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", AWS_ACCESS_KEY)
sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", AWS_SECRET_KEY)
sc.hadoopConfiguration.setBoolean("fs.s3n.sse.enabled", true)
sc.hadoopConfiguration.set("fs.s3n.enableServerSideEncryption", "true")
sc.hadoopConfiguration.setBoolean("fs.s3n.enableServerSideEncryption", true)
sc.hadoopConfiguration.set("fs.s3n.sse", "SSE-KMS")
sc.hadoopConfiguration.set("fs.s3n.serverSideEncryptionAlgorithm", "SSE-KMS")
sc.hadoopConfiguration.set("fs.s3n.server-side-encryption-algorithm", "SSE-KMS")
sc.hadoopConfiguration.set("fs.s3n.sse.kms.keyId", KMS_ID)
sc.hadoopConfiguration.set("fs.s3n.serverSideEncryptionKey", KMS_ID)
val rdd = sc.parallelize(Seq("one", "two", "three", "four"))
rdd.saveAsTextFile(s"s3n://$bucket/$objKey")
此代码在S3上编写RDD但没有加密。 [我已经检查了写入对象的属性,它显示服务器端加密的是"没有"。] 我在这里跳过任何东西或者错误地使用任何属性吗?
任何建议都将不胜感激。
P.S。我设置了不同名称的相同属性,原因是我不知道何时使用哪个名称,例如
sc.hadoopConfiguration.setBoolean("fs.s3n.sse.enabled", true)
sc.hadoopConfiguration.set("fs.s3n.enableServerSideEncryption", "true")
sc.hadoopConfiguration.setBoolean("fs.s3n.enableServerSideEncryption", true)
谢谢。
答案 0 :(得分:1)
示例政策
xml
<property>
<name>fs.s3a.server-side-encryption-algorithm</name>
<value>AES256</value>
</property>
见Working with Encrypted Amazon S3 Data;这些是目前(2017年9月)使用s3a和amp;加密S3的最佳文档。 hadoop,spark&amp;蜂房
AWS EMR读者:这些都不适用于您。切换到Apache Hadoop或查找EMR文档。