Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

为 IAM 角色配置对 AWS 服务的 Amazon EMR 权限

Amazon EMR 和应用程序 (如 Hadoop 和 Spark) 在运行时需要访问其他 AWS 资源和执行操作的权限。Amazon EMR 中的每个集群必须有一个服务角色 和一个适用于 Amazon EC2 实例配置文件 的角色。附加到这些角色的 IAM 策略为集群提供了代表用户与其他 AWS 服务进行互操作的权限。

所有区域中的所有集群都需要一个服务角色和一个适用于 EC2 实例配置文件的角色。如果您的集群使用了自动扩展,则需要一个额外的角色 (Auto Scaling 角色)。有关更多信息,请参阅 IAM User Guide 中的 IAM 角色使用实例配置文件

如果您是首次在账户中创建集群,那么适用于 Amazon EMR 的角色尚不存在。您可以指定要创建的适用于 Amazon EMR 的默认角色,或者也可以创建自定义角色并在创建集群时指定这些角色。想要了解更多信息,请参阅 使用默认 IAM 角色和托管策略自定义 IAM 角色

适用于 Amazon EMR 的 IAM 角色的摘要

Amazon EMR 与其他 AWS 服务交互时使用以下角色。

EMR 角色

EMR 角色定义在预置资源和执行在集群中运行的特定 EC2 实例的上下文中不执行的其他服务级任务时允许 Amazon EMR 执行的操作。默认角色是 EMR_DefaultRole

EC2 的 EMR 角色

EC2 的 EMR 角色由 EC2 实例在集群中使用。换句话说,这是与集群实例的 EC2 实例配置文件关联的角色。与此角色关联的权限适用于在集群实例上运行的进程。只要应用程序进程在 Hadoop 生态系统之上运行,应用程序就会代入此角色,与其他 AWS 服务进行交互。默认角色是 EMR_EC2_DefaultRole

注意

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

集群通常会使用 EMRFS 在 Amazon S3 中读取和写入数据。默认情况下,EMRFS 使用此角色。当您拥有多个集群用户和多个数据存储时,您可能希望用户拥有对 Amazon S3 中的 EMRFS 数据的不同权限。为此,您可以为用于处理 EMRFS 对 Amazon S3 的请求的 IAM 角色设置安全配置。EMRFS 可以根据发出请求的用户或组,或者根据 EMRFS 数据在 Amazon S3 中的位置,通过不同的权限策略代入不同角色。对于与指定条件匹配的请求,EMRFS 使用相应的角色,而不是 EC2 的 EMR 角色。如果未找到匹配项,EMRFS 将回退使用 EC2 的 EMR 角色。有关更多信息,请参阅 为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色

如果集群上的应用程序代码直接调用 AWS 服务,则可能需要使用开发工具包来指定角色。有关更多信息,请参阅 将 IAM 角色用于直接调用 AWS 服务的应用程序

自动扩展角色

EMR 的自动扩展角色的作用与服务角色相似,但前者允许用于动态扩展环境的其他操作。默认角色是 EMR_AutoScaling_DefaultRole

服务相关角色

EMR 自动创建服务相关角色。如果 Amazon EMR 的服务失去了清除 Amazon EC2 资源的能力,Amazon EMR 可以使用此角色来完成此任务。有关更多信息,请参阅 为 Amazon EMR 使用服务相关角色。必须允许 EMR 角色创建适用于 Spot 实例的服务相关角色。

AmazonElasticMapReduceFullAccess 是一个向用户授予对 Amazon EMR 的完全权限的默认托管策略,该策略包含一个允许所有资源的 iam:PassRole 权限的语句。此语句允许用户将任何角色传递给其他 AWS 服务,以便 Amazon EMR 可以代表该用户与这些服务进行交互。

要实现更严格的策略,请将内联策略附加到仅对特定于 Amazon EMR 的角色允许 iam:PassRole 的适当用户或组。以下示例演示了一个仅对默认 Amazon EMR 角色 EMR_DefaultRoleEMR_EC2_DefaultRoleEMR_AutoScalingDefaultRole 允许 iam:PassRole 权限的语句。如果您使用自定义角色,请用自定义角色名称替换默认角色名称。

{ "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/EMR_DefaultRole", "arn:aws:iam::*:role/EMR_EC2_DefaultRole", "arn:aws:iam::*:role/EMR_AutoScaling_DefaultRole" ] }