Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
集群 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 的内容。
- JSON
-
-
{
"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"
]
}
]
}
您的服务角色应该使用下面的信任策略。
- JSON
-
-
{
"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://mydata
格式引用数据时,Amazon EMR 会使用 EC2 实例配置文件来发出请求。集群通常以这种方式向 Amazon S3 读取和写入数据,默认情况下,Amazon EMR 对集群 EC2 实例使用附加到服务角色的权限。有关更多信息,请参阅 为处理 EMRFS 对 Amazon S3 的请求配置 IAM 角色。
由于 EMRFS 的 IAM 角色将回退到集群 EC2 实例的服务角色所附的权限,因此作为最佳实践,我们建议您使用 EMRFS 的 IAM 角色,并限制集群实例的服务角色所附的 EMRFS 和 Amazon S3 权限。 EC2
下面的示例语句演示了 EMRFS 向 Amazon S3 发出请求所需的权限。
- JSON
-
-
{
"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。
- JSON
-
-
{
"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 数据目录”。
- JSON
-
-
{
"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": "*"
}
]
}