

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

# 配置 IAM 服务角色以获得 Amazon EMR 对 AWS 服务和资源的权限
<a name="emr-iam-roles"></a>

Amazon EMR 和应用程序（如 Hadoop 和 Spark）在运行时需要访问其它 AWS 资源和执行操作的权限。Amazon EMR 中的每个集群必须有一个*服务角色*和一个适用于 Amazon EC2 *实例配置文件*的角色。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)和[使用实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)。挂载到这些角色的 IAM policy 为集群提供了代表用户与其它 AWS 服务进行互操作的权限。

如果您在 Amazon EMR 中的集群使用了自动伸缩，则需要一个额外的角色，即 Auto Scaling 角色。如果您使用 EMR 笔记本电脑，则必须担任 EMR Notebooks 的 AWS 服务角色。

Amazon EMR 为确定权限的每个角色提供默认角色和默认托管式策略。托管策略由创建和维护 AWS，因此如果服务需求发生变化，它们会自动更新。请参阅《IAM 用户指南》**中的[AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies.html)。

如果您是首次在账户中创建集群或 Notebook，那么适用于 Amazon EMR 的角色尚不存在。创建角色后，您可以在 IAM 控制台中查看角色、附加到这些角色的策略以及策略允许或拒绝的权限（[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)）。您可以指定要创建和使用的 Amazon EMR 的默认角色，也可以创建自己的角色并在创建集群时分别指定它们以自定义权限，还可以指定在使用 AWS CLI创建集群时要使用的默认角色。有关更多信息，请参阅 [使用 Amazon EMR 自定义 IAM 角色](emr-iam-roles-custom.md)。

## 修改基于身份的策略以获取传递 Amazon EMR 服务角色的权限
<a name="emr-iam-roles-passrole"></a>

Amazon EMR 完全权限默认托管策略包含 `iam:PassRole` 安全配置，包括以下内容：
+ `iam:PassRole` 权限仅适用于特定默认 Amazon EMR 角色。
+ `iam:PassedToService`允许您仅将策略用于指定 AWS 服务（例如`elasticmapreduce.amazonaws.com`和）的条件`ec2.amazonaws.com`。

您可以在 IAM 控制台中查看 [Amazon EMRFull AccessPolicy \$1v2 和 Amazon P EMRService olicy\$1v2](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEMRFullAccessPolicy_v2) [策略](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEMRServicePolicy_v2)的 JSON 版本。建议您使用 v2 托管式策略创建新的集群。

## 服务角色摘要
<a name="emr-iam-roles-summary"></a>

下表列出了与 Amazon EMR 关联的 IAM 服务角色，以供快速参考。


