

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

# 設定向 Amazon S3 請求使用 EMRFS 的 IAM 角色
<a name="emr-emrfs-iam-roles"></a>

**注意**  
在 Amazon EMR 6.15.0 中引入 Amazon S3 Access Grants 後，本頁所述的 EMRFS 角色映射功能便已獲得改善。針對 Amazon S3 中資料的可擴展存取控制解決方案，建議您將 [S3 Access Grants 與 Amazon EMR 搭配使用](emr-access-grants.md)。

當叢集上執行的應用程式參考使用 `s3://{{mydata}}` 格式的資料時，Amazon EMR 將使用 EMRFS 發出請求。若要與 Amazon S3 互動，EMRFS 會假設附接至您的 [Amazon EC2 執行個體設定檔](emr-iam-role-for-ec2.md)的許可政策。無論執行應用程式的使用者或群組，或 Amazon S3 中資料的位置為何，都使用相同 Amazon EC2 執行個體設定檔。

如果您的叢集有多個使用者，他們需要透過 EMRFS 對 Amazon S3 中的資料有不同層級的存取，您可以設定含 EMRFS 的 IAM 角色的安全組態。EMRFS 可以根據發出請求的使用者或群組或是根據 Amazon S3 中資料的位置擔任叢集 EC2 執行個體的不同服務角色。針對存取 Amazon S3 中的資料，EMRFS 的每個 IAM 角色可以擁有不同的許可。如需有關叢集 EC2 執行個體的服務角色的詳細資訊，請參閱 [叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)](emr-iam-role-for-ec2.md)。

Amazon EMR 5.10.0 版及更新版本支援針對 EMRFS 使用自訂 IAM 角色。如果您使用較早版本或您的需求超出 EMRFS 的 IAM 角色提供的範圍，可以改為建立自訂憑證提供者。如需詳細資訊，請參閱[授權存取 Amazon S3 中的 EMRFS 資料](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-plan-credentialsprovider)。

在使用安全組態來指定 EMRFS 的 IAM 角色時，設定角色映射。每個角色映射指定對應至識別符的 IAM 角色。這些識別符決定透過 EMRFS 存取 Amazon S3 的基礎。識別符可以是使用者、群組或顯示資料位置的 Amazon S3 字首。當 EMRFS 向 Amazon S3 發出請求時，如果請求符合存取基準，EMRFS 便可讓叢集 EC2 執行個體擔任請求的對應 IAM 角色。附接至該角色的 IAM 許可，而不是附接至叢集 EC2 執行個體服務角色的 IAM 許可。

角色映射中的使用者和群組是叢集上定義的 Hadoop 使用者和群組。在應用程式使用 EMRFS 的情況下，使用者和群組會傳送給 EMRFS (例如，YARN 使用者模擬)。Amazon S3 字首可以是任何深度的儲存貯體指標 (例如，`s3://amzn-s3-demo-bucket` 或 `s3://amzn-s3-demo-bucket/myproject/mydata`)。您可以在單一角色映射中指定多個識別符，但識別符必須全部都是相同的類型。

**重要**  
EMRFS 的 IAM 角色在應用程式使用者之間提供應用程式層級隔離。它不提供主機上使用者之間的主機層級隔離。任何有權存取叢集的使用者，都可以略過隔離以承擔任何角色。

叢集應用程式透過 EMRFS 向 Amazon S3 提出請求時，EMRFS 會依角色映射出現在安全組態中的順序，由上而下進行評估。如果透過 EMRFS 提出的請求不符合任何識別符，EMRFS 會回退至使用叢集 EC2 執行個體的服務角色。因此，建議附接至此角色的政策限制對 Amazon S3 的許可。如需詳細資訊，請參閱[叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)](emr-iam-role-for-ec2.md)。

## 設定角色
<a name="emr-emrfs-iam-roles-role-configuration"></a>

