2017-08-02 79 views
2

感谢stackoverflow,我设法将hadoop-aws-2.7.3.jar和aws-java-sdk-1.7.4.jar从maven repo复制到$ SPARK_HOME/jars /中以获得s3a://从阅读中读取在我的ec2 linux实例上使用pyspark(spark 2.2.0)的S3存储桶。如何指定服务器端加密s3放在pyspark?

DF = spark.read.option( “头”, “真”)的.csv( “S3A://桶/ csv_file”)

但我被困在编写转化数据返回到启用了服务器端加密的s3存储桶中。正如预期的那样低于动作抛出“拒绝访问”,因为我还没有指定的标志,使pyspark执行ENV中的服务器端加密

df.write.parquet(“S3A://s3_bucket/output.parquet”)

为了验证,我写了一个本地文件,并使用-sse上传到S3存储桶,这工作得很好

AWS S3 CP LOCAL_PATH S3:// s3_bucket/--sse

如何在类似于上面的pyspark中启用服务器端加密?

注意:我曾尝试在spark-default.conf中添加“fs.s3a.enableServerSideEncryption true”,并在开始时通过pyspark的--conf参数传递相同的值,但没有欢乐。

感谢

回答

1

我经历以下的Hadoop JIRAs后理解的方式 - HADOOP-10675,HADOOP-10400,HADOOP-10568

由于FS/S3是以下需要的Hadoop的一部分,加入到火花默认如果的.conf所有S3桶放入你的财产是由上证所

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

,加入这个,我是能够成功地写入到S3存储由SSE(服务器端加密)保护后的保护。

1

希望你已经访问密钥设置配置,秘密密钥,enableServerSideEncryption和算法用于加密。

val hadoopConf = sc.hadoopConfiguration; 
    hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") 
    hadoopConf.set("fs.s3.awsAccessKeyId", "xxx") 
    hadoopConf.set("fs.s3.awsSecretAccessKey", "xxx") 
    hadoopConf.set("fs.s3.enableServerSideEncryption", "true") 
    hadoopConf.set("fs.s3.serverSideEncryptionAlgorithm","AES256") 

强制执行服务器端加密

--emrfs Encryption=ServerSide,Args=[fs.s3.serverSideEncryptionAlgorithm=AES256]. 

命令:

./bin/spark-submit --verbose -jars的lib/app.jar \

--master spark://master-amazonaws.com:7077 \ 
--class com.elsevier.spark.SparkSync \ 
--conf "spark.executor.extraJavaOptions=-Ds3service.server-side-encryption=AES256" 

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html

保护数据使用与Amazon S3管理加密密钥(SSE-S3)

服务器端加密服务器端加密是大约静止保护数据。采用Amazon S3管理的加密密钥(SSE-S3)的服务器端加密采用强大的多因素加密。 Amazon S3使用唯一密钥加密每个对象。作为附加的保障措施,它使用定期旋转的主密钥对密钥本身进行加密。 Amazon S3服务器端加密使用最强大的分组密码之一,256位高级加密标准(AES-256)来加密您的数据。

Amazon S3支持存储桶策略,如果您需要对存储在存储桶中的所有对象进行服务器端加密,则可以使用存储桶策略。例如,如果请求中不包含请求服务器端加密的x-amz-server-side-encryption标头,则以下存储桶策略拒绝向所有人上传对象(s3:PutObject)权限。

{ 
    "Version": "2012-10-17", 
    "Id": "PutObjPolicy", 
    "Statement": [ 
    { 
     "Sid": "DenyIncorrectEncryptionHeader", 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:PutObject", 
     "Resource": "arn:aws:s3:::YourBucket/*", 
     "Condition": { 
     "StringNotEquals": { 
      "s3:x-amz-server-side-encryption": "AES256" 
     } 
     } 
    }, 
    { 
     "Sid": "DenyUnEncryptedObjectUploads", 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:PutObject", 
     "Resource": "arn:aws:s3:::YourBucket/*", 
     "Condition": { 
     "Null": { 
      "s3:x-amz-server-side-encryption": "true" 
     } 
     } 
    } 
    ] 
} 
+0

请注意,此处列出的配置选项仅适用于EMR及其s3连接器; ASF hadoop的fs.s3a不同。与在桶中设置安全选项相关的所有内容都是有效的 - 并且是验证选项正在被拾取的最佳方式。如果您无法写入存储桶,则意味着加密设置失败 –

相关问题