

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

# 使用 Amazon EMR 自定义 IAM 角色
<a name="emr-iam-roles-custom"></a>

根据安全要求，您可能需要自定义 IAM 服务角色和权限，从而对权限加以限制。要自定义权限，我们建议您创建新的角色和策略。从托管式策略中的默认角色 (例如 `AmazonElasticMapReduceforEC2Role` 和 `AmazonElasticMapReduceRole`) 的权限开始着手。将相应内容复制并粘贴到新的策略语句中，根据具体情况修改权限，并将修改后的权限策略附加到您创建的角色。您必须拥有合适的 IAM 权限才能使用角色和策略。有关更多信息，请参阅[允许用户和组创建和修改角色](emr-iam-roles-create-permissions.md)。

如果您为 EC2 创建自定义 EMR 角色，请按照基本工作流程自动创建同名实例配置文件。Amazon EC2 允许您创建不同名称的实例配置文件和角色，但 Amazon EMR 不支持此配置，并且在您创建集群时会导致“invalid instance profile”错误。

**重要**  
当服务要求发生变化时，内联策略不会自动更新。如果您创建并附加内联策略，请注意可能会发生突然导致权限错误的服务更新。有关更多信息，请参阅《IAM 用户指南》**中的[托管式策略与内联策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_managed-vs-inline.html)和[在创建集群时指定自定义 IAM 角色](#emr-iam-roles-launch-jobflow)。

有关处理 IAM 角色的更多信息，请参阅《IAM 用户指南》**中的以下主题：
+  [创建角色以向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) 
+  [修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/modifying-role.html) 
+  [删除角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/deleting-roles.html) 

## 在创建集群时指定自定义 IAM 角色
<a name="emr-iam-roles-launch-jobflow"></a>

在创建集群时，您可以指定适用于 Amazon EMR 的服务角色和适用于 Amazon EC2 实例配置文件的角色。创建集群的用户需要拥有检索并向 Amazon EMR 和 EC2 实例分配角色的权限。否则，会出现**未授权该账户调用 EC2** 错误。有关更多信息，请参阅 [允许用户和组创建和修改角色](emr-iam-roles-create-permissions.md)。

### 使用控制台指定自定义角色
<a name="emr-iam-roles-launch-console"></a>

在创建集群时，您可以使用 **Advanced options (高级选项)** 指定适用于 Amazon EMR 的自定义服务角色、适用于 EC2 实例配置文件的自定义角色和自定义 Auto Scaling 角色。当您使用 **Quick options (快速选项)** 时，将指定默认服务角色和适用于 EC2 实例配置文件的默认角色。有关更多信息，请参阅 [Amazon EMR 使用的 IAM 服务角色](emr-iam-service-roles.md)。

------
#### [ Console ]

**使用控制台指定自定义 IAM 角色**

使用控制台创建集群时，必须为 Amazon EMR 指定自定义服务角色，并为 EC2 实例配置文件指定自定义角色。有关更多信息，请参阅 [Amazon EMR 使用的 IAM 服务角色](emr-iam-service-roles.md)。

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择 **Create cluster**（创建集群）。

1. 在 **Security configuration and permissions**（安全配置和权限）下，找到 **IAM role for instance profile**（适用于实例配置文件的 IAM 角色）和 **Service role for Amazon EMR**（适用于 Amazon EMR 的服务角色）字段。对于每个角色类型，从列表中选择一个角色。系统只会列出您的账户中具有针对相应角色类型的适当信任策略的角色。

1. 选择适用于集群的任何其他选项。

1. 要启动集群，选择 **Create cluster**（创建集群）。

------

### 使用 AWS CLI 来指定自定义角色
<a name="emr-iam-roles-launch-cli"></a>

您可以在 AWS CLI中使用 `create-cluster` 命令的选项显式指定 Amazon EMR 的服务角色和集群 EC2 实例的服务角色。使用 `--service-role` 选项指定服务角色。使用 `InstanceProfile` 选项的 `--ec2-attributes` 参数指定适用于 EC2 实例配置文件的角色。

将使用单独的选项（`--auto-scaling-role`）指定 Auto Scaling 角色。有关更多信息，请参阅 [将自动扩展与 Amazon EMR 中实例组的自定义策略结合使用](emr-automatic-scaling.md)。

**要指定自定义 IAM 角色，请使用 AWS CLI**
+ 以下命令将在启动集群时指定自定义服务角色 *MyCustomServiceRoleForEMR* 和适用于 EC2 实例配置文件的自定义角色 *MyCustomServiceRoleForClusterEC2Instances*。本示例使用默认 Amazon EMR 角色。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 \
  --applications Name=Hive Name=Pig --service-role MyCustomServiceRoleForEMR \
  --ec2-attributes InstanceProfile=MyCustomServiceRoleForClusterEC2Instances,\
  KeyName=myKey --instance-type m5.xlarge --instance-count 3
  ```

您可以使用这些选项 (而不是使用 `--use-default-roles` 选项) 来显式指定默认角色。`--use-default-roles` 选项指定服务角色以及 AWS CLI的 `config` 文件中定义的 EC2 实例配置文件的角色。

以下示例演示了 Amazon EM AWS CLI R 的指定自定义角色`config`的文件内容。使用此配置文件，指定 `--use-default-roles` 选项后，将使用 *MyCustomServiceRoleForEMR* 和 *MyCustomServiceRoleForClusterEC2Instances* 创建集群。默认情况下，`config` 文件将默认 `service_role` 指定为 `AmazonElasticMapReduceRole`，将默认 `instance_profile` 指定为 `EMR_EC2_DefaultRole`。

```
[default]
output = json
region = us-west-1
aws_access_key_id = myAccessKeyID
aws_secret_access_key = mySecretAccessKey
emr =
     service_role = MyCustomServiceRoleForEMR
     instance_profile = MyCustomServiceRoleForClusterEC2Instances
```