| 函数 | 默认角色 | 说明 | 默认托管式策略 | 
| --- | --- | --- | --- | 
|  [Amazon EMR 的服务角色（EMR 角色）](emr-iam-role.md)  |  `EMR_DefaultRole_V2`  |  允许 Amazon EMR 在配置资源和执行 AWS 服务级别操作时代表您调用其他服务。所有集群都需要该角色。  |  `AmazonEMRServicePolicy_v2`  请求竞价型实例需要服务相关角色。如果此角色不存在，Amazon EMR 服务角色必须拥有创建它的权限，否则会出现权限错误。如果您计划请求竞价型实例，您必须更新此策略，以包含一个允许创建此服务相关角色的语句。有关更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EMR 的服务角色（EMR 角色）](emr-iam-role.md) 和[竞价型实例请求的服务相关角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#service-linked-roles-spot-instance-requests)。   | 
| [集群 EC2 实例（EC2 实例配置文件）的服务角色](emr-iam-role-for-ec2.md) |  `EMR_EC2_DefaultRole`  |  在集群实例上运行在 Hadoop 生态系统之上的应用程序进程在调用其他 AWS 服务时会使用此角色。要使用 EMRFS 访问 Amazon S3 中的数据，您可以根据数据在 Amazon S3 中的位置指定代入不同的角色。例如，多个团队可以访问单个 Amazon S3 数据“存储账户”。有关更多信息，请参阅[为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色](emr-emrfs-iam-roles.md)。所有集群都需要该角色。  |  `AmazonElasticMapReduceforEC2Role`（有关更多信息，请参阅 [集群 EC2 实例（EC2 实例配置文件）的服务角色](emr-iam-role-for-ec2.md)。）  | 
| [Amazon EMR 中的自动扩展服务角色（Auto Scaling 角色）](emr-iam-role-automatic-scaling.md) |  `EMR_AutoScaling_DefaultRole`  |  允许用于动态扩展环境的其它操作。只有在 Amazon EMR 中使用自动伸缩的集群才需要。有关更多信息，请参阅[将自动扩展与 Amazon EMR 中实例组的自定义策略结合使用](emr-automatic-scaling.md)。  |  `AmazonElasticMapReduceforAutoScalingRole`（有关更多信息，请参阅 [Amazon EMR 中的自动扩展服务角色（Auto Scaling 角色）](emr-iam-role-automatic-scaling.md)。）  | 
| [EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md) |  `EMR_Notebooks_DefaultRole`  |  提供 EMR 笔记本访问其他 AWS 资源和执行操作所需的权限。仅在使用 EMR Notebooks 时需要。  |  `AmazonElasticMapReduceEditorsRole`（有关更多信息，请参阅 [EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md)。） 默认情况下也附加 `S3FullAccessPolicy`。本策略的内容如下所示。   JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowS3"
    }
  ]
}
```      | 
| [服务相关角色](using-service-linked-roles.md) | `AWSServiceRoleForEMRCleanup` | Amazon EMR 自动创建服务相关角色。如果 Amazon EMR 的服务失去了清除 Amazon EC2 资源的能力，Amazon EMR 可以使用此角色来进行清除操作。如果集群使用竞价型实例，则附加到 [Amazon EMR 的服务角色（EMR 角色）](emr-iam-role.md)的权限策略必须允许创建服务相关角色。有关更多信息，请参阅 [对 Amazon EMR 使用服务相关角色](using-service-linked-roles.md)。 | `AmazonEMRCleanupPolicy` | 

**Topics**
+ [修改基于身份的策略以获取传递 Amazon EMR 服务角色的权限](#emr-iam-roles-passrole)
+ [服务角色摘要](#emr-iam-roles-summary)
+ [Amazon EMR 使用的 IAM 服务角色](emr-iam-service-roles.md)
+ [使用 Amazon EMR 自定义 IAM 角色](emr-iam-roles-custom.md)
+ [为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色](emr-emrfs-iam-roles.md)
+ [使用基于资源的策略让 Amazon EMR 访问 AWS Glue 数据目录](emr-iam-roles-glue.md)
+ [将 IAM 角色与直接调用 AWS 服务的应用程序配合使用](emr-iam-roles-calling.md)
+ [允许用户和组创建和修改角色](emr-iam-roles-create-permissions.md)

# Amazon EMR 使用的 IAM 服务角色
<a name="emr-iam-service-roles"></a>

在预置集群资源、运行应用程序、动态扩展资源以及创建和运行 EMR Notebooks 时，Amazon EMR 使用 IAM 服务角色代表您执行操作。Amazon EMR 与其它 AWS 服务交互时使用以下角色。每个角色在 Amazon EMR 中都有唯一的功能。本部分中的主题介绍角色功能，并提供默认角色和每个角色的权限策略。

如果您的集群上有直接调用 AWS 服务的应用程序代码，则可能需要使用 SDK 来指定角色。有关更多信息，请参阅 [将 IAM 角色与直接调用 AWS 服务的应用程序配合使用](emr-iam-roles-calling.md)。

**Topics**
+ [Amazon EMR 的服务角色（EMR 角色）](emr-iam-role.md)
+ [集群 EC2 实例（EC2 实例配置文件）的服务角色](emr-iam-role-for-ec2.md)
+ [Amazon EMR 中的自动扩展服务角色（Auto Scaling 角色）](emr-iam-role-automatic-scaling.md)
+ [EMR Notebooks 的服务角色](emr-managed-notebooks-service-role.md)
+ [对 Amazon EMR 使用服务相关角色](using-service-linked-roles.md)

# Amazon EMR 的服务角色（EMR 角色）
<a name="emr-iam-role"></a>

Amazon EMR 角色定义了在预置资源，以及执行对于在集群中运行的特定 Amazon EC2 实例而言不会执行的服务级任务时，将允许 Amazon EMR 执行的操作。例如，服务角色用于在集群启动时配置 EC2 实例。
+ 默认角色名为 `EMR_DefaultRole_V2`。
+ 附加到 `EMR_DefaultRole_V2` 的 Amazon EMR 范围的默认托管式策略是 `AmazonEMRServicePolicy_v2`。此 v2 策略将取代弃用的默认托管式策略 `AmazonElasticMapReduceRole`。

`AmazonEMRServicePolicy_v2` 取决于对 Amazon EMR 预调配或使用的资源的范围缩小访问权限。使用此策略时，您需要在预置集群时传递用户标签 `for-use-with-amazon-emr-managed-policies = true`。Amazon EMR 将自动传播这些标签。此外，您可能需要手动向特定类型的资源添加用户标签，例如不是由 Amazon EMR 创建的 EC2 安全组。请参阅[标记资源以使用托管式策略](emr-managed-iam-policies.md#manually-tagged-resources)。

**重要**  
Amazon EMR 使用此 Amazon EMR 服务角色和 `AWSServiceRoleForEMRCleanup` 角色来清理账户中不再使用的集群资源，例如 Amazon EC2 实例。您必须在角色策略包含删除或终止资源所需的操作。否则，Amazon EMR 将无法执行这些清理操作，并且集群上剩余的未使用资源可能会产生费用。

下面显示的是当前 `AmazonEMRServicePolicy_v2` 策略的内容。您还可以在 IAM 控制台上查看 [https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEMRServicePolicy_v2](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEMRServicePolicy_v2) 托管式策略的当前内容。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateInTaggedNetwork",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface",
        "ec2:RunInstances",
        "ec2:CreateFleet",
        "ec2:CreateLaunchTemplate",
        "ec2:CreateLaunchTemplateVersion"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:subnet/*",
        "arn:aws:ec2:*:*:security-group/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateWithEMRTaggedLaunchTemplate",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateFleet",
        "ec2:RunInstances",
        "ec2:CreateLaunchTemplateVersion"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:launch-template/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateEMRTaggedLaunchTemplate",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateLaunchTemplate"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:launch-template/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateEMRTaggedInstancesAndVolumes",
      "Effect": "Allow",
      "Action": [
        "ec2:RunInstances",
        "ec2:CreateFleet"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:volume/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "ResourcesToLaunchEC2",
      "Effect": "Allow",
      "Action": [
        "ec2:RunInstances",
        "ec2:CreateFleet",
        "ec2:CreateLaunchTemplate",
        "ec2:CreateLaunchTemplateVersion"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:network-interface/*",
        "arn:aws:ec2:*::image/ami-*",
        "arn:aws:ec2:*:*:key-pair/*",
        "arn:aws:ec2:*:*:capacity-reservation/*",
        "arn:aws:ec2:*:*:placement-group/pg-*",
        "arn:aws:ec2:*:*:fleet/*",
        "arn:aws:ec2:*:*:dedicated-host/*",
        "arn:aws:resource-groups:*:*:group/*"
      ]
    },
    {
      "Sid": "ManageEMRTaggedResources",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateLaunchTemplateVersion",
        "ec2:DeleteLaunchTemplate",
        "ec2:DeleteNetworkInterface",
        "ec2:ModifyInstanceAttribute",
        "ec2:TerminateInstances"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "ManageTagsOnEMRTaggedResources",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:network-interface/*",
        "arn:aws:ec2:*:*:launch-template/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateNetworkInterfaceNeededForPrivateSubnet",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "TagOnCreateTaggedEMRResources",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:network-interface/*",
        "arn:aws:ec2:*:*:instance/*",
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:launch-template/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": [
            "RunInstances",
            "CreateFleet",
            "CreateLaunchTemplate",
            "CreateNetworkInterface"
          ]
        }
      }
    },
    {
      "Sid": "TagPlacementGroups",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:placement-group/pg-*"
      ]
    },
    {
      "Sid": "ListActionsForEC2Resources",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeCapacityReservations",
        "ec2:DescribeDhcpOptions",
        "ec2:DescribeImages",
        "ec2:DescribeInstances",
        "ec2:DescribeInstanceTypeOfferings",
        "ec2:DescribeLaunchTemplates",
        "ec2:DescribeNetworkAcls",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DescribePlacementGroups",
        "ec2:DescribeRouteTables",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:DescribeVolumes",
        "ec2:DescribeVolumeStatus",
        "ec2:DescribeVpcAttribute",
        "ec2:DescribeVpcEndpoints",
        "ec2:DescribeVpcs"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "CreateDefaultSecurityGroupWithEMRTags",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateSecurityGroup"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:security-group/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateDefaultSecurityGroupInVPCWithEMRTags",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateSecurityGroup"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:vpc/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "TagOnCreateDefaultSecurityGroupWithEMRTags",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:security-group/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true",
          "ec2:CreateAction": "CreateSecurityGroup"
        }
      }
    },
    {
      "Sid": "ManageSecurityGroups",
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateEMRPlacementGroups",
      "Effect": "Allow",
      "Action": [
        "ec2:CreatePlacementGroup"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:placement-group/pg-*"
      ]
    },
    {
      "Sid": "DeletePlacementGroups",
      "Effect": "Allow",
      "Action": [
        "ec2:DeletePlacementGroup"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AutoScaling",
      "Effect": "Allow",
      "Action": [
        "application-autoscaling:DeleteScalingPolicy",
        "application-autoscaling:DeregisterScalableTarget",
        "application-autoscaling:DescribeScalableTargets",
        "application-autoscaling:DescribeScalingPolicies",
        "application-autoscaling:PutScalingPolicy",
        "application-autoscaling:RegisterScalableTarget"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "ResourceGroupsForCapacityReservations",
      "Effect": "Allow",
      "Action": [
        "resource-groups:ListGroupResources"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AutoScalingCloudWatch",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricAlarm",
        "cloudwatch:DeleteAlarms",
        "cloudwatch:DescribeAlarms"
      ],
      "Resource": [
        "arn:aws:cloudwatch:*:*:alarm:*_EMR_Auto_Scaling"
      ]
    },
    {
      "Sid": "PassRoleForAutoScaling",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/EMR_AutoScaling_DefaultRole"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "application-autoscaling.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "PassRoleForEC2",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/EMR_EC2_DefaultRole"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ec2.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "CreateAndModifyEmrServiceVPCEndpoint",
      "Effect": "Allow",
      "Action": [
        "ec2:ModifyVpcEndpoint",
        "ec2:CreateVpcEndpoint"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:vpc-endpoint/*",
        "arn:aws:ec2:*:*:subnet/*",
        "arn:aws:ec2:*:*:security-group/*",
        "arn:aws:ec2:*:*:vpc/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
        }
      }
    },
    {
      "Sid": "CreateEmrServiceVPCEndpoint",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVpcEndpoint"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:vpc-endpoint/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true",
          "aws:RequestTag/Name": "emr-service-vpce"
        }
      }
    },
    {
      "Sid": "TagEmrServiceVPCEndpoint",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:vpc-endpoint/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": "CreateVpcEndpoint",
          "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true",
          "aws:RequestTag/Name": "emr-service-vpce"
        }
      }
    }
  ]
}
```

------

您的服务角色应该使用下面的信任策略。

