本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
集群EC2实例的服务角色(EC2实例配置文件)
集群EC2实例的服务角色(也称为 Amazon 的EC2实例配置文件EMR)是一种特殊类型的服务角色,在EC2实例启动时分配给 Amazon EMR 集群中的每个实例。在 Hadoop 生态系统之上运行的应用程序进程代入该角色来获得与其它 AWS 服务交互的权限。
有关EC2实例服务角色的更多信息,请参阅IAM用户指南中的使用IAM角色向在 Amazon EC2 实例上运行的应用程序授予权限。
重要
集群EC2实例的默认服务角色及其关联的 AWS 默认托管策略即将被弃用,没有提供替代的 AWS 托管策略。AmazonElasticMapReduceforEC2Role
您需要创建并指定实例配置文件以替换弃用的角色和默认策略。
默认角色和托管式策略
-
默认角色名为
EMR_EC2_DefaultRole
。 -
EMR_EC2_DefaultRole
默认托管式策略AmazonElasticMapReduceforEC2Role
的支持即将结束。与其对EC2实例配置文件使用默认托管策略,不如将基于资源的策略应用于 S3 存储桶和 Amazon EMR 需要的其他资源,或者使用您自己的客户托管策略,并将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" ] } ] }
您的服务角色应该使用下面的信任策略。
{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
为具有最低权限权限的集群EC2实例创建服务角色
作为最佳实践,我们强烈建议您为集群EC2实例创建服务角色和具有应用程序所需其他 AWS 服务最低权限的权限策略。
默认托管式策略 AmazonElasticMapReduceforEC2Role
提供可轻松启动初始集群的权限。但是,AmazonElasticMapReduceforEC2Role
即将被弃用,Amazon EMR 不会为已弃用的角色提供替代的 AWS 托管默认策略。要启动初始集群,您需要提供基于客户管理的资源或基于 ID 的策略。
以下政策声明提供了 Amazon 不同功能所需的权限示例EMR。我们建议您使用这些权限创建权限策略,将访问权限限制为您的集群所需的功能和资源。所有示例政策声明都使用 us-west-2
地区和虚构的 AWS 账户 ID 123456789012
。 根据您的集群替换它们。
有关创建和指定自定义角色的更多信息,请参阅自定义IAM角色。
注意
如果您为创建自定义EMR角色EC2,请遵循基本工作流程,该流程会自动创建同名的实例配置文件。Amazon EC2 允许您创建具有不同名称的实例配置文件和角色,但是 Amazon EMR 不支持此配置,并且在您创建集群时会导致 “实例配置文件无效” 错误。
使用 Amazon S3 读取和写入数据 EMRFS
当在 Amazon EMR 集群上运行的应用程序使用该s3://
格式引用数据时,Amazon 会EMR使用EC2实例配置文件来发出请求。集群通常以这种方式向 Amazon S3 读取和写入数据,默认情况下,Amazon 对集群EC2实例EMR使用附加到服务角色的权限。有关更多信息,请参阅 为向 Amazon S3 发出的EMRFS请求配置IAM角色。mydata
由于的IAM角色EMRFS将回退到集群EC2实例的服务角色所附的权限,因此作为最佳实践,我们建议您将IAM角色用于集群实EC2例EMRFS,并限制附加到该服务角色的EMRFS和 Amazon S3 权限。
以下示例语句演示了向 Amazon S3 发出请求EMRFS所需的权限。
-
my-data-bucket-in-s3-for-emrfs-reads-and-写入
指定 Amazon S3 中集群在其中读取和写入数据的存储桶以及使用的所有子文件夹/*
。 仅添加您的应用程序所需的存储桶和文件夹。 -
仅当启用EMRFS一致视图时,才需要允许
dynamodb
操作的策略声明。E mrFSMetadata
指定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:ListBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:DeleteQueue", "sqs:SendMessage", "sqs:CreateQueue" ], "Resource": "arn:aws:sqs:us-west-2
:123456789012
:EMRFS-Inconsistency-*" } ] }
将日志文件存档到 Amazon S3
以下策略声明允许 Amazon EMR 集群将日志文件存档到指定的 Amazon S3 位置。在下面的示例中,当集群创建时,s3://MyLoggingBucket/M yEMRCluster 日志
是使用控制台中的日志文件夹 S3 位置 AWS CLI、中的--log-uri
选项或RunJobFlow
命令中的LogUri
参数指定的。有关更多信息,请参阅 将日志文件归档到 Amazon S3。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
MyLoggingBucket/MyEMRClusterLogs
/*" } ] }
使用 AWS Glue 数据目录
以下策略声明允许您使用 Glue 数据目录作为 AWS 应用程序的元数据仓时所需的操作。有关更多信息,请参阅《亚马逊发布指南》中的使用 AWS Glue 数据目录作为 Spark 的元数据库SQL、使用 AWS Glue 数据目录作为 Hive 的元数据仓以及将 Presto 与 Gl AWS ue 数据目录一起使用。EMR
{ "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": "*", } ] }