使用 Amazon EMR 自定义 IAM 角色
根据安全要求,您可能需要自定义 IAM 服务角色和权限,从而对权限加以限制。要自定义权限,我们建议您创建新的角色和策略。从托管式策略中的默认角色 (例如 AmazonElasticMapReduceforEC2Role
和 AmazonElasticMapReduceRole
) 的权限开始着手。将相应内容复制并粘贴到新的策略语句中,根据具体情况修改权限,并将修改后的权限策略附加到您创建的角色。您必须拥有合适的 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 服务角色。
使用 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-roleMyCustomServiceRoleForEMR
\ --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
选项后,将使用 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