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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

授权访问 Amazon S3 中的EMRFS数据

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

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

或者,如果您的 Amazon EMR 解决方案的要求超出了所EMRFS提供的IAM角色范围,则可以定义一个自定义凭证提供程序类,该类允许您自定义对 Amazon S3 中EMRFS数据的访问权限。

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

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

有关此方法的详细说明,请参阅 AWS 大数据博客EMRFS中的安全分析来自其他 AWS 账户的数据。博客文章包含一个教程,指导您完成从创建IAM角色到启动集群的整个过程end-to-end。其中还提供了实施自定义凭证提供程序类的 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

    • 一种emrfs-site分类,它将JAR文件中定义的自定义凭证提供程序指定为 MyCustomCredentialsProvider

    注意

    为了便于读取,包含 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://my-emr-log-bucket/' --name 'test-awscredentialsprovider-emrfs' \ --instance-type=m5.xlarge --instance-count 3 \ --configurations '[{"Classification":"emrfs-site",\ "Properties":{"fs.s3.customAWSCredentialsProvider":"MyAWSCredentialsProviderWithUri"},\ "Configurations":[]}]'