使用 EMRFS 的 IAM 角色設定安全組態前，請規劃並建立角色和要附接至角色的許可政策。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [EC2 執行個體的角色如何運作？](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)。建立許可政策時，建議您從附接至 EC2 預設 Amazon EMR 角色的受管政策開始，接著根據您的需求編輯此政策。預設角色名稱是 `EMR_EC2_DefaultRole`，而要編輯的預設受管政策是 `AmazonElasticMapReduceforEC2Role`。如需詳細資訊，請參閱[叢集 EC2 執行個體的服務角色 (EC2 執行個體設定檔)](emr-iam-role-for-ec2.md)。

### 更新承擔角色許可的信任政策
<a name="emr-emrfs-iam-role-trust-policy"></a>

EMRFS 使用的每個角色都必須擁有信任政策，以允許 EC2 的叢集 Amazon EMR 角色來擔任此角色。同樣地，EC2 的叢集 Amazon EMR 角色也必須擁有信任政策，以允許 EMRFS 角色來擔任此角色。

以下範例信任政策連接到 EMRFS 的角色。陳述式允許 EC2 的預設 Amazon EMR 角色擔任此角色。例如，如果您有兩個虛構的 EMRFS 角色：`EMRFSRole_First` 和 `EMRFSRole_Second`，此政策陳述式會新增到這兩個角色的信任政策。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowSTSAssumerole",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/EMR_EC2_DefaultRole"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

此外，以下範例信任政策陳述式新增到 `EMR_EC2_DefaultRole` 以允許兩個虛構的 EMRFS 角色擔任此角色。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowSTSAssumerole",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/EMRFSRole_First",
          "arn:aws:iam::123456789012:role/EMRFSRole_Second"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

**更新 IAM 角色的信任政策**

前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 選擇 **Roles (角色)**、在 **Search (搜尋)** 中輸入角色的名稱，然後選取它的 **Role name (角色名稱)**。

1. 選擇 **Trust relationships (信任關係)**、**Edit trust relationship (編輯信任關係)**。

1. 依照上述指導方針，根據**政策文件**新增信任陳述式，然後選擇**更新信任政策**。

### 將角色指定為金鑰使用者
<a name="emr-emrfs-iam-role-key-user"></a>

