使用pyspark将KMS加密的spark数据帧读写到S3存储桶时出现问题

时间:2019-06-27 19:54:54

标签: pyspark

我正在尝试使用Pyspark将Spark数据帧写入AWS S3存储桶,并遇到一个例外,即不支持指定的加密方法。存储桶具有服务器端加密设置。

我从spark-default.conf运行以下软件包: spark.jars.packages com.amazonaws:aws-java-sdk:1.9.5,org.apache.hadoop:hadoop-aws:3.2.0

查看了以下现有线程:Doesn't Spark/Hadoop support SSE-KMS encryption on AWS S3,并提到上述版本应支持SSE-KMS加密。

我还包括core-site.xml以具有该属性 'fs.s3a.server-side-encryption-algorithm'设置为'SSE-KMS'

但是,我仍然会收到错误消息。 请注意,对于没有SSE-KMS的存储桶,这可以正常工作。

错误消息:AmazonS3Exception:状态代码:400,AWS服务:Amazon S3,AWS错误代码:InvalidArgument,AWS错误消息:不支持指定的加密方法

2 个答案:

答案 0 :(得分:0)

Hadoop 3.2.0绝对支持SSE-KMS,因此无论出现什么问题,它都将:配置中使用的SSE-KMS密钥,您的访问权限或其他一些奇怪现象(例如,密钥不是在与存储桶相同的区域中。

但是:该版本是针对AWS 1.11.375 mvnrepo hadoop-aws构建的。混合JAR通常注定要失败。那可能是一个因素,也许不是。

您从远端拿回了400,表示那里有东西被拒绝了。

推荐

  1. 您看着troubleshooting s3a page
  2. 下载cloudstore并运行其存储以引导连接诊断
  3. 尝试使用AWS CLI使用相同设置处理数据

注意:尝试读取数据时,fs.s3a.encryption设置是什么都没有关系-S3知道使用的KMS密钥,如果有权限,将自动使用它来解密。这是检查您是否拥有密钥读取权限的好方法

答案 1 :(得分:0)

感谢您所有的投入,史蒂夫。在spark-defaults.conf中添加以下内容可解决我们的问题:

spark.hadoop.fs.s3a。服务器端加密算法AES256