配置AWS EMR集群:从S3读取加密数据并写入非加密结果至另一S3桶
配置AWS EMR集群读取S3加密文件并输出非加密结果
1. 先备齐所需资源
- 已创建的S3BucketA(存储的文件采用SSE-KMS方式加密)
- 已创建的S3BucketB(用于存放处理后的非加密结果)
- 目标KMS密钥(用于解密BucketA中的文件)
- 对应IAM角色:EMR服务角色(默认是
EMR_DefaultRole)、EMR EC2实例角色(默认是EMR_EC2_DefaultRole)
2. 配置IAM权限
EMR的服务角色和实例角色都需要具备以下权限:
- 读取S3BucketA的权限(
s3:GetObject、s3:ListBucket) - 写入S3BucketB的权限(
s3:PutObject、s3:ListBucket) - 调用目标KMS密钥的
Decrypt操作权限
给角色附加的策略片段参考:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::S3BucketA", "arn:aws:s3:::S3BucketA/*" ] }, { "Effect": "Allow", "Action": ["s3:PutObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::S3BucketB", "arn:aws:s3:::S3BucketB/*" ] }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:your-region:your-account-id:key/your-kms-key-id" } ] }
3. 创建EMR集群时的关键配置
控制台创建方式
- 进入EMR集群创建页面,在「软件配置」的「配置分类」中选择
Amazon EMR,添加以下配置:
[ { "Classification": "core-site", "Properties": { "fs.s3.server-side-encryption.kms.key-id": "arn:aws:kms:your-region:your-account-id:key/your-kms-key-id" } } ]
该配置用于告知Hadoop使用指定KMS密钥解密S3上的加密文件。
2. 确认集群关联的EC2实例角色是已配置好权限的角色。
CLI创建方式
使用aws emr create-cluster命令直接指定配置:
aws emr create-cluster \ --name "EMR-S3-KMS-Decrypt" \ --release-label emr-6.15.0 \ --instance-type m5.xlarge \ --instance-count 3 \ --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --configurations '[ { "Classification": "core-site", "Properties": { "fs.s3.server-side-encryption.kms.key-id": "arn:aws:kms:your-region:your-account-id:key/your-kms-key-id" } } ]'
4. 作业运行时的注意事项
编写Spark/Hadoop作业时:
- 读取S3BucketA的文件无需额外解密逻辑,EMR会自动通过配置的KMS密钥完成解密
- 写入S3BucketB时,不要添加任何加密相关配置(例如不要设置
spark.hadoop.fs.s3.server-side-encryption.enabled=true),确保输出文件为非加密状态
示例Spark Scala代码片段:
val df = spark.read.text("s3://S3BucketA/encrypted-files/") // 此处编写你的数据处理逻辑 df.write.text("s3://S3BucketB/non-encrypted-results/")
5. 验证配置有效性
- 作业完成后,查看S3BucketB中的文件,通过S3控制台检查文件属性,确认「服务器端加密」显示为「无」
- 查看EMR集群日志,确认没有KMS权限错误或解密失败的报错信息
内容的提问来源于stack exchange,提问作者Manish
相关产品推荐
相关产品推荐

