You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置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集群时的关键配置

控制台创建方式

  1. 进入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. 验证配置有效性

  1. 作业完成后,查看S3BucketB中的文件,通过S3控制台检查文件属性,确认「服务器端加密」显示为「无」
  2. 查看EMR集群日志,确认没有KMS权限错误或解密失败的报错信息

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 21:00:26