

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 授權存取 Amazon S3 中的 EMRFS 資料
<a name="emr-plan-credentialsprovider"></a>

依預設，EC2 的 EMR 角色會決定存取 Amazon S3 中的 EMRFS 資料的許可。附接至此角色 (無論是使用者或群組) IAM 政策套用會透過 EMRFS 來發出請求。預設值為 `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。您可以為不同使用者和群組，並根據 Amazon S3 中的字首為不同的 Amazon S3 儲存貯體指定不同 IAM 角色。當 EMRFS 對 Amazon S3 發出請求，以符合您指定的使用者、群組或位置，叢集會使用您指定的對應角色，而不是適用於 EC2 的 EMR 角色。如需詳細資訊，請參閱[設定向 Amazon S3 請求使用 EMRFS 的 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>

若要建立自訂登入資料供應商，您實作 [ AWSCredentialsProvider](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 角色到啟動叢集的端對端程序。它還提供一個 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)。

   以下範例示範 `create-cluster` 命令，其會啟動 Hive 叢集與常見的組態參數，而且還包括：
   + 執行指令碼 `copy_jar_file.sh` 的引導操作，此指令碼會儲存至 Amazon S3 中的 `amzn-s3-demo-bucket`。
   + `emrfs-site` 分類，其會指定在 JAR 檔中定義做為 `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":[]}]'
   ```