**重要**  
下面的信任策略包括 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件密钥，该密钥将限制您为 Amazon EMR 授予的、针对您账户中特定资源的权限。使用这些策略可以防止[混淆代理问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowSTSAssumerole",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/EMRServiceRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:elasticmapreduce:*:123456789012:*"
        }
      }
    }
  ]
}
```

------

# 集群 EC2 实例（EC2 实例配置文件）的服务角色
<a name="emr-iam-role-for-ec2"></a>

集群 EC2 实例的服务角色（又称为 Amazon EMR 的 EC2 实例配置文件）是一种特殊类型的服务角色，在实例启动时分配给 Amazon EMR 集群中的每个 EC2 实例。在 Hadoop 生态系统之上运行的应用程序进程代入该角色来获得与其它 AWS 服务交互的权限。

有关 EC2 实例的服务角色的更多信息，请参阅《IAM 用户指南》**中的[使用 IAM 角色为 Amazon EC2 实例上运行的应用程序授予权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)。

**重要**  
集群 EC2 实例的默认服务角色及其关联的 AWS 默认托管策略即将被弃用，没有提供替代的 AWS 托管策略。`AmazonElasticMapReduceforEC2Role`您需要创建并指定实例配置文件以替换弃用的角色和默认策略。

## 默认角色和托管式策略
<a name="emr-ec2-role-default"></a>
+ 默认角色名为 `EMR_EC2_DefaultRole`。
+ `EMR_EC2_DefaultRole` 默认托管式策略 `AmazonElasticMapReduceforEC2Role` 的支持即将结束。不要为 EC2 实例配置文件使用默认托管式策略，而是将基于资源的策略应用于 Amazon EMR 需要的 S3 桶和其他资源，或者使用您自己的客户管理型策略和 IAM 角色作为实例配置文件。有关更多信息，请参阅 [创建具有最小权限的集群 EC2 实例服务角色](#emr-ec2-role-least-privilege)。

下面显示了 `AmazonElasticMapReduceforEC2Role` 版本 3 的内容。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Action": [
        "cloudwatch:*",
        "dynamodb:*",
        "ec2:Describe*",
        "elasticmapreduce:Describe*",
        "elasticmapreduce:ListBootstrapActions",
        "elasticmapreduce:ListClusters",
        "elasticmapreduce:ListInstanceGroups",
        "elasticmapreduce:ListInstances",
        "elasticmapreduce:ListSteps",
        "kinesis:CreateStream",
        "kinesis:DeleteStream",
        "kinesis:DescribeStream",
        "kinesis:GetRecords",
        "kinesis:GetShardIterator",
        "kinesis:MergeShards",
        "kinesis:PutRecord",
        "kinesis:SplitShard",
        "rds:Describe*",
        "s3:*",
        "sdb:*",
        "sns:*",
        "sqs:*",
        "glue:CreateDatabase",
        "glue:UpdateDatabase",
        "glue:DeleteDatabase",
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:CreateTable",
        "glue:UpdateTable",
        "glue:DeleteTable",
        "glue:GetTable",
        "glue:GetTables",
        "glue:GetTableVersions",
        "glue:CreatePartition",
        "glue:BatchCreatePartition",
        "glue:UpdatePartition",
        "glue:DeletePartition",
        "glue:BatchDeletePartition",
        "glue:GetPartition",
        "glue:GetPartitions",
        "glue:BatchGetPartition",
        "glue:CreateUserDefinedFunction",
        "glue:UpdateUserDefinedFunction",
        "glue:DeleteUserDefinedFunction",
        "glue:GetUserDefinedFunction",
        "glue:GetUserDefinedFunctions"
      ],
      "Sid": "AllowCLOUDWATCH"
    }
  ]
}
```

------

您的服务角色应该使用下面的信任策略。

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

****  

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

------

## 创建具有最小权限的集群 EC2 实例服务角色
<a name="emr-ec2-role-least-privilege"></a>

作为最佳实践，我们强烈建议您为集群 EC2 实例创建服务角色和具有应用程序所需其他 AWS 服务最低权限的权限策略。

默认托管式策略 `AmazonElasticMapReduceforEC2Role` 提供可轻松启动初始集群的权限。但是，`AmazonElasticMapReduceforEC2Role`即将被弃用，Amazon EMR 不会为已弃用的角色提供 AWS 替代的托管默认策略。要启动初始集群，您需要提供基于客户管理的资源或基于 ID 的策略。

以下策略语句提供了 Amazon EMR 不同功能所需权限的示例。我们建议您使用这些权限创建权限策略，将访问权限限制为您的集群所需的功能和资源。所有示例政策声明都使用*us-west-2*地区和虚构的 AWS 账户 ID。*123456789012*请将它们替换为适合您集群的值。

有关创建和指定自定义角色的更多信息，请参阅[使用 Amazon EMR 自定义 IAM 角色](emr-iam-roles-custom.md)。

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

### 使用 EMRFS 读写 Amazon S3 中的数据
<a name="emr-ec2-role-EMRFS"></a>

当在 Amazon EMR 集群上运行的应用程序引用 `s3://mydata` 格式的数据时，Amazon EMR 使用 EC2 实例配置文件发出请求。集群通常以这种方式在 Amazon S3 中读取和写入数据。默认情况下，Amazon EMR 使用附加到集群 EC2 实例的服务角色的权限。有关更多信息，请参阅[为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色](emr-emrfs-iam-roles.md)。

由于 EMRFS 的 IAM 角色将回退到附加到集群 EC2 实例服务角色的权限，因此作为一项最佳实践，我们建议您对 EMRFS 使用 IAM 角色，并限制附加到集群 EC2 实例服务角色的 EMRFS 和 Amazon S3 权限。

下面的示例语句演示了 EMRFS 向 Amazon S3 发出请求所需的权限。
+ *my-data-bucket-in-s3-for-emrfs-reads-and-writes* 指定 Amazon S3 中的桶，在该桶中，集群使用 */\$1* 读取和写入数据和所有子文件夹。请仅添加您的应用程序需要的存储桶和文件夹。
+ 只有在启用 EMRFS 一致视图时，才需要允许 `dynamodb` 操作的策略声明。*EmrFSMetadata* 为 EMRFS 一致视图指定默认文件夹。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:CreateBucket",
        "s3:DeleteObject",
        "s3:GetBucketVersioning",
        "s3:GetObject",
        "s3:GetObjectTagging",
        "s3:GetObjectVersion",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:ListBucketVersions",
        "s3:ListMultipartUploadParts",
        "s3:PutBucketVersioning",
        "s3:PutObject",
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::my-data-bucket-in-s3-for-emrfs-reads-and-writes",
        "arn:aws:s3:::my-data-bucket-in-s3-for-emrfs-reads-and-writes/*"
      ],
      "Sid": "AllowS3Abortmultipartupload"
    },
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:CreateTable",
        "dynamodb:BatchGetItem",
        "dynamodb:BatchWriteItem",
        "dynamodb:PutItem",
        "dynamodb:DescribeTable",
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:Scan",
        "dynamodb:Query",
        "dynamodb:UpdateItem",
        "dynamodb:DeleteTable",
        "dynamodb:UpdateTable"
      ],
      "Resource": [
        "arn:aws:dynamodb:*:123456789012:table/EmrFSMetadata"
      ],
      "Sid": "AllowDYNAMODBCreatetable"
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricData",
        "dynamodb:ListTables",
        "s3:ListBucket"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowCLOUDWATCHPutmetricdata"
    },
    {
      "Effect": "Allow",
      "Action": [
        "sqs:GetQueueUrl",
        "sqs:ReceiveMessage",
        "sqs:DeleteQueue",
        "sqs:SendMessage",
        "sqs:CreateQueue"
      ],
      "Resource": [
        "arn:aws:sqs:*:123456789012:EMRFS-Inconsistency-*"
      ],
      "Sid": "AllowSQSGetqueueurl"
    }
  ]
}
```

------

### 将日志文件存档到 Amazon S3
<a name="emr-ec2-role-s3-logs"></a>

以下策略语句允许 Amazon EMR 集群将日志文件存档到指定的 Amazon S3 位置。在以下示例中，创建集群*s3://MyLoggingBucket/MyEMRClusterLogs*时，使用控制台中的**日志文件夹 S3 位置** AWS CLI、中的`--log-uri`选项或`RunJobFlow`命令中的`LogUri`参数进行指定。有关更多信息，请参阅 [将日志文件归档到 Amazon S3](emr-plan-debugging.md#emr-plan-debugging-logs-archive)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::MyLoggingBucket/MyEMRClusterLogs/*"
      ],
      "Sid": "AllowS3Putobject"
    }
  ]
}
```

------

### 使用 AWS Glue 数据目录
<a name="emr-ec2-role-glue"></a>

