Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

授予对 Amazon S3 中的 EMRFS 数据的访问权

默认情况下,EC2 的 EMR 角色确定访问 Amazon S3 中 EMRFS 数据的权限。无论是用户还是组通过 EMRFS 提出请求,附加到此角色的 IAM 策略都适用。默认为 EMR_EC2_DefaultRole。有关更多信息,请参阅 使用默认 IAM 角色和托管策略

从 Amazon EMR 版本 5.10.0 开始,可以使用安全配置来指定 EMRFS 的 IAM 角色。这样可以为多用户集群自定义 EMRFS 对 Amazon S3 的请求的权限。您可以为不同用户和组指定不同的 IAM 角色,也可根据在 Amazon S3 中的前缀为不同的 Amazon S3 存储桶位置进行指定。当 EMRFS 向 Amazon S3 发出的请求与您指定的用户、组或位置匹配时,集群将使用您指定的相应角色,而不是 EC2 的 EMR 角色。有关更多信息,请参阅 为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色

或者,如果您的 Amazon EMR 解决方案的需求超出了 EMRFS 的 IAM 角色所能提供的权限,您也可以定义自定义凭证提供程序类,从而让您能够自定义对 Amazon S3 中的 EMRFS 数据的访问。

为 Amazon S3 中的 EMRFS 数据创建自定义凭证提供程序

要创建自定义凭证提供程序,您可以实施 AWSCredentialsProvider 和 Hadoop 可配置类。

有关此方法的详细说明,请参阅 AWS 大数据博客中的使用 EMRFS 安全分析来自其他 AWS 账户的数据。博文中包含了全流程分步教程,涵盖从创建 IAM 角色到启动集群。其中还提供了实施自定义凭证提供程序类的 Java 代码示例。

基本步骤如下所示:

指定自定义凭证提供程序

  1. 创建编译为 JAR 文件的自定义凭证提供程序类。

  2. 将脚本作为引导操作运行,从而将自定义凭证提供程序 JAR 文件复制到集群主节点的 /usr/share/aws/emr/emrfs/auxlib 位置。有关引导操作的更多信息,请参阅 (可选) 创建引导操作以安装其他软件

  3. 自定义 emrfs-site 分类,以指定在 JAR 文件中实施的类。有关指定配置对象以自定义应用程序的更多信息,请参阅 Amazon EMR 版本指南 中的配置应用程序

    以下示例演示了启动包含常见配置参数的 Hive 集群的 create-cluster 命令,并包括:

    • 运行脚本 copy_jar_file.sh 的引导操作,该脚本已保存到 Amazon S3中的 mybucket

    • 将 JAR 文件中定义的自定义凭证提供程序指定为 MyCustomCredentialsProvideremrfs-site 分类

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

    aws emr create-cluster --applications Name=Hive \ --bootstrap-actions '[{"Path":"s3://mybucket/copy_jar_file.sh","Name":"Custom action"}]' \ --ec2-attributes '{"KeyName":"MyKeyPair","InstanceProfile":"EMR_EC2_DefaultRole",\ "SubnetId":"subnet-xxxxxxxx","EmrManagedSlaveSecurityGroup":"sg-xxxxxxxx",\ "EmrManagedMasterSecurityGroup":"sg-xxxxxxxx"}' \ --service-role EMR_DefaultRole --enable-debugging --release-label emr-5.14.0 \ --log-uri 's3n://my-emr-log-bucket/' --name 'test-awscredentialsprovider-emrfs' \ --instance-type=m4.large --instance-count 3 \ --configurations '[{"Classification":"emrfs-site",\ "Properties":{"fs.s3.customAWSCredentialsProvider":"MyAWSCredentialsProviderWithUri"},\ "Configurations":[]}]'