Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Lake Formation 的 IAM 角色概述

Amazon EMR 与 AWS Lake Formation 之间的集成依赖于三个关键角色:Lake Formation 的 IAM 角色、AWS 服务的 IAM 角色以及 Amazon EMR 的 EC2 实例配置文件。此部分概述了这些角色以及需要为每个角色提供的策略。

有关如何为 Lake Formation 配置角色的更多信息,请参阅配置 IdP 和 Lake Formation 之间的信任关系

Lake Formation 的 IAM 角色

Lake Formation 的 IAM 角色定义通过您的 IdP 登录的用户将具有哪些权限,以及什么身份提供程序可以代入此角色。角色的 Maximum CLI/API session duration 定义访问 EMR 笔记本和 Apache Zeppelin 的会话超时。

  • 此角色必须使用以下权限策略创建。

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "lakeformation:GetMetadataAccess", "glue:GetUnfiltered*", "glue:GetTable", "glue:GetTables", "glue:GetDatabase", "glue:GetDatabases", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions" ], "Resource": "*" } }

    注意

    请勿向此角色授予访问由 AWS Glue 管理的任意 Amazon S3 存储桶的权限。联合身份用户应使用 Spark SQL 通过 Lake Formation 访问数据,不应直接通过 Amazon S3 访问数据。

  • 该角色还必须包含以下信任策略,这使您的 IAM 身份提供程序可以代入该角色。将 account-id 替换为您的 AWS 账户 ID。使用您 IAM 身份提供程序的名称替换 IAM_identity_provider_name

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:saml-provider/IAM_identity_provider_name" }, "Action": "sts:AssumeRoleWithSAML" }, { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com", "lakeformation.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

AWS 服务的 IAM 角色

AWS 服务的 IAM 角色定义 Amazon EMR 集群在访问非 AWS Lake Formation 服务时具有的权限。例如,如果在您的集群上运行的作业需要访问 Amazon DynamoDB 或任何其他 AWS 服务,则 AWS 服务的 IAM 角色必须包含访问这些服务所需的策略。在您为此角色配置策略时,请确保角色没有对以下 API 操作的访问权限:

  • 任意 AWS Glue API 操作。

  • 任意 AWS Lake Formation API 操作。

  • 任何 AWS Security Token Service (STS) AssumeRole 操作。

  • 由 AWS Glue 管理的对存储桶的任何 Amazon S3 访问权限。集群应使用 Spark SQL 通过 Lake Formation 访问数据,不应直接通过 Amazon S3 访问数据。

EC2 实例配置文件

EC2 实例配置文件是一种特殊类型的服务角色,定义 EMR 集群与 Lake Formation 及其他 AWS 服务交互时的权限。您可以在启动集群时使用 EMR_EC2_DefaultRole,或者选择使用自定义 EC2 实例配置文件。在这两种情况下,以下策略必须添加到角色,包括对 Lake Formation 的 IAM 角色以及对 AWS 服务的 IAM 角色的引用。将 account-id 替换为您的 AWS 账户 ID。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/IAM_Role_For_Lake_Formation" }, { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::account-id:role/IAM_Role_for_AWS_Services" }, { "Effect": "Allow", "Action": "lakeformation:GetTemporaryUserCredentialsWithSAML", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:GetRole", "Resource": "arn:aws:iam::*:role/*" } ] }

有关更多信息,请参阅集群 EC2 实例的服务角色(EC2 实例配置文件)自定义 IAM 角色