以下策略声明允许您使用 Glue 数据目录作为 AWS 应用程序的元数据仓时所需的操作。有关更多信息，请参阅《亚马逊 *EM* R 发布指南》[中的 [“使用 AWS Glue 数据目录作为 Spark SQL 的元数据库](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html)、[使用 AWS Glue 数据目录作为 Hive 的元数据仓](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-metastore-glue.html)以及将 Presto 与 Glue 数据目录一起使用 AWS Glue 数据](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto-glue.html)目录”。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:CreateDatabase",
        "glue:UpdateDatabase",
        "glue:DeleteDatabase",
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:CreateTable",
        "glue:UpdateTable",
        "glue:DeleteTable",
        "glue:GetTable",
        "glue:GetTables",
        "glue:GetTableVersions",
        "glue:CreatePartition",
        "glue:BatchCreatePartition",
        "glue:UpdatePartition",
        "glue:DeletePartition",
        "glue:BatchDeletePartition",
        "glue:GetPartition",
        "glue:GetPartitions",
        "glue:BatchGetPartition",
        "glue:CreateUserDefinedFunction",
        "glue:UpdateUserDefinedFunction",
        "glue:DeleteUserDefinedFunction",
        "glue:GetUserDefinedFunction",
        "glue:GetUserDefinedFunctions"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowGLUECreatedatabase"
    }
  ]
}
```

------

# Amazon EMR 中的自动扩展服务角色（Auto Scaling 角色）
<a name="emr-iam-role-automatic-scaling"></a>

Amazon EMR 的 Auto Scaling 角色的作用与服务角色相似，但前者允许用于动态扩展环境的其它操作。
+ 默认角色名为 `EMR_AutoScaling_DefaultRole`。
+ 附加到 `EMR_AutoScaling_DefaultRole` 的默认托管式策略是 `AmazonElasticMapReduceforAutoScalingRole`。

`AmazonElasticMapReduceforAutoScalingRole` 版本 1 的内容如下所示。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "cloudwatch:DescribeAlarms",
        "elasticmapreduce:ListInstanceGroups",
        "elasticmapreduce:ModifyInstanceGroups"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Sid": "AllowCLOUDWATCHDescribealarms"
    }
  ]
}
```

------

您的服务角色应该使用下面的信任策略。

**重要**  
下面的信任策略包括 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件密钥，该密钥将限制您为 Amazon EMR 授予的、针对您账户中特定资源的权限。使用这些策略可以防止[混淆代理问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/ApplicationAutoScalingEMRRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:application-autoscaling:*:123456789012:scalable-target/*"
        }
      },
      "Sid": "AllowSTSAssumerole"
    }
  ]
}
```

------

# EMR Notebooks 的服务角色
<a name="emr-managed-notebooks-service-role"></a>

每个 EMR 笔记本都需要访问其他 AWS 资源和执行操作的权限。附加到此服务角色的 IAM 策略为笔记本提供了与其他 AWS 服务互操作的权限。使用创建笔记本时 AWS 管理控制台，需要指定*AWS 服务角色*。您可以使用默认角色 `EMR_Notebooks_DefaultRole`，也可以指定您创建的角色。如果之前尚未创建 Notebook，则可以选择创建默认角色。
+ 默认角色名为 `EMR_Notebooks_DefaultRole`。
+ 默认情况下，附加到 `EMR_Notebooks_DefaultRole` 的托管式策略是 `AmazonElasticMapReduceEditorsRole` 和 `S3FullAccessPolicy`。

您的服务角色应该使用下面的信任策略。

**重要**  
下面的信任策略包括 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件密钥，该密钥将限制您为 Amazon EMR 授予的、针对您账户中特定资源的权限。使用这些策略可以防止[混淆代理问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/EMRServiceRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:elasticmapreduce:*:123456789012:*"
        }
      },
      "Sid": "AllowSTSAssumerole"
    }
  ]
}
```

------

版本 1 的内容 `AmazonElasticMapReduceEditorsRole` 如下所示。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CreateSecurityGroup",
        "ec2:DescribeSecurityGroups",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:CreateNetworkInterface",
        "ec2:CreateNetworkInterfacePermission",
        "ec2:DeleteNetworkInterface",
        "ec2:DeleteNetworkInterfacePermission",
        "ec2:DescribeNetworkInterfaces",
        "ec2:ModifyNetworkInterfaceAttribute",
        "ec2:DescribeTags",
        "ec2:DescribeInstances",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcs",
        "elasticmapreduce:ListInstances",
        "elasticmapreduce:DescribeCluster",
        "elasticmapreduce:ListSteps"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowEC2Authorizesecuritygroupegress"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "aws:elasticmapreduce:editor-id",
            "aws:elasticmapreduce:job-flow-id"
          ]
        }
      },
      "Sid": "AllowEC2Createtags"
    }
  ]
}
```

------

下面是 `S3FullAccessPolicy` 的内容。`S3FullAccessPolicy` 允许 EMR Notebooks 的服务角色对 AWS 账户中的对象执行所有 Amazon S3 操作。当您为 EMR Notebooks 创建自定义服务角色时，必须向服务角色授予 Amazon S3 权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowS3"
    }
  ]
}
```

------

您可以将服务角色的读写权限范围缩小到要保存 Notebook 文件的 Amazon S3 位置。使用以下最小 Amazon S3 权限集。

```
"s3:PutObject",
"s3:GetObject",
"s3:GetEncryptionConfiguration",
"s3:ListBucket",
"s3:DeleteObject"
```

如果您的 Amazon S3 存储桶已加密，您必须为 AWS Key Management Service包含以下权限。

```
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:ReEncryptFrom",
"kms:ReEncryptTo",
"kms:DescribeKey"
```

当您将 Git 存储库链接到 Notebook 并需要为存储库创建密钥时，您必须在附加到 Amazon EMR Notebooks 的服务角色的 IAM policy 中添加 `secretsmanager:GetSecretValue` 权限。下面演示了一个示例策略：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

## EMR Notebooks 服务角色权限
<a name="emr-managed-notebooks-service-role-permissions"></a>

此表列出了 EMR Notebooks 使用服务角色执行的操作，以及每个操作所需的权限。


****  

| Action | Permissions | 
| --- | --- | 
| 在 Notebook 和 Amazon EMR 集群之间建立安全的网络通道，并执行必要的清理操作。 |  <pre>"ec2:CreateNetworkInterface", <br />"ec2:CreateNetworkInterfacePermission", <br />"ec2:DeleteNetworkInterface", <br />"ec2:DeleteNetworkInterfacePermission", <br />"ec2:DescribeNetworkInterfaces", <br />"ec2:ModifyNetworkInterfaceAttribute", <br />"ec2:AuthorizeSecurityGroupEgress", <br />"ec2:AuthorizeSecurityGroupIngress", <br />"ec2:CreateSecurityGroup",<br />"ec2:DescribeSecurityGroups", <br />"ec2:RevokeSecurityGroupEgress",<br />"ec2:DescribeTags",<br />"ec2:DescribeInstances",<br />"ec2:DescribeSubnets",<br />"ec2:DescribeVpcs",<br />"elasticmapreduce:ListInstances", <br />"elasticmapreduce:DescribeCluster", <br />"elasticmapreduce:ListSteps"</pre>  | 
| 使用存储在 AWS Secrets Manager 中的 Git 凭证将 Git 存储库链接到 Notebook。 |  <pre>"secretsmanager:GetSecretValue"</pre>  | 
| 将 AWS 标签应用于 EMR Notebooks 在设置安全网络通道时创建的网络接口和默认安全组。有关更多信息，请参阅[标记 AWS 资源](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)。 |  <pre>"ec2:CreateTags"</pre>  | 
| 访问 Notebook 文件和元数据或将它们上载到 Amazon S3。 |  <pre>"s3:PutObject",<br />"s3:GetObject",<br />"s3:GetEncryptionConfiguration",<br />"s3:ListBucket",<br />"s3:DeleteObject" </pre> 仅当您使用加密的 Amazon S3 存储桶时才需要以下权限。 <pre>"kms:Decrypt",<br />"kms:GenerateDataKey",<br />"kms:ReEncryptFrom",<br />"kms:ReEncryptTo",<br />"kms:DescribeKey"</pre>  | 

## EMR Notebooks 对托管策略 AWS 的更新
<a name="notebooks-slr-updates"></a>

查看自 2021 年 3 月 1 日起 EMR Notebooks AWS 托管政策更新的详细信息。


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
| AmazonElasticMapReduceEditorsRole - Added permissions | EMR Notebooks 已将 `ec2:describeVPCs` 和 `elastmicmapreduce:ListSteps` 权限添加至 `AmazonElasticMapReduceEditorsRole`。  | 2023 年 2 月 8 日  | 
| EMR Notebooks 开启了跟踪修订  |  EMR Notebooks 开始跟踪 AWS 其托管策略的更改。  | 2023 年 2 月 8 日  | 

# 对 Amazon EMR 使用服务相关角色
<a name="using-service-linked-roles"></a>

Amazon EMR 使用 AWS Identity and Access Management (IAM) [服务相关](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)角色。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon EMR 直接相关。服务相关角色由 Amazon EMR 预定义，包括该服务代表您调用 AWS 其他服务所需的所有权限。

**Topics**
+ [对 Amazon EMR 使用服务相关角色进行清理](using-service-linked-roles-cleanup.md)
+ [将服务相关角色与 Amazon EMR 结合使用以预写日志记录](using-service-linked-roles-wal.md)

有关支持服务相关角色的其他服务的信息，请参阅与 [IAM 配合使用的AWS 服务，](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)并在**服务相关角色**列中查找标有 “**是**” 的服务。选择**是**和链接，查看该服务的服务关联角色文档。

# 对 Amazon EMR 使用服务相关角色进行清理
<a name="using-service-linked-roles-cleanup"></a>

Amazon EMR 使用 AWS Identity and Access Management (IAM) [服务相关](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)角色。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon EMR 直接相关。服务相关角色由 Amazon EMR 预定义，包括该服务代表您调用 AWS 其他服务所需的所有权限。

服务相关角色与 Amazon EMR 服务角色和 Amazon EMR 的 Amazon EC2 实例配置文件配合使用。有关服务角色和实例配置文件的更多信息，请参阅[配置 IAM 服务角色以获得 Amazon EMR 对 AWS 服务和资源的权限](emr-iam-roles.md)。

服务相关角色让您可以轻松设置 Amazon EMR，因为您不必手动添加必要的权限。Amazon EMR 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon EMR 可以代入该角色。定义的权限包括信任策略和权限策略，而且权限策略不能附加到任何其他 IAM 实体。

只有在删除任何相关资源并终止账户中的所有 EMR 集群后，才能删除 Amazon EMR 的服务相关角色。这将保护您的 Amazon EMR 资源，以免无意中删除访问资源的权限。

## 使用服务相关角色进行清理
<a name="using-service-linked-roles-permissions-cleanup"></a>

Amazon EMR 使用基于服务的**AWSServiceRoleForEMRCleanup**角色授予亚马逊 EMR 代表您终止和删除 Amazon EC2 资源的权限，该权限可在 Amazon EMR 服务相关角色失去该权限时代表您终止和删除 Amazon EC2 资源。如果服务相关角色不存在，Amazon EMR 会在集群创建期间自动创建该角色。

 AWSServiceRoleForEMRCleanup 服务相关角色信任以下服务来代入该角色：
+ `elasticmapreduce.amazonaws.com`

 AWSServiceRoleForEMRCleanup 服务相关角色权限策略允许 Amazon EMR 对指定资源完成以下操作：
+ 操作：`ec2` 上的 `DescribeInstances`
+ 操作：`DescribeLaunchTemplates` 上的 `ec2`
+ 操作：`DeleteLaunchTemplate` 上的 `ec2`
+ 操作：`DescribeSpotInstanceRequests` 上的 `ec2`
+ 操作：`ModifyInstanceAttribute` 上的 `ec2`
+ 操作：`TerminateInstances` 上的 `ec2`
+ 操作：`CancelSpotInstanceRequests` 上的 `ec2`
+ 操作：`DeleteNetworkInterface` 上的 `ec2`
+ 操作：`DescribeInstanceAttribute` 上的 `ec2`
+ 操作：`DescribeVolumeStatus` 上的 `ec2`
+ 操作：`DescribeVolumes` 上的 `ec2`
+ 操作：`DetachVolume` 上的 `ec2`
+ 操作：`DeleteVolume` 上的 `ec2`
+ 操作：`DescribePlacementGroups` 上的 `ec2`
+ 操作：`ec2` 上的 `DeletePlacementGroup`

必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务相关角色。

## 为 Amazon EMR 创建服务相关角色
<a name="create-service-linked-role"></a>

您无需手动创建 AWSServiceRoleForEMRCleanup 角色。当您启动集群时，无论是首次启动还是 AWSServiceRoleForEMRCleanup 服务相关角色不存在，Amazon EMR 都会为您创建 AWSServiceRoleForEMRCleanup 服务相关角色。您必须拥有创建服务相关角色的权限。有关将此功能添加到 IAM 实体（如用户、组或角色）的权限策略的示例语句：

将以下语句添加到需要创建服务相关角色的 IAM 实体的权限策略。

```
{
             "Sid": "ElasticMapReduceServiceLinkedRole",
             "Effect": "Allow",
             "Action": "iam:CreateServiceLinkedRole",
             "Resource": "arn:aws:iam::*:role/aws-service-role/elasticmapreduce.amazonaws.com*/AWSServiceRoleForEMRCleanup*",
             "Condition": {
                 "StringEquals": {
                     "iam:AWSServiceName": [
                         "elasticmapreduce.amazonaws.com",
                         "elasticmapreduce.amazonaws.com.rproxy.govskope.us.cn"
                     ]
                 }
             }
 }
```

**重要**  
如果您在 2017 年 10 月 24 日之前使用过 Amazon EMR，当时不支持服务相关角色，那么 Amazon EMR 会在您的账户中创建 AWSServiceRoleForEMRCleanup 服务相关角色。有关更多信息，请参阅[我的 IAM 账户中出现新角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

## 为 Amazon EMR 编辑服务相关角色
<a name="edit-service-linked-role"></a>

Amazon EMR 不允许您编辑 AWSServiceRoleForEMRCleanup 服务相关角色。创建服务相关角色后，您无法更改服务相关角色的名称，因为各种实体可能会引用服务相关角色。但您可以使用 IAM 编辑服务相关角色的描述。

### 编辑服务相关角色描述（IAM 控制台）
<a name="edit-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台编辑服务相关角色的描述。

**编辑服务相关角色的描述（控制台）**

1. 在 IAM 控制台的导航窗格中，选择**角色**。

1. 以下代码示例显示如何将 IAM 策略附加到用户。

1. 在 **Role description (角色描述)** 的右侧，选择 **Edit (编辑)**。

1. 在框中键入新描述，然后选择 **Save changes (保存更改)**。

### 编辑服务相关角色描述（IAM CLI）
<a name="edit-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 命令 AWS Command Line Interface 来编辑服务相关角色的描述。

**更改服务相关角色的描述（CLI）**

1. (可选) 要查看角色的当前描述，请使用以下命令：

   ```
   $ aws iam get-role --role-name role-name
   ```

   通过 CLI 命令使用角色名称（并非 ARN）指向角色。例如，如果某个角色的 ARN 为 `arn:aws:iam::123456789012:role/myrole`，则将该角色称为 **myrole**。

1. 要更新服务相关角色的描述，请使用以下命令之一：

   ```
   $ aws iam update-role-description --role-name role-name --description description
   ```

### 编辑服务相关角色描述（IAM API）
<a name="edit-service-linked-role-iam-api"></a>

您可以使用 IAM API 编辑服务相关角色的描述。

**更改服务相关角色的描述（API）**

1. (可选) 要查看角色的当前描述，请使用以下命令：

   IAM API：[GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)

1. 要更新角色的描述，请使用以下命令：

   IAM API：[UpdateRoleDescription](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html)

## 删除适用于 Amazon EMR 的服务相关角色
<a name="delete-service-linked-role"></a>

如果您不再需要使用需要服务相关角色的功能或服务，建议您删除该服务相关角色。这样，您就不会有未被主动监控或维护的未使用实体。但是，您必须先清除您的服务相关角色，然后才能将其删除。

### 清除服务相关角色
<a name="service-linked-role-review-before-delete"></a>

在使用 IAM 删除服务相关角色之前，必须先确认该服务相关角色没有活动会话，并删除服务相关角色使用的所有资源。

**在 IAM 控制台中检查服务相关角色是否具有活动会话**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。选择 AWSServiceRoleForEMRCleanup 服务相关角色的名称（不是复选框）。

1. 在所选服务相关角色的**摘要**页面上，选择**访问顾问**。

1. 在 **Access Advisor (访问顾问)** 选项卡上，查看服务相关角色的近期活动。
**注意**  
如果您不确定 Amazon EMR 是否 AWSServiceRoleForEMRCleanup 在使用服务相关角色，可以尝试删除该服务相关角色。如果服务正在使用服务相关角色，则删除失败，您可以查看正在使用服务相关角色的区域。如果正在使用服务相关角色，则必须等待会话结束，然后才能删除服务相关角色。您无法撤销服务相关角色对会话的权限。

**移除使用的 Amazon EMR 资源 AWSService RoleFor EMRCleanup**
+ 终止您的账户中的所有集群。有关更多信息，请参阅[终止处于启动、运行或等待状态的 Amazon EMR 集群](UsingEMR_TerminateJobFlow.md)。

### 删除服务相关角色（IAM 控制台）
<a name="delete-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台删除服务相关角色。

**删除服务相关角色 (控制台)**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。选中旁边的复选框 AWSService RoleForEMRCleanup，而不是名称或行本身。

1. 对于页面顶部的**角色操作**，请选择**删除角色**。

1. 在确认对话框中，查看上次访问服务的数据，该数据显示了每个选定角色上次访问 AWS 服务的时间。这样可帮助您确认角色当前是否处于活动状态。要继续，请选择 **Yes, Delete（是的，删除）**。

1. 监视 IAM 控制台通知，以监控服务相关角色的删除进度。由于 IAM 服务相关角色删除是异步的，因此在提交服务相关角色进行删除后，删除任务可能会成功，也可能会失败。如果任务失败，您可以从通知中选择 **View details** 或 **View Resources** 以了解删除失败的原因。如果因角色正在使用服务中的资源而导致删除操作失败，则失败原因将包含一个资源列表。

### 删除服务相关角色（IAM CLI）
<a name="delete-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 命令 AWS Command Line Interface 删除服务相关角色。如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。

**删除服务相关角色（CLI）**

1. 要查看删除任务的状态，您必须从响应中捕获 `deletion-task-id`。键入以下命令以提交服务相关角色的删除请求：

   ```
   $ aws iam [delete-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-service-linked-role.html) --role-name AWSServiceRoleForEMRCleanup
   ```

1. 键入以下命令以检查删除任务的状态：

   ```
   $ aws iam [get-service-linked-role-deletion-status](https://docs.aws.amazon.com/cli/latest/reference/iam/get-service-linked-role-deletion-status.html) --deletion-task-id deletion-task-id
   ```

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

### 删除服务相关角色（IAM API）
<a name="delete-service-linked-role-iam-api"></a>

您可以使用 IAM API 删除服务相关角色。如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。

**删除服务相关角色（API）**

1. 要提交服务相关角色的删除请求，请致[DeleteServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceLinkedRole.html)电。在请求中，指定 AWSServiceRoleForEMRCleanup 角色名称。

   要查看删除任务的状态，您必须从响应中捕获 `DeletionTaskId`。

1. 要检查删除的状态，请调用 [GetServiceLinkedRoleDeletionStatus](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html)。在请求中，指定 `DeletionTaskId`。

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

## 支持的区域 AWSService RoleFor EMRCleanup
<a name="emr-slr-regions"></a>

Amazon EMR 支持在以下 AWSServiceRoleForEMRCleanup 区域使用服务相关角色。


****  

|  区域名称 | 区域标识 | Amazon EMR 支持 | 
| --- | --- | --- | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | 是 | 
| 美国东部（俄亥俄州） | us-east-2 | 是 | 
| 美国西部（北加利福尼亚） | us-west-1 | 是 | 
| 美国西部（俄勒冈州） | us-west-2 | 是 | 
| 亚太地区（孟买） | ap-south-1 | 是 | 
| 亚太地区（大阪） | ap-northeast-3 | 是 | 
| 亚太地区（首尔） | ap-northeast-2 | 是 | 
| 亚太地区（新加坡） | ap-southeast-1 | 是 | 
| 亚太地区（悉尼） | ap-southeast-2 | 是 | 
| 亚太地区（东京） | ap-northeast-1 | 是 | 
| 加拿大（中部） | ca-central-1 | 是 | 
| 欧洲地区（法兰克福） | eu-central-1 | 是 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 是 | 
| 欧洲地区（伦敦） | eu-west-2 | 是 | 
| 欧洲地区（巴黎） | eu-west-3 | 是 | 
| 南美洲（圣保罗） | sa-east-1 | 是 | 

# 将服务相关角色与 Amazon EMR 结合使用以预写日志记录
<a name="using-service-linked-roles-wal"></a>

Amazon EMR 使用 AWS Identity and Access Management (IAM) [服务相关](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)角色。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon EMR 直接相关。服务相关角色由 Amazon EMR 预定义，包括该服务代表您调用 AWS 其他服务所需的所有权限。

服务相关角色与 Amazon EMR 服务角色和 Amazon EMR 的 Amazon EC2 实例配置文件配合使用。有关服务角色和实例配置文件的更多信息，请参阅[配置 IAM 服务角色以获得 Amazon EMR 对 AWS 服务和资源的权限](emr-iam-roles.md)。

服务相关角色让您可以轻松设置 Amazon EMR，因为您不必手动添加必要的权限。Amazon EMR 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon EMR 可以代入该角色。定义的权限包括信任策略和权限策略，而且权限策略不能附加到任何其他 IAM 实体。

只有在删除相关资源并终止账户中的所有 EMR 集群后，才能删除 Amazon EMR 的服务相关角色。这将保护您的 Amazon EMR 资源，以免无意中删除访问资源的权限。

## 预写日志记录（WAL）的服务相关角色
<a name="using-service-linked-roles-permissions-wal"></a>

Amazon EMR 使用服务相关角色 **AWSServiceRoleForEMRWAL** 来检索集群状态。

 AWSServiceRoleForEMRWAL 服务相关角色信任以下服务来代入该角色：
+ `emrwal.amazonaws.com`

服务相关角色的 [`EMRDescribeClusterPolicyForEMRWAL`](EMRDescribeClusterPolicyForEMRWAL.md) 权限策略允许 Amazon EMR 对指定资源完成以下操作：
+ 操作：`*` 上的 `DescribeCluster`

您必须配置权限以允许 IAM 实体（本例中为 Amazon EMR WAL）创建、编辑或删除服务相关角色。根据需要将以下语句添加到实例配置文件的权限策略中：

## CreateServiceLinkedRole
<a name="iam-create-wal"></a>

**允许 IAM 实体创建 AWSService RoleFor EMRWAL 服务相关角色**

将以下语句添加到需要创建服务相关角色的 IAM 实体的权限策略：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:CreateServiceLinkedRole",
        "iam:PutRolePolicy"
    ],
    "Resource": "arn:aws:iam::*:role/aws-service-role/emrwal.amazonaws.com*/AWSServiceRoleForEMRWAL*",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName": [
                "emrwal.amazonaws.com",
                "elasticmapreduce.amazonaws.com.rproxy.govskope.us.cn"
            ]
        }
    }
}
```

## UpdateRoleDescription
<a name="iam-update-wal"></a>

**允许 IAM 实体编辑 AWSService RoleFor EMRWAL 服务相关角色的描述**

将以下语句添加到需要编辑服务相关角色的描述的 IAM 实体的权限策略：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:UpdateRoleDescription"
    ],
    "Resource": "arn:aws:iam::*:role/aws-service-role/emrwal.amazonaws.com*/AWSServiceRoleForEMRWAL*",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName": [
                "emrwal.amazonaws.com",
                "elasticmapreduce.amazonaws.com.rproxy.govskope.us.cn"
            ]
        }
    }
}
```

## DeleteServiceLinkedRole
<a name="iam-delete-wal"></a>

**允许 IAM 实体删除 AWSService RoleFor EMRWAL 服务相关角色**

将以下语句添加到需要删除服务相关角色的 IAM 实体的权限策略：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:DeleteServiceLinkedRole",
        "iam:GetServiceLinkedRoleDeletionStatus"
    ],
    "Resource": "arn:aws:iam::*:role/aws-service-role/elasticmapreduce.amazonaws.com*/AWSServiceRoleForEMRCleanup*",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName": [
                "emrwal.amazonaws.com",
                "elasticmapreduce.amazonaws.com.rproxy.govskope.us.cn"
            ]
        }
    }
}
```

