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

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

默认情况下,EC2 的 EMR 角色确定访问 Amazon S3 中 EMRFS 数据的权限。无论是用户还是组通过 EMRFS 提出请求,附加到此角色的 IAM policy 都适用。默认为 EMR_EC2_DefaultRole。有关更多信息,请参阅集群 EC2 实例的服务角色(EC2 实例配置文件)

从 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大数据博客中的 Securely analyze data from another AWS account with EMRFS。博文中包含了全流程分步教程,涵盖从创建 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 中的 amzn-s3-demo-bucket

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

    注意

    为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

    aws emr create-cluster --applications Name=Hive \ --bootstrap-actions '[{"Path":"s3://amzn-s3-demo-bucket/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_V2 --enable-debugging --release-label emr-7.3.0 \ --log-uri 's3n://amzn-s3-demo-bucket/' --name 'test-awscredentialsprovider-emrfs' \ --instance-type=m5.xlarge --instance-count 3 \ --configurations '[{"Classification":"emrfs-site",\ "Properties":{"fs.s3.customAWSCredentialsProvider":"MyAWSCredentialsProviderWithUri"},\ "Configurations":[]}]'