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

使用pyspark将KMS加密的spark数据帧读写到S3存储桶时出现问题,pyspark,Pyspark,我正在尝试使用Pyspark将Spark数据帧写入AWS S3 bucket,并得到一个异常,即指定的加密方法不受支持。该存储桶具有服务器端加密设置 我正在从spark-default.conf运行以下程序包: amazonaws:aws java sdk:1.9.5,org.apache.hadoop:hadoop aws:3.2.0 回顾了这个现有的线程:它提到上面的版本应该支持SSE-KMS加密 我还包括core-site.xml以拥有该属性 “fs.s3a.server-side enc

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

我正在从spark-default.conf运行以下程序包: amazonaws:aws java sdk:1.9.5,org.apache.hadoop:hadoop aws:3.2.0

回顾了这个现有的线程:它提到上面的版本应该支持SSE-KMS加密

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

但是,我仍然得到了错误。 请注意,对于不带SSE-KMS的铲斗,这可以正常工作


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

Hadoop 3.2.0绝对支持SSE-KMS,因此无论出现什么问题,配置中使用的SSE-KMS密钥、您访问它的权限、,或其他一些怪癖(例如,钥匙与桶不在同一区域)

但是:该版本是根据AWS 1.11.375构建的。混合罐通常是注定要失败的。这可能是一个因素,但可能不是

你从远端得到了400分,这意味着那里有些东西被拒绝了

推荐

  • 你看
  • 下载并运行其storediag至引导连接诊断
  • 尝试使用AWS CLI使用相同的设置处理数据

  • 注意:当您尝试读取数据时,fs.s3a.encryption设置是什么并不重要-S3知道使用的KMS密钥,如果您有权限,将自动使用它进行解密。这是检查您对某个键是否具有读取权限的好方法

    感谢您的所有输入。将以下内容添加到spark-defaults.conf中修复了我们的问题:


    spark.hadoop.fs.s3a.server-side-encryption-algorithm AES256

    感谢您的建议。我将JavaSDK切换到1.11.375。我在bucket上运行了storediag,可以看到它能够读取文件。但在spark控制台中,当我尝试执行read:spark.read.parquet('s3a://')时,我会收到AWS错误消息:使用AWS KMS托管密钥指定服务器端加密的请求需要AWS签名版本4。我确实运行了aws cli命令,将版本设置为s3v4,并且还从cloudstore storediag验证了正在提取正确的存储桶区域。还有什么想法吗?关于签名设置,最好的文档是:,它说“AWS4SignerType”应该是正确的。在不设置加密的情况下尝试一下,看看会发生什么