使用运行时IAM角色从 Studio Classic 连接到亚马逊EMR集群 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用运行时IAM角色从 Studio Classic 连接到亚马逊EMR集群

当您从 Amazon SageMaker Studio Classic 笔记本连接到 Amazon EMR 集群时,您可以直观地浏览IAM角色列表(称为运行时角色),然后即时选择一个角色。随后,从 Studio Classic 笔记本电脑创建的所有 Apache Spark、Apache Hive 或 Presto 作业都只能访问附加到运行时角色的策略所允许的数据和资源。此外,当从使用管理的数据湖访问数据时 AWS Lake Formation,您可以使用附加到运行时角色的策略强制执行表级和列级访问权限。

有了这项功能,您和您的队友就可以连接到同一个集群,每个人都可以使用一个运行时系统角色,该角色的权限与您访问数据的个人级别相匹配。您的会话在共享集群上也是相互隔离的。借助这种控制对同一共享集群上数据的精细访问的功能,您可以简化 Ama EMR zon 集群的配置,从而降低运营开销并节省成本。

要试用这项新功能,请参阅使用 Amazon SageMaker Studio Classic 和 AWS Lake Formation A EMR mazon 应用精细的数据访问控制。这篇博文可帮助您设置演示环境,在该环境中,您可以尝试使用预配置的运行时角色连接到 Amazon EMR 集群。

先决条件

在开始之前,请确保您满足以下先决条件:

  • 使用亚马逊 6.9 或更高EMR版本。

  • 在 Studio Classic Jupyter 服务器应用程序配置中使用 JupyterLab 版本 3。此版本支持使用运行时角色与 Studio Classic 连接至亚马逊EMR集群。

  • 允许在集群的安全配置中使用运行时系统角色。有关更多信息,请参阅 Amazon EMR 步骤的运行时角色

  • 使用用户指南中列出的任何内核创建笔记本。

  • 请务必查看中的说明设置 Studio Classic 以使用运行时IAM角色以使用 Studio Classic 配置运行时角色。

跨账户连接方案

当您的数据位于 Studio Classic 帐户之外时,运行时角色身份验证支持各种跨账户连接方案。下图显示了在 Studio Classic 账户和数据账户之间分配亚马逊EMR集群、数据甚至亚马逊EMR执行角色的三种不同方式:

运行时IAM角色身份验证支持的跨账户方案。

在选项 1 中,您的亚马逊EMR集群和亚马逊EMR执行角色与您的 Studio Classic 账户位于单独的数据账户中。您可以单独定义亚马逊EMR访问角色权限策略,该策略授予您的 Studio Classic 执行角色担任亚马逊EMR访问角色的权限。然后,Amazon EMR 访问角色代表您的 Studio Classic 执行角色调用亚马EMRAPIGetClusterSessionCredentials逊,授予您访问集群的权限。

在选项 2 中,您的亚马逊EMR集群和亚马逊EMR执行角色位于您的 Studio Classic 账户中。您的 Studio Classic 执行角色有权使用 Amazon EMR API GetClusterSessionCredentials 访问您的集群。要访问 Amazon S3 存储桶,请向亚马逊EMR执行角色授予跨账户 Amazon S3 存储桶访问权限,您可以在 Amazon S3 存储桶策略中授予这些权限。

在选项 3 中,您的亚马逊EMR集群位于您的 Studio Classic 账户中,亚马逊EMR执行角色位于数据账户中。您的 Studio Classic 执行角色有权使用 Amazon EMR API GetClusterSessionCredentials 访问您的集群。将 Amazon EMR 执行角色添加到执行角色配置中JSON。然后,您可以在选择集群时在用户界面上选择角色。有关如何设置执行角色配置JSON文件的详细信息,请参阅将执行角色预加载到 Studio Classic

设置 Studio Classic 以使用运行时IAM角色

要为您的 Amazon EMR 集群建立运行时角色身份验证,请配置所需的IAM策略、网络和可用性增强。如果您的亚马逊EMR集群、亚马逊EMR执行角色或两者都位于您的 Amazon SageMaker Studio Classic 账户之外,则您的设置取决于您是否处理任何跨账户安排。以下讨论将指导您完成要安装的策略、如何配置网络以允许跨账户之间的流量,以及为自动EMR连接 Amazon 而设置的本地配置文件。

当您的 Amazon EMR 集群和 Studio Classic 位于同一个账户中时,配置运行时角色身份验证

如果您的 Amazon EMR 集群位于您的 Studio Classic 账户中,请添加基本策略以连接到您的亚马逊EMR集群,并设置调用 Amazon 的权限 EMR APIGetClusterSessionCredentials,这样您就可以访问集群。完成以下步骤,为您的 Studio Classic 执行策略添加必要的权限:

  1. 添加连接到 Amazon EMR 集群所需的IAM策略。有关详细信息,请参阅列出 Studio 或 Studio 经典版中的亚马逊EMR集群

  2. 当您通过政策中指定的一个或多个允许的亚马逊EMR执行角色EMRAPIGetClusterSessionCredentials时,授予致电亚马逊的权限。

  3. (可选)授予传递遵循任何用户定义命名约定的IAM角色的权限。

  4. (可选)授予访问标有特定用户定义字符串的 Amazon EMR 集群的权限。

  5. 如果您不想手动调用 Amazon con EMR nection 命令,请在本地亚马逊上安装 SageMaker配置文件,EFS然后选择在选择亚马逊EMR集群时要使用的角色。有关如何预加载IAM角色的详细信息,请参阅将执行角色预加载到 Studio Classic

