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