本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为向 Amazon S3 发出的EMRFS请求配置IAM角色
注意
在 Amazon EMR 6.15.0 中引入 Amazon S3 访问权限后,本页描述的EMRFS角色映射功能得到了改进。要获得针对您在 Amazon S3 中的数据的可扩展访问控制解决方案,我们建议您将 S3 访问权限授予与 Amazon 一起使用EMR。
当集群上运行的应用程序使用该s3://
格式引用数据时,Amazon 会EMR使用该格式EMRFS来发出请求。要与 Amazon S3 交EMRFS互,请采用附加到您的 Amazon EC2 实例配置文件的权限策略。无论运行应用程序的用户或群组如何,也不管数据在 Amazon S3 中的位置如何,都使用相同的 Amazon EC2 实例配置文件。mydata
如果您的集群包含多个用户,他们需要通过不同级别访问Amazon S3中的数据EMRFS,则可以为设置具有IAM角色的安全配置EMRFS。 EMRFS可以根据提出请求的用户或群组或 Amazon S3 中的数据位置为集群EC2实例扮演不同的服务角色。的每个IAM角色在 Amazon S3 中EMRFS可以拥有不同的数据访问权限。有关集群EC2实例的服务角色的更多信息,请参阅集群EC2实例的服务角色(EC2实例配置文件)。
Amazon 5.10.0 及更高EMR版本支持使用自定义IAM角色。EMRFS如果您使用的是较早版本或者要求的角色超出了要EMRFS提供的IAM角色范围,则可以改为创建自定义凭证提供程序。有关更多信息,请参阅授权访问 Amazon S3 中的EMRFS数据。
使用安全配置为其指定IAM角色时EMRFS,需要设置角色映射。每个角色映射都指定与标识符对应的 IAM 角色。这些标识符决定了通过以下方式访问 Amazon S3 的依据EMRFS。标识符可以是用户、组或指示数据位置的 Amazon S3 前缀。向 Amazon S3 发出请求时,如果请求与访问基础相匹配EMRFS,则EMRFS让集群EC2实例为该请求承担相应的IAM角色。对于集群EC2实例,应用的是附加到该角色的IAM权限,而不是附加到服务角色的权限。IAM
角色映射中的用户和组是在集群上定义的 Hadoop 用户和组。用户和群组将在使用它的应用程序上下文EMRFS中传递给他们(例如,YARN用户模拟)。Amazon S3 前缀可以是任意深度的存储桶说明符(例如,s3://amzn-s3-demo-bucket
或 s3://amzn-s3-demo-bucket/myproject/mydata
)。您可以在单个角色映射中指定多个标识符,但它们必须是同一类型。
重要
IAM的角色在应用程序的用户之间EMRFS提供应用程序级别的隔离。它不提供主机上各用户之间的主机级别的隔离。任何有权访问集群的用户都可以绕过隔离以代入任何角色。
当集群应用程序通过向 Amazon S3 发出请求时EMRFS,EMRFS会按照角色映射在安全配置中出现的自上而下的顺序评估角色映射。如果通过发出的请求与任何标识符都EMRFS不匹配EMRFS,则会回退为集群EC2实例使用服务角色。因此,我们建议附加到此角色的策略限制对 Amazon S3 的权限。有关更多信息,请参阅集群EC2实例的服务角色(EC2实例配置文件)。
配置 角色
在为IAM角色设置安全配置之前EMRFS,请规划和创建要附加到角色的角色和权限策略。有关更多信息,请参阅EC2实例的角色是如何工作的? 在《IAM用户指南》中。在创建权限策略时,我们建议您从附加到默认 Amazon EMR 角色的托管策略开始EC2,然后根据您的要求编辑此策略。默认角色名为 EMR_EC2_DefaultRole
,要编辑的默认托管式策略为 AmazonElasticMapReduceforEC2Role
。有关更多信息,请参阅集群EC2实例的服务角色(EC2实例配置文件)。
更新信任策略以代入角色权限
EMRFS使用的每个角色都必须具有允许集群的 Amazon EMR 角色担任该角色EC2的信任策略。同样,集群的 Amazon EMR 角色EC2必须具有允许EMRFS角色代入该角色的信任策略。
以下示例信任策略附加到的角色上EMRFS。该声明允许的默认 Amazon EMR 角色代EC2入该角色。例如,如果您有两个虚构EMRFS角色EMRFSRole_First
和EMRFSRole_Second
,则此策略声明将添加到每个角色的信任策略中。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::
AWSAcctID
:role/EMR_EC2_DefaultRole" }, "Action":"sts:AssumeRole" } ] }
此外,还向中添加了以下示例信任策略声明,EMR_EC2_DefaultRole
以允许两个虚构EMRFS角色担任该声明。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS": ["arn:aws:iam::
AWSAcctID
:role/EMRFSRole_First
", "arn:aws:iam::AWSAcctID
:role/EMRFSRole_Second
"] }, "Action":"sts:AssumeRole" } ] }
更新 IAM 角色的信任策略
从 IAM 打开 https://console.aws.amazon.com/iam/
-
选择 Roles (角色),在 Search (搜索) 中输入角色的名称,然后选择其 Role name (角色名称)。
-
选择信任关系,然后选择编辑信任关系。
-
根据 Policy Document(策略文档)和上述指南添加信任语句,然后选择 Update Trust Policy(更新信任策略)。
指定角色作为密钥用户
如果某个角色允许访问 Amazon S3 中使用 AWS KMS key进行加密的位置,请务必将该角色指定为密钥用户。这为角色提供了使用KMS密钥的权限。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的在 AWS KMS中使用密钥策略。
使用IAM角色设置安全配置 EMRFS
重要
如果您为EMRFS其指定的IAM角色均不适用,则回EMRFS退到 Amazon 的EMR角色EC2。在创建集群时,可以考虑根据应用程序的需要自定义角色以限制对 Amazon S3 的权限,然后指定该自定义角色,而不是指定 EMR_EC2_DefaultRole
。有关更多信息,请参阅使用 Amazon 自定义IAM角色 EMR 和在创建集群时指定自定义IAM角色。
使用控制台为向 Amazon S3 发出的EMRFS请求指定IAM角色
-
创建一个安全配置来指定角色映射:
-
在 Amazon EMR 控制台中,选择安全配置,创建。
-
键入安全配置的 Name (名称)。在创建集群时,使用此名称来指定安全配置。
-
选择 “使用IAM角色处理向 Amazon S3 发出的EMRFS请求”。
-
选择要应用的 IAM role (IAM 角色),在 Basis for access (访问基础) 下的列表中选择标识符类型(Users (用户)、Groups (组) 或 S3 prefixes (S3 前缀)),然后输入相应标识符。如果使用多个标识符,请将它们以逗号分隔,不要包含空格。有关每个标识符类型的更多信息,请参阅以下 JSON configuration reference。
-
选择Add role (添加角色)设置其它角色映射,如上一步所述。
-
根据需要设置其它安全配置选项,然后选择 Create (创建)。有关更多信息,请参阅使用 Amazon EMR 控制台或使用 AWS CLI。
-
-
创建集群时,指定在上面创建的安全配置。有关更多信息,请参阅 为 Amazon EMR 集群指定安全配置。
要为向 Amazon S3 发出的EMRFS请求指定IAM角色,请使用 AWS CLI
-
使用
aws emr create-security-configuration
命令,指定安全配置的名称和JSON格式的安全配置详细信息。下面所示的示例命令创建名为
EMRFS_Roles_Security_Configuration
的安全配置。它基于文件中的JSON结构MyEmrfsSecConfig.json
,该结构保存在执行命令的同一目录中。aws emr create-security-configuration --name
EMRFS_Roles_Security_Configuration
--security-configurationfile://MyEmrFsSecConfig.json
.按照以下准则处理
MyEmrFsSecConfig.json
文件的结构。您可以与其它安全配置选项的结构一起指定此结构。有关更多信息,请参阅 使用 Amazon EMR 控制台或使用 AWS CLI。以下是在安全配置中为其指定自定义IAM角色的EMRFS示例JSON片段。它演示了三种不同标识符类型的角色映射,后跟参数引用。
{ "AuthorizationConfiguration": { "EmrFsConfiguration": { "RoleMappings": [{ "Role": "
arn:aws:iam::123456789101:role/allow_EMRFS_access_for_user1
", "IdentifierType": "User", "Identifiers": [ "user1
" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_to_demo_s3_buckets
", "IdentifierType": "Prefix", "Identifiers": [ "s3://amzn-s3-demo-bucket1/","s3://amzn-s3-demo-bucket2/
" ] },{ "Role": "arn:aws:iam::123456789101:role/allow_EMRFS_access_for_AdminGroup
", "IdentifierType": "Group", "Identifiers": [ "AdminGroup
" ] }] } } }参数 描述 "AuthorizationConfiguration":
必需。
"EmrFsConfiguration":
必需。包含角色映射。
"RoleMappings":
必需。包含一个或多个角色映射定义。按照角色映射的先后顺序对角色映射进行评估。如果在 Amazon S3 中EMRFS调用数据时角色映射评估为真,则不会再评估角色映射,EMRFS而是使用指定的IAM角色进行请求。角色映射由以下必需参数组成:
"Role":
以格式指定IAM角色的ARN标识符
arn:aws:iam::
。如果对 Amazon S3 的请求与任何account-id
:role/role-name
Identifiers
指定的EMRFS请求相匹配,则亚马逊将EMR扮演这个IAM角色。"IdentifierType":
可以是以下值之一:
"User"
指定标识符是一个或多个 Hadoop 用户,可以是 Linux 账户用户或 Kerberos 主体。当EMRFS请求由指定的一个或多个用户发起时,将IAM扮演该角色。"Prefix"
指定该标识符是 Amazon S3 位置。调用具有指定前缀的一个或多个位置时将扮演该IAM角色。例如,前缀s3://amzn-s3-demo-bucket/
匹配s3://amzn-s3-demo-bucket/mydir
和s3://amzn-s3-demo-bucket/yetanotherdir
。"Group"
指定标识符是一个或多个 Hadoop 组。如果请求来自一个或多个指定组中的用户,则代入该IAM角色。
"Identifiers":
指定一个或多个相应标识符类型的标识符。用逗号分隔多个标识符,不含空格。
-
使用
aws emr create-cluster
命令创建集群,并指定上一步中创建的安全配置。以下示例创建一个安装了默认核心 Hadoop 应用程序的集群。集群使用上面创建的安全配置
EMRFS_Roles_Security_Configuration
,还使用使用使用参数的EC2--ec2-attributes
参数指定的自定义 Amazon EMR 角色。EC2_Role_EMR_Restrict_S3
InstanceProfile
注意
为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。
aws emr create-cluster --name
MyEmrFsS3RolesCluster
\ --release-labelemr-7.5.0
--ec2-attributes InstanceProfile=EC2_Role_EMR_Restrict_S3
,KeyName=MyKey
\ --instance-typem5.xlarge
--instance-count3
\ --security-configurationEMRFS_Roles_Security_Configuration