Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 不';t Spark/Hadoop支持AWS S3上的SSE-KMS加密_Amazon Web Services_Hadoop_Apache Spark_Encryption_Amazon S3 - Fatal编程技术网

Amazon web services 不';t Spark/Hadoop支持AWS S3上的SSE-KMS加密

Amazon web services 不';t Spark/Hadoop支持AWS S3上的SSE-KMS加密,amazon-web-services,hadoop,apache-spark,encryption,amazon-s3,Amazon Web Services,Hadoop,Apache Spark,Encryption,Amazon S3,我正在尝试使用KMS密钥(SSE-KMS)在S3上使用服务器端加密保存rdd,但遇到以下异常: 线程“main”中出现异常 com.amazonaws.services.s3.model.amazons3异常:状态代码:400, AWS服务:Amazon S3,AWS请求ID:695E32175EBA568A,AWS错误 代码:InvalidArgument,AWS错误消息:加密方法 不支持指定的,S3扩展请求ID: Pi+HFLg0WsAWtkdI2S/XVIOCPMCI7ZDHIO5N1F7

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

线程“main”中出现异常 com.amazonaws.services.s3.model.amazons3异常:状态代码:400, AWS服务:Amazon S3,AWS请求ID:695E32175EBA568A,AWS错误 代码:InvalidArgument,AWS错误消息:加密方法 不支持指定的,S3扩展请求ID: Pi+HFLg0WsAWtkdI2S/XVIOCPMCI7ZDHIO5N1F7TIWPJE2Z0LPY1C2CR53PNNUCJ3358GX3AQ=

以下是我使用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”不同

谁能告诉我我在这里遗漏了什么或做错了什么

环境详情如下:

  • 火花:1.6.1
  • Hadoop:2.6.0
  • Aws Java Sdk:1.7.4

提前感谢。

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

观察结果如下:

  • 直到Hadoop 2.8.1才支持SSE-KMS
  • 应该在Hadoop 2.9中引入SSE-KMS
  • 在Hadoop 3.0.0alpha版本中,支持SSE-KMS
  • 同样的观察w.r.t.AWS SDK for Java

  • SSE-KMS是在aws java sdk 1.9.5中引入的

  • 你有没有让SSE-KMS使用Spark?如果有,你最终使用的依赖项是什么。在Hadoop 3.0之前,社区似乎没有解决AWS SSE-KMS的问题;但是Spark社区仍在尝试为Hadoop版本添加功能……看起来Steve Loughran在另一个线程中回答了这个问题: