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