授予对 Amazon S3 中的 EMRFS 数据的访问权 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

默认情况下,的 EMR 角色 EC2 决定在 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 发出与用户、群组或您指定的位置相匹配的请求时,集群将使用您指定的相应角色,而不是 EMR 角色。 EC2有关更多信息,请参阅为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色

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

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

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

有关此方法的详细说明,请参阅 Amazon 大数据博客中的使用 EMRFS 安全分析来自其他 Amazon 账户的数据。博客文章包含一个教程,指导您完成从创建 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

    • 将 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.8.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":[]}]'