集群 EC2 实例(EC2 实例配置文件)的服务角色 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

集群 EC2 实例(EC2 实例配置文件)的服务角色

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

有关 EC2 实例的服务角色的更多信息,请参阅《IAM 用户指南》中的使用 IAM 角色为 Amazon EC2 实例上运行的应用程序授予权限

重要

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

默认角色和托管策略

  • 默认角色名为 EMR_EC2_DefaultRole

  • EMR_EC2_DefaultRole 默认托管策略 AmazonElasticMapReduceforEC2Role 即将弃用,不会替换为其他默认托管策略。不要为 EC2 实例配置文件使用默认托管策略,而是将基于资源的策略应用于 Amazon EMR 需要的 S3 存储桶和其他资源,或者使用您自己的客户托管策略和 IAM 角色作为实例配置文件。有关更多信息,请参阅创建具有最小权限的集群 EC2 实例服务角色

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

{ "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" ] } ] }

创建具有最小权限的集群 EC2 实例服务角色

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

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

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

有关创建和指定自定义角色的更多信息,请参阅自定义 IAM 角色

注意

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

使用 EMRFS 读写 Amazon S3 中的数据

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

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

下面的示例语句演示了 EMRFS 向 Amazon S3 发出请求所需的权限。

  • my-data-bucket-in-s3-for-emrfs-reads-and-writes 指定 Amazon S3 中的存储桶,在该存储桶中,集群使用 /* 读写数据以及所有子文件夹。请仅添加您的应用程序需要的存储桶和文件夹。

  • 仅当启用 EMRFS 一致性视图时,才需要允许 dynamodb 操作的策略语句。EmrFSMetadata 指定 EMRFS 一致视图的默认文件夹。

{ "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/*" ] }, { "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:us-west-2:123456789012:table/EmrFSMetadata" }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "dynamodb:ListTables", "s3:HeadBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:DeleteMessageBatch", "sqs:ReceiveMessage", "sqs:DeleteQueue", "sqs:SendMessage", "sqs:CreateQueue" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:EMRFS-Inconsistency-*" } }

将日志文件存档到 Amazon S3

以下策略语句允许 Amazon EMR 集群将日志文件存档到指定的 Amazon S3 位置。在下面的示例中,创建集群时,使用控制台中的 Log folder S3 location (日志文件夹 S3 位置)、使用 Amazon CLI 中的 --log-uri 选项或使用 RunJobFlow 命令中的 LogUri 参数指定 s3://MyLoggingBucket/MyEMRClusterLogs。有关更多信息,请参阅将日志文件归档到 Amazon S3

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

使用调试工具

以下策略语句允许在启用 Amazon EMR 调试工具时所需的操作。调试需要将日志文件存档到 Amazon S3,以及上面示例中所示的相关权限。有关更多信息,请参阅启用调试工具

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:AWS-ElasticMapReduce-*" } ] }

使用 Amazon Glue 数据目录

以下策略语句允许在将 Amazon Glue 数据目录用作应用程序的元存储时所需的操作。有关更多信息,请参阅《Amazon EMR 版本指南》中的使用 Amazon Glue 数据目录作为 Spark SQL 的元存储使用 Amazon Glue 数据目录作为 Hive 的元存储使用 Presto 与 Amazon Glue 数据目录

{ "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": "*", } ] }