## 为 Amazon EMR 创建服务相关角色
<a name="create-service-linked-role-wal"></a>

您无需手动创建 AWSService RoleFor EMRWAL 角色。当您使用 EMRWAL CLI 或从中创建 WAL 工作空间时，Amazon EMR HBase 会自动创建此服务相关角色 AWS CloudFormation，或者当您为 Amazon EMR WAL 配置工作空间且服务相关角色尚不存在时，将创建服务相关角色。您必须拥有创建服务相关角色的权限。有关将此功能添加到 IAM 实体（如用户、组或角色）权限策略的示例语句，请参阅上一节 [预写日志记录（WAL）的服务相关角色](#using-service-linked-roles-permissions-wal)。

## 为 Amazon EMR 编辑服务相关角色
<a name="edit-service-linked-role-wal"></a>

Amazon EMR 不允许您编辑 AWSService RoleFor EMRWAL 服务相关角色。创建服务相关角色后，您无法更改服务相关角色的名称，因为各种实体可能会引用服务相关角色。但您可以使用 IAM 编辑服务相关角色的描述。

### 编辑服务相关角色描述（IAM 控制台）
<a name="edit-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台编辑服务相关角色的描述。

**编辑服务相关角色的描述（控制台）**

1. 在 IAM 控制台的导航窗格中，选择**角色**。

1. 以下代码示例显示如何将 IAM 策略附加到用户。

1. 在 **Role description (角色描述)** 的右侧，选择 **Edit (编辑)**。

1. 在框中键入新描述，然后选择 **Save changes (保存更改)**。

### 编辑服务相关角色描述（IAM CLI）
<a name="edit-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 命令 AWS Command Line Interface 来编辑服务相关角色的描述。

**更改服务相关角色的描述（CLI）**

1. (可选) 要查看角色的当前描述，请使用以下命令：

   ```
   $ aws iam get-role --role-name role-name
   ```

   通过 CLI 命令使用角色名称（并非 ARN）指向角色。例如，如果某个角色的 ARN 为 `arn:aws:iam::123456789012:role/myrole`，则将该角色称为 **myrole**。

1. 要更新服务相关角色的描述，请使用以下命令之一：

   ```
   $ aws iam update-role-description --role-name role-name --description description
   ```

### 编辑服务相关角色描述（IAM API）
<a name="edit-service-linked-role-iam-api"></a>

您可以使用 IAM API 编辑服务相关角色的描述。

**更改服务相关角色的描述（API）**

1. (可选) 要查看角色的当前描述，请使用以下命令：

   IAM API：[GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)

1. 要更新角色的描述，请使用以下命令：

   IAM API：[UpdateRoleDescription](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRoleDescription.html)

## 删除适用于 Amazon EMR 的服务相关角色
<a name="delete-service-linked-role-wal"></a>

如果您不再需要使用需要服务相关角色的功能或服务，建议您删除该服务相关角色。这样，您就不会有未被主动监控或维护的未使用实体。但是，您必须先清除您的服务相关角色，然后才能将其删除。

**注意**  
如果您删除 AWSService RoleFor EMRWAL 角色，则预写日志操作不会受到影响，但是 Amazon EMR 不会在您的 EMR 集群终止后自动删除其创建的日志。因此，如果删除服务相关角色，则需要手动删除 Amazon EMR WAL 日志。

### 清除服务相关角色
<a name="service-linked-role-review-before-delete"></a>

必须先确认服务相关角色没有活动会话并删除该角色使用的任何资源，然后才能使用 IAM 删除服务相关角色。

**在 IAM 控制台中检查服务相关角色是否具有活动会话**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。选择 AWSService RoleFor EMRWAL 角色的名称（不是复选框）。

1. 在选定角色的 **Summary (摘要)** 页面上，选择 **Access Advisor (访问顾问)**。

1. 在 **Access Advisor (访问顾问)** 选项卡上，查看服务相关角色的近期活动。
**注意**  
如果您不确定 Amazon EMR 是否 AWSServiceRoleFor在使用 EMRWAL 角色，可以尝试删除该服务相关角色。如果服务正在使用该角色，则删除将失败，您可以查看正在使用服务相关角色的区域。如果正在使用服务相关角色，则必须等待会话结束，然后才能删除服务相关角色。您无法撤销服务相关角色对会话的权限。

**移除 EMRWAL 使用的亚马逊 EMR 资源 AWSService RoleFor**
+ 终止您的账户中的所有集群。有关更多信息，请参阅[终止处于启动、运行或等待状态的 Amazon EMR 集群](UsingEMR_TerminateJobFlow.md)。

### 删除服务相关角色（IAM 控制台）
<a name="delete-service-linked-role-iam-console"></a>

您可以使用 IAM 控制台删除服务相关角色。

**删除服务相关角色 (控制台)**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。选中 AWSService RoleFor EMRWAL 旁边的复选框，而不是名称或行本身。

1. 对于页面顶部的**角色操作**，请选择**删除角色**。

1. 在确认对话框中，查看上次访问服务的数据，该数据显示了每个选定角色上次访问 AWS 服务的时间。这样可帮助您确认角色当前是否处于活动状态。要继续，请选择 **Yes, Delete（是的，删除）**。

1. 监视 IAM 控制台通知，以监控服务相关角色的删除进度。由于 IAM 服务相关角色删除是异步的，因此，在您提交角色进行删除后，删除任务可能成功，也可能失败。如果任务失败，您可以从通知中选择 **View details** 或 **View Resources** 以了解删除失败的原因。如果因角色正在使用服务中的资源而导致删除操作失败，则失败原因将包含一个资源列表。

### 删除服务相关角色（IAM CLI）
<a name="delete-service-linked-role-iam-cli"></a>

您可以使用中的 IAM 命令 AWS Command Line Interface 删除服务相关角色。如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。

**删除服务相关角色（CLI）**

1. 要查看删除任务的状态，您必须从响应中捕获 `deletion-task-id`。键入以下命令以提交服务相关角色的删除请求：

   ```
   $ aws iam [delete-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-service-linked-role.html) --role-name AWSServiceRoleForEMRWAL
   ```

1. 键入以下命令以检查删除任务的状态：

   ```
   $ aws iam [get-service-linked-role-deletion-status](https://docs.aws.amazon.com/cli/latest/reference/iam/get-service-linked-role-deletion-status.html) --deletion-task-id deletion-task-id
   ```

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

### 删除服务相关角色（IAM API）
<a name="delete-service-linked-role-iam-api"></a>

您可以使用 IAM API 删除服务相关角色。如果服务相关角色正被使用或具有关联的资源，则无法删除它，因此您必须提交删除请求。如果不满足这些条件，该请求可能会被拒绝。

**删除服务相关角色（API）**

1. 要提交服务相关角色的删除请求，请致[DeleteServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceLinkedRole.html)电。在请求中，指定 AWSService RoleFor EMRWAL 角色名称。

   要查看删除任务的状态，您必须从响应中捕获 `DeletionTaskId`。

1. 要检查删除的状态，请调用 [GetServiceLinkedRoleDeletionStatus](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html)。在请求中，指定 `DeletionTaskId`。

   删除任务的状态可能是 `NOT_STARTED`、`IN_PROGRESS`、`SUCCEEDED` 或 `FAILED`。如果删除失败，则调用会返回失败的原因，以便您进行问题排查。

## AWSServiceRoleForEMRWAL 支持的区域
<a name="emr-slr-regions-wal"></a>

Amazon EMR 支持在以下区域使用 AWSService RoleFor EMRWAL 服务相关角色。


****  

|  区域名称 | 区域标识 | Amazon EMR 支持 | 
| --- | --- | --- | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | 是 | 
| 美国东部（俄亥俄州） | us-east-2 | 是 | 
| 美国西部（北加利福尼亚） | us-west-1 | 是 | 
| 美国西部（俄勒冈州） | us-west-2 | 是 | 
| 亚太地区（孟买） | ap-south-1 | 是 | 
| 亚太地区（新加坡） | ap-southeast-1 | 是 | 
| 亚太地区（悉尼） | ap-southeast-2 | 是 | 
| 亚太地区（东京） | ap-northeast-1 | 是 | 
| 欧洲地区（法兰克福） | eu-central-1 | 是 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 是 | 

# 使用 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
```

# 为处理 EMRFS 对 Amazon S3 的请求配置 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 实例代入不同的服务角色。EMRFS 的每个 IAM 角色都可以对 Amazon S3 中的数据具有不同访问权限。有关针对集群 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 角色。对于集群 EC2 实例，应用的是附加在该角色上的 IAM 权限，而不是附加在服务角色上的 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 角色必须具有信任策略，以允许 EMR 角色代入该角色。

以下示例信任策略附加到 EMRFS 的角色。该语句允许 EC2 的默认 Amazon EMR 角色代入该角色。例如，如果您有两个虚构 EMRFS 角色 `EMRFSRole_First` 和 `EMRFSRole_Second`，此策略语句添加到这两个角色的信任策略。

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

****  

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

------

此外，以下示例信任策略语句添加到 `EMR_EC2_DefaultRole` 以允许两个虚构 EMRFS 角色代入该角色。

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

****  

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

------

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

使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 选择 **Roles (角色)**，在 **Search (搜索)** 中输入角色的名称，然后选择其 **Role name (角色名称)**。

1. 选择**信任关系**，然后选择**编辑信任关系**。

1. 根据 **Policy Document**（策略文档）和上述指南添加信任语句，然后选择 **Update Trust Policy**（更新信任策略）。

### 指定角色作为密钥用户
<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)。

**使用控制台指定用于处理 EMRFS 对 Amazon S3 的请求的 IAM 角色**

1. 创建一个安全配置来指定角色映射：

   1. 在 Amazon EMR 控制台中，依次选择 **Security configurations (安全配置)** 和 **Create (创建)**。

   1. 键入安全配置的 **Name (名称)**。在创建集群时，使用此名称来指定安全配置。

   1. 选择 **Use IAM roles for EMRFS requests to Amazon S3**（使用 IAM 角色处理 EMRFS 对 Amazon S3 的请求）。

   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_cn/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`，该角色由 `InstanceProfile` 参数的 `--ec2-attributes` 变量指定。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

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

# 使用基于资源的策略让 Amazon EMR 访问 AWS Glue 数据目录
<a name="emr-iam-roles-glue"></a>

如果您在 Amazon EMR 中将 AWS Glue 与 Hive、Spark 或 Presto 结合使用， AWS Glue 支持基于资源的策略来控制对数据目录资源的访问。这些资源包括数据库、表、连接和用户定义的函数。有关更多信息，请参阅《AWS Glue 开发人员指南》**中的 [AWS Glue 资源策略](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html)。

使用基于资源的策略限制从 Amazon EMR 中访问 AWS Glue 时，您在权限策略中指定的委托人必须是与创建集群时指定的 EC2 实例配置文件关联的角色 ARN。例如，对于附加到目录的基于资源的策略，您可以使用以下示例所示的格式为集群 EC2 实例*EMR\$1EC2\$1DefaultRole*的默认服务角色指定角色 ARN，如下所示：`Principal`

```
arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole
```

*acct-id*可以与 Glue 账 AWS 号 ID 不同。这允许从不同账户中的 EMR 集群进行访问。您可以指定多个委托人，且每个委托人都可以来自不同的账户。

# 将 IAM 角色与直接调用 AWS 服务的应用程序配合使用
<a name="emr-iam-roles-calling"></a>

在集群的 EC2 实例上运行的应用程序可以在调用 AWS 服务时使用 EC2 实例配置文件获取临时安全证书。

Amazon EMR 版本 2.3.0 和更高版本上的 Hadoop 版本已经过更新，可以使用 IAM 角色。如果您的应用程序严格在 Hadoop 架构之上运行，并且不直接调用任何服务 AWS，则它应该无需修改即可与 IAM 角色配合使用。

如果您的应用程序 AWS 直接调用服务，则需要对其进行更新以利用 IAM 角色。这意味着，您的应用程序现在不是从集群中 EC2 实例上的 `/etc/hadoop/conf/core-site.xml` 获取账户凭证，而是使用 SDK 以 IAM 角色访问资源，或调用 EC2 实例元数据以获取临时凭证。

**使用软件开发工具包通过 IAM 角色访问 AWS 资源**
+ 以下主题介绍如何使用其中几个通过 IAM 角色 AWS SDKs 访问临时证书。每个主题的开头介绍了不使用 IAM 角色的应用程序的版本，然后向您分步讲解将该应用程序转换为可以使用 IAM 角色的过程。
  +  《适用于 Java 的 AWS SDK 开发人员指南》**中的[使用 SDK for Java 配置用于 Amazon EC2 实例的 IAM 角色](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java-dg-roles.html) 
  +  《适用于 .NET 的 AWS SDK Developer Guide》**中的[使用 SDK for .NET 配置用于 Amazon EC2 实例的 IAM 角色](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-roles.html) 
  +  《适用于 PHP 的 AWS SDK 开发人员指南》**中的[使用 SDK for PHP 配置用于 Amazon EC2 实例的 IAM 角色](https://docs.aws.amazon.com/sdk-for-php/latest/developer-guide/php-dg-roles.html) 
  +  《适用于 Ruby 的 AWS SDK 开发人员指南》**中的[使用 SDK for Ruby 配置用于 Amazon EC2 实例的 IAM 角色](https://docs.aws.amazon.com/sdk-for-ruby/latest/developer-guide/ruby-dg-roles.html) 

**从 EC2 实例元数据中获取临时凭证**
+ 从使用指定 IAM 角色运行的 EC2 实例调用以下 URL，该实例会返回关联的临时安全证书（AccessKeyId SecretAccessKey、 SessionToken、和到期）。以下示例使用 Amazon EMR 的默认实例配置文件 `EMR_EC2_DefaultRole`。

  ```
  GET http://169.254.169.254/latest/meta-data/iam/security-credentials/EMR_EC2_DefaultRole
  ```

有关编写使用 IAM 角色的应用程序的更多信息，请参阅[授予在 Amazon EC2 实例上运行的应用程序访问 AWS 资源的](https://docs.aws.amazon.com/IAM/latest/UserGuide/role-usecase-ec2app.html)权限。

有关临时安全凭证的更多信息，请参阅《使用临时安全凭证》**指南中的[使用临时安全凭证](https://docs.aws.amazon.com/STS/latest/UsingSTS/using-temp-creds.html)。

# 允许用户和组创建和修改角色
<a name="emr-iam-roles-create-permissions"></a>

必须允许为集群创建、修改和指定角色的 IAM 委托人（用户和组，包括默认角色）执行以下操作。有关每个操作的详细信息，请参阅《IAM API 参考》[https://docs.aws.amazon.com/IAM/latest/APIReference/API_Operations.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_Operations.html)中的*操作*。
+ `iam:CreateRole`
+ `iam:PutRolePolicy`
+ `iam:CreateInstanceProfile`
+ `iam:AddRoleToInstanceProfile`
+ `iam:ListRoles`
+ `iam:GetPolicy`
+ `iam:GetInstanceProfile`
+ `iam:GetPolicyVersion`
+ `iam:AttachRolePolicy`
+ `iam:PassRole`

`iam:PassRole` 权限允许创建集群。其余权限允许创建默认角色。

有关向用户分配权限的信息，请参阅《IAM 用户指南》**中的[更改用户的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html)。