将dataframe以csv格式写入S3,使用kms加密密钥,不提供密钥



我通过spark dataframe创建了CSV文件,这些文件会自动进行KMS加密。

供您参考,我给出了一个示例代码片段,正在创建这些KMS加密文件。如果你在写作时看到我没有给任何KMS密钥。如果你能告诉我根本原因,那就太有帮助了。

val df=spark.read.format("csv").option("header", "true").load("s3:///test/App_IP.csv")
df.createOrReplaceTempView("test")
val df1=spark.sql("select name from test")
df1.coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").save("s3://test/city5/")

我在EMR集群(EMR -5.24.0)中从spark-shell执行的代码,spark版本是spark 2.4.2

您可以使用EMR文档中描述的S3加密Amazon S3服务器端加密:

fs.s3.enableServerSideEncryption:当设置为true时,存储在Amazon S3中的对象使用服务器端加密进行加密。如果没有指定密钥,则使用SSE-S3。fs.s3.serverSideEncryption.kms.keyId:指定AWS KMS密钥ID或ARN。如果指定密钥,则使用SSE-KMS。

创建启用SSE-S3的集群:

aws emr create-cluster --release-label emr-5.24.0 
--instance-count 3 --instance-type m5.xlarge --emrfs Encryption=ServerSide

创建启用SSE-KMS的集群:

aws emr create-cluster --release-label emr-5.24.0  --instance-count 3 
--instance-type m5.xlarge --use-default-roles 
--emrfs Encryption=ServerSide,Args=[fs.s3.serverSideEncryption.kms.keyId=<keyId>]

或者通过提供一个集群配置JSON:

[
...
{
"Classification":"emrfs-site",
"Properties": {
"fs.s3.enableServerSideEncryption": "true",
"fs.s3.serverSideEncryption.kms.keyId":"<keyId>"
}
}
]

最新更新