我正在尝试使用KMS密钥(SSE-KMS)通过服务器端加密在S3上保存rdd,但是出现以下异常:



以下是通过使用SSE-KMS进行加密在S3上写rdd的测试代码:

val sparkConf = new SparkConf().
  setMaster("local[*]").
  setAppName("aws-encryption")
val sc = new SparkContext(sparkConf)

sc.hadoopConfiguration.set("fs.s3a.access.key", AWS_ACCESS_KEY)
sc.hadoopConfiguration.set("fs.s3a.secret.key", AWS_SECRET_KEY)
sc.hadoopConfiguration.setBoolean("fs.s3a.sse.enabled", true)
sc.hadoopConfiguration.set("fs.s3a.server-side-encryption-algorithm", "SSE-KMS")
sc.hadoopConfiguration.set("fs.s3a.sse.kms.keyId", KMS_ID)

val s3a = new org.apache.hadoop.fs.s3a.S3AFileSystem
val s3aName = s3a.getClass.getName
sc.hadoopConfiguration.set("fs.s3a.impl", s3aName)

val rdd = sc.parallelize(Seq("one", "two", "three", "four"))
println("rdd is: " + rdd.collect())
rdd.saveAsTextFile(s"s3a://$bucket/$objKey")

虽然,我能够使用AES256加密在s3上写rdd。

spark / hadoop的KMS密钥加密值是否不同于“SSE-KMS”?

谁能建议我在这里想念的地方或做错了什么。

环境详细信息如下:
  • Spark:1.6.1
  • Hadoop:2.6.0
  • Aws-Java-SDK:1.7.4

  • 先感谢您。

    最佳答案

    不幸的是,似乎现有版本的Hadoop即2.8不支持SSE-KMS :(

    以下是观察结果:

    直到Hadoop 2.8.1才支持

  • SSE-KMS
  • SSE-KMS应该在Hadoop 2.9中引入
  • 在Hadoop 3.0.0alpha版本中,支持SSE-KMS。

  • 相同的观察结果适用于Java的AWS开发工具包
  • SSE-KMS是在aws-java-sdk 1.9.5中引入的
  • 关于amazon-web-services - Spark/Hadoop在AWS S3上不支持SSE-KMS加密,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46168680/

    10-10 14:55