spark/hadoop不支持aws s3上的sse kms加密

8yparm6h  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(490)

我正在尝试使用kms密钥(sse kms)在s3上使用服务器端加密保存rdd,但出现以下异常:
线程“main”com.amazonaws.services.s3.model.amazon3exception:状态代码: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”有不同的值吗?
有人能告诉我我在这里遗漏了什么或做错了什么吗。
环境细节如下:
Spark:1.6.1
hadoop:2.6.0版
aws java sdk:1.7.4
先谢谢你。

nzk0hqpo

nzk0hqpo1#

不幸的是,hadoop的现有版本2.8似乎不支持sse kms:(
观察结果如下:
在hadoop 2.8.1之前不支持sse kms
应该在hadoop2.9中引入sse-kms
在hadoop3.0.0alpha版本中,支持sse-kms。
同样的观察w.r.t.aws sdk for java
sse kms是在aws java sdk 1.9.5中引入的

相关问题