本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon EMR 自定义 IAM 角色
根据安全要求,您可能需要自定义 IAM 服务角色和权限,从而对权限加以限制。要自定义权限,我们建议您创建新的角色和策略。从托管式策略中的默认角色 (例如 AmazonElasticMapReduceforEC2Role
和 AmazonElasticMapReduceRole
) 的权限开始着手。将相应内容复制并粘贴到新的策略语句中,根据具体情况修改权限,并将修改后的权限策略附加到您创建的角色。您必须拥有合适的 IAM 权限才能使用角色和策略。有关更多信息,请参阅 允许用户和组创建和修改角色。
如果您为创建自定义 EMR 角色 EC2,请遵循基本工作流程,该流程会自动创建同名的实例配置文件。Amazon EC2 允许您创建具有不同名称的实例配置文件和角色,但是 Amazon EMR 不支持此配置,并且在创建集群时会导致 “实例配置文件无效” 错误。
重要
当服务要求发生变化时,内联策略不会自动更新。如果您创建并附加内联策略,请注意可能会发生突然导致权限错误的服务更新。有关更多信息,请参阅《IAM 用户指南》中的托管式策略与内联策略和在创建集群时指定自定义 IAM 角色。
有关处理 IAM 角色的更多信息,请参阅《IAM 用户指南》中的以下主题:
在创建集群时指定自定义 IAM 角色
在创建集群时,您可以为 Amazon EMR 指定服务角色并为 Amazon EC2 实例配置文件指定角色。正在创建集群的用户需要权限才能检索角色并将其分配给 Amazon EMR 和 EC2 实例。否则,账号无权调用就会发生 EC2错误。有关更多信息,请参阅 允许用户和组创建和修改角色。
使用控制台指定自定义角色
创建集群时,您可以为 Amazon EMR 指定自定义服务角色,为 EC2 实例配置文件指定自定义角色,并使用高级选项指定自定义 Auto Scaling 角色。使用快速选项时,会指定 EC2 实例配置文件的默认服务角色和默认角色。有关更多信息,请参阅 Amazon EMR 使用的 IAM 服务角色。
使用 AWS CLI 来指定自定义角色
您可以使用create-cluster
命令中的选项为 Amazon EMR 明确指定服务角色和集群 EC2 实例的服务角色。 AWS CLI使用 --service-role
选项指定服务角色。使用--ec2-attributes
选项的InstanceProfile
参数为 EC2 实例配置文件指定角色。
将使用单独的选项(--auto-scaling-role
)指定 Auto Scaling 角色。有关更多信息,请参阅 将自动扩展与 Amazon EMR 中实例组的自定义策略结合使用。
要指定自定义 IAM 角色,请使用 AWS CLI
-
以下命令指定启动集群时的自定义服务角色和 EC2 实例配置文件的自定义角色。
MyCustomServiceRoleForEMR
MyCustomServiceRoleForClusterEC2Instances
本示例使用默认 Amazon EMR 角色。注意
为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。
aws emr create-cluster --name "Test cluster" --release-label
emr-7.6.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
选项为文件中定义的 EC2 实例配置config
文件指定服务角色和角色 AWS CLI。
以下示例演示了 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