【问题标题】:Write dataframe as csv to S3 with kms encrypted keys without providing key使用 kms 加密密钥将数据帧作为 csv 写入 S3,而不提供密钥
【发布时间】:2021-04-29 14:31:27
【问题描述】:

我已经通过 spark 数据框创建了 CSV 文件,这些文件会自动加密 KMS。

为了您的参考,我提供了一个示例代码 sn-p 来创建这些 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

【问题讨论】:

    标签: scala apache-spark amazon-s3 amazon-emr amazon-kms


    【解决方案1】:

    您可以使用 EMR 文档 Amazon S3 Server-Side Encryption 中所述的 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>"
        }
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多