需要一些帮助来为我下面的用例找到更好的解决方案。
我有一个s3存储桶,其中包含输入数据,它是用kms密钥1加密的
因此,我可以设置kms键1到我的Spark会话使用 "spark.hadoop.fs.s3.serverSideEncryption.kms.keyId"
能够读取数据,
现在我想将数据写入另一个s3存储桶,但它是用kms密钥2加密的*
所以我现在做的是,用key1创建spark会话,读取Dataframe并将其转换为pandasDataframe,然后用kms key2在相同的aws glue job中终止spark会话并重新创建spark会话,并将上一步中创建的pandas数据转换为sparkDataframe并写入输出s3 bucket。
但这种方法有时会导致数据类型问题。有没有更好的替代方案来处理这个用例?
谢谢你的帮助。
1条答案
按热度按时间fruv7luv1#
您不需要声明使用什么密钥来解密用s3kms加密的数据;要使用的keyid作为属性附加到文件。aws s3读取加密设置,查看密钥id,将kms加密的对称密钥发送给aws kms,请求用户/iam角色对其进行解密。如果用户/角色拥有正确的权限,s3将取回未加密的密钥,解密文件并返回它。
要从使用kms-1加密的bucket中读取数据,您应该能够将密钥设置为key2值(或者根本不加密),并且仍然可以取回数据
免责声明:我没有用emr s3连接器测试过这个,只有apaches3a连接器,但是由于s3kms在任何地方都是一样的,所以我希望它能正常工作。使用客户机提供的密钥s3cse进行加密是另一回事。在这里,您确实需要正确配置客户机,这就是为什么s3a支持每个bucket配置。