使用 Amazon EMR 自定义 IAM 角色 - Amazon EMR

使用 Amazon EMR 自定义 IAM 角色

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

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

重要

当服务要求发生变化时,内联策略不会自动更新。如果您创建并附加内联策略,请注意可能会发生突然导致权限错误的服务更新。有关更多信息,请参阅《IAM 用户指南》中的托管式策略与内联策略在创建集群时指定自定义 IAM 角色

有关处理 IAM 角色的更多信息,请参阅《IAM 用户指南》中的以下主题:

在创建集群时指定自定义 IAM 角色

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

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

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

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

使用控制台创建集群时,必须为 Amazon EMR 指定自定义服务角色,并为 EC2 实例配置文件指定自定义角色。有关更多信息,请参阅 Amazon EMR 使用的 IAM 服务角色

  1. 登录 AWS Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择 Create cluster(创建集群)。

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

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

  5. 要启动集群,选择 Create cluster(创建集群)。

使用 AWS CLI 指定自定义角色

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

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

使用 AWS CLI 指定自定义 IAM 角色
  • 以下命令将在启动集群时指定自定义服务角色 MyCustomServiceRoleForEMR 和适用于 EC2 实例配置文件的自定义角色 MyCustomServiceRoleForClusterEC2Instances。本示例使用默认 Amazon EMR 角色。

    注意

    为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

    aws emr create-cluster --name "Test cluster" --release-label emr-7.3.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 实例配置文件的角色。

以下示例显示了 AWS CLI 的 config 文件的内容,该文件指定了 Amazon EMR 的自定义角色。使用此配置文件,指定 --use-default-roles 选项后,将使用 MyCustomServiceRoleForEMRMyCustomServiceRoleForClusterEC2Instances 创建集群。默认情况下,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