如果角色允許存取 Amazon S3 中的位置，而此位置已使用 AWS KMS key加密，請確定已將該角色指定為金鑰使用者。這會授予角色使用 KMS 金鑰的許可。如需詳細資訊，請參閱*《AWS Key Management Service 開發人員指南》*中的[在 AWS KMS中使用金鑰政策](https://docs.aws.amazon.com//kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)。

## 使用 EMRFS 的 IAM 角色設定安全組態
<a name="emr-emrfs-iam-roles-setup"></a>

**重要**  
如果您指定 EMRFS 的 IAM 角色皆不套用，EMRFS 會回退至 EC2 的 Amazon EMR 角色。請考慮自訂此角色，來為您的應用程式適當地限制對 Amazon S3 的許可，然後在建立叢集時指定此自訂角色，而非指定 `EMR_EC2_DefaultRole`。如需詳細資訊，請參閱[使用 Amazon EMR 自訂 IAM 角色](emr-iam-roles-custom.md)及[建立叢集時指定自訂 IAM 角色](emr-iam-roles-custom.md#emr-iam-roles-launch-jobflow)。

**使用主控台指定向 Amazon S3 請求使用 EMRFS 的 IAM 角色**

1. 建立指定角色映射的安全組態：

   1. 在 Amazon EMR 主控台中，選取**安全組態**和**建立**。

   1. 輸入安全組態的 **Name (名稱)**。您建立叢集時會使用此名稱來指定安全組態。

   1. 選擇**向 Amazon S3 請求使用 EMRFS 的 IAM 角色**。

   1. 選取要套用的 **IAM 角色)**，然後在**存取的基準**下，從清單中選取識別符類型 (**使用者**、**群組**或 **S3 字首**)，並輸入對應的識別符。如果您使用多個識別符，以逗號和不含空格的方式分隔識別符。如需每個識別符類型的詳細資訊，請參閱下面的「[JSON configuration reference](#emrfs-seccfg-json)」。

   1. 選擇 **Add role (新增角色)**，來設定如先前步驟中所述的額外角色對應。

   1. 適當地設定其他的安全組態選項，然後選擇 **Create (建立)**。如需詳細資訊，請參閱[使用 Amazon EMR 主控台或使用 建立安全組態 AWS CLI](emr-create-security-configuration.md)。

1. 建立叢集時指定您在上面建立的安全組態。如需詳細資訊，請參閱[指定 Amazon EMR 叢集的安全組態](emr-specify-security-configuration.md)。

**使用 為 Amazon S3 的 EMRFS 請求指定 IAM 角色 AWS CLI**

1. 使用 `aws emr create-security-configuration` 命令，指定安全組態的名稱，以及採用 JSON 格式的安全組態詳細資訊。

   以下所示範例命令建立名稱為 `EMRFS_Roles_Security_Configuration` 的安全組態。這是以 `MyEmrfsSecConfig.json` 檔案中的 JSON 結構為基礎，其儲存在與命令執行的相同目錄中。

   ```
   aws emr create-security-configuration --name {{EMRFS_Roles_Security_Configuration}} --security-configuration {{file://MyEmrFsSecConfig.json}}.
   ```

   使用下列針對 `MyEmrFsSecConfig.json` 檔案結構的指導方針。您可以指定此結構以及其他安全組態選項的結構。如需詳細資訊，請參閱[使用 Amazon EMR 主控台或使用 建立安全組態 AWS CLI](emr-create-security-configuration.md)。

   以下是 JSON 程式碼片段範例，用於在安全組態內為 EMRFS 指定自訂 IAM 角色。它示範了三種不同標識符類型的角色映射，後接參數參考。

   ```
   {
     "AuthorizationConfiguration": {
       "EmrFsConfiguration": {
         "RoleMappings": [{
           "Role": "{{arn:aws:iam::123456789101:role/allow_EMRFS_access_for_user1}}",
           "IdentifierType": "User",
           "Identifiers": [ "{{user1}}" ]
         },{
           "Role": "{{arn:aws:iam::123456789101:role/allow_EMRFS_access_to_demo_s3_buckets}}",
           "IdentifierType": "Prefix",
           "Identifiers": [ "{{s3://amzn-s3-demo-bucket1/","s3://amzn-s3-demo-bucket2/}}" ]
         },{
           "Role": "{{arn:aws:iam::123456789101:role/allow_EMRFS_access_for_AdminGroup}}",
           "IdentifierType": "Group",
           "Identifiers": [ "{{AdminGroup}}" ]
         }]
       }
     }
   }
   ```    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/emr-emrfs-iam-roles.html)

1. 使用 `aws emr create-cluster` 命令來建立叢集並指定您在上一個步驟建立的安全組態。

   以下範例在安裝預設核心 Hadoop 應用程式下建立叢集。該叢集會使用上面建立為 `EMRFS_Roles_Security_Configuration` 的安全組態，也會使用 EC2 的自訂 Amazon EMR 角色 `EC2_Role_EMR_Restrict_S3`，這個角色是透過 `--ec2-attributes` 參數的 `InstanceProfile` 引數所指定。
**注意**  
包含 Linux 行接續字元 (\\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

   ```
   aws emr create-cluster --name {{MyEmrFsS3RolesCluster}} \
   --release-label {{emr-7.13.0}} --ec2-attributes InstanceProfile={{EC2_Role_EMR_Restrict_S3}},KeyName={{MyKey}} \
   --instance-type {{m5.xlarge}} --instance-count {{3}} \
   --security-configuration {{EMRFS_Roles_Security_Configuration}}
   ```