以下示例策略允许调用属于建模和训练组的 Amazon EMR 执行角色GetClusterSessionCredentials。此外,保单持有人可以访问标有字符串modelingtraining的 Amazon EMR 集群。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "elasticmapreduce:GetClusterSessionCredentials", "Resource": "*", "Condition": { "StringLike": { "elasticmapreduce:ExecutionRoleArn": [ "arn:aws:iam::123456780910:role/emr-execution-role-ml-modeling*", "arn:aws:iam::123456780910:role/emr-execution-role-ml-training*" ], "elasticmapreduce:ResourceTag/group": [ "*modeling*", "*training*" ] } } } ] }

当您的集群和 Studio Classic 账户不同时,配置运行时角色身份验证

如果您的亚马逊EMR集群不在您的 Studio Classic 账户中,请允许您的 Studio Classic 执行角色代入跨账户亚马逊EMR访问角色,这样您就可以连接到该集群。完成以下步骤以设置跨账户配置:

  1. 创建您的 Studio Classic 执行角色权限策略,以便执行角色可以担任 Amazon EMR 访问角色。下面是一个示例策略:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAssumeCrossAccountEMRAccessRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::emr_account_id:role/emr-access-role-name" } ] }
  2. 创建信任策略以指定信任哪个 Studio Classic 账户IDs担任亚马逊EMR访问角色。下面是一个示例策略:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::studio_account_id:role/studio_execution_role" }, "Action": "sts:AssumeRole" } }
  3. 创建 Amazon EMR 访问角色权限策略,该策略向亚马逊EMR执行角色授予在集群上执行预期任务所需的权限。将 Amazon EMR 访问角色配置为APIGetClusterSessionCredentials使用访问角色权限策略中指定的亚马逊EMR执行角色调用。下面是一个示例策略:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI", "Effect": "Allow", "Action": "elasticmapreduce:GetClusterSessionCredentials", "Resource": "", "Condition": { "StringLike": { "elasticmapreduce:ExecutionRoleArn": [ "arn:aws:iam::emr_account_id:role/emr-execution-role-name" ] } } } ] }
  4. 设置跨账户网络,使流量可以在账户之间来回移动。有关指导说明,请参阅博客文章 从 SageMaker Studio Classic 创建和管理 Amazon EMR 集群以运行交互式 Spark 和 ML 工作负载 — 第 2 部分” 中的设置网络。博文中的步骤有助于您完成以下任务:

    1. VPC-对等您的 Studio Classic EMR 账户和您的亚马逊账户以建立连接。

    2. 在两个账户的私有子网路由表中手动添加路由。这允许创建 Amazon EMR 集群并将其从 Studio Classic 账户连接到远程账户的私有子网。

    3. 设置连接到 Studio Classic 域的安全组以允许出站流量,将亚马逊EMR主节点的安全组设置为允许来自 Studio Classic 实例安全组的入站TCP流量。

  5. 如果您不想手动调用 Amazon con EMR nection 命令,请在您的本地 Amazon 中安装 SageMaker配置文件,EFS这样您就可以在选择亚马逊EMR集群时选择要使用的角色。有关如何预加载IAM角色的详细信息,请参阅将执行角色预加载到 Studio Classic

配置 Lake Formation 访问权限

当您访问由管理的数据湖中的数据时 AWS Lake Formation,您可以使用附加到运行时角色的策略强制执行表级和列级访问权限。要配置 Lake Formation 访问权限,请参阅将亚马逊EMR与集成 AWS Lake Formation

将执行角色预加载到 Studio Classic

如果您不想手动调用 Amazon con EMR nection 命令,则可以在本地 Amazon 中安装 SageMaker配置文件,EFS这样您就可以在选择亚马逊EMR集群时选择要使用的执行角色。

要为 Amazon EMR 执行角色编写配置文件,请将 a 使用生命周期配置自定义 Studio 经典版 (LCC) 关联到 Jupyter 服务器应用程序。或者,您也可以编写或更新配置文件,并使用以下命令重启 Jupyter 服务器:restart-jupyter-server

以下代码段是 LCC bash 脚本示例,如果您的 Studio Classic 应用程序和集群位于同一个账户中,则可以应用:

#!/bin/bash set -eux FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE" FILE_NAME="emr-configurations-DO_NOT_DELETE.json" FILE="$FILE_DIRECTORY/$FILE_NAME" mkdir -p $FILE_DIRECTORY cat << 'EOF' > "$FILE" { "emr-execution-role-arns": { "123456789012": [ "arn:aws:iam::123456789012:role/emr-execution-role-1", "arn:aws:iam::123456789012:role/emr-execution-role-2" ] } } EOF

如果您的 Studio Classic 应用程序和集群位于不同的账户中,请指定可以使用该集群的 Amazon EMR 访问角色。在以下示例策略中,123456789012 适用于ARN亚马逊EMR集群账户,212121212121 和434343434343适用于允许的亚马逊访问角色。 ARNs EMR

#!/bin/bash set -eux FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE" FILE_NAME="emr-configurations-DO_NOT_DELETE.json" FILE="$FILE_DIRECTORY/$FILE_NAME" mkdir -p $FILE_DIRECTORY cat << 'EOF' > "$FILE" { "emr-execution-role-arns": { "123456789012": [ "arn:aws:iam::212121212121:role/emr-execution-role-1", "arn:aws:iam::434343434343:role/emr-execution-role-2" ] } } EOF # add your cross-account EMR access role FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE" FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json" FILE="$FILE_DIRECTORY/$FILE_NAME" mkdir -p $FILE_DIRECTORY cat << 'EOF' > "$FILE" { "123456789012": "arn:aws:iam::123456789012:role/cross-account-emr-access-role" } EOF