

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

# 授予对 Amazon S3 中的 EMRFS 数据的访问权
<a name="emr-plan-credentialsprovider"></a>

默认情况下，EC2 的 EMR 角色确定访问 Amazon S3 中 EMRFS 数据的权限。无论是用户还是组通过 EMRFS 提出请求，附加到此角色的 IAM policy 都适用。默认值为 `EMR_EC2_DefaultRole`。有关更多信息，请参阅[集群 EC2 实例的服务角色（EC2 实例配置文件）](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html)。

从 Amazon EMR 发行版 5.10.0 开始，可以使用安全配置来指定 EMRFS 的 IAM 角色。这样可以为多用户集群自定义 EMRFS 对 Amazon S3 的请求的权限。您可以为不同用户和组指定不同的 IAM 角色，也可根据在 Amazon S3 中的前缀为不同的 Amazon S3 存储桶位置进行指定。当 EMRFS 向 Amazon S3 发出的请求与您指定的用户、组或位置匹配时，集群将使用您指定的相应角色，而不是 EC2 的 EMR 角色。有关更多信息，请参阅[为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-emrfs-iam-roles)。

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

## 为 Amazon S3 中的 EMRFS 数据创建自定义凭证提供程序
<a name="emr-create-credentialsprovider"></a>

要创建自定义凭据提供程序，您需要实现[AWSCredentials提供程序](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProvider.html)和 Hadoop [可配置](https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/conf/Configurable.html)类。

有关此方法的详细说明，请参阅 AWS 大[数据博客中的使用 EMRFS 安全分析来自其他 AWS 账户](https://aws.amazon.com/blogs/big-data/securely-analyze-data-from-another-aws-account-with-emrfs)的数据。博客文章包含一个教程，指导您完成从创建 IAM 角色到启动集群的整个过程end-to-end。其中还提供了实施自定义凭证提供程序类的 Java 代码示例。

基本步骤如下所示：

**指定自定义凭证提供程序**

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

1. 将脚本作为引导操作运行，从而将自定义凭证提供程序 JAR 文件复制到集群主节点的 `/usr/share/aws/emr/emrfs/auxlib` 位置。有关引导操作的更多信息，请参阅[（可选）创建引导操作以安装其它软件](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html)。

1. 自定义 `emrfs-site` 分类，以指定在 JAR 文件中实施的类。有关指定要自定义应用程序的配置对象的更多信息，请参阅《Amazon EMR 版本指南》**中的[配置应用程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

   以下示例演示了启动包含常见配置参数的 Hive 集群的 `create-cluster` 命令，并包括：
   + 运行脚本 `copy_jar_file.sh` 的引导操作，该脚本已保存到 Amazon S3 中的 `amzn-s3-demo-bucket`。
   + 将 JAR 文件中定义的自定义凭证提供程序指定为 `emrfs-site` 的 `MyCustomCredentialsProvider` 分类
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 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.12.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":[]}]'
   ```