使用运行时 IAM 角色从 Studio Classic 连接亚马逊 EMR 集群 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

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

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

要试用这项新功能,请参阅使用精细的数据访问控制和 Amazon Studio Classi Amazon Lake Formation c 中的 Amaz SageMaker on EMR。本博文将有助于您建立一个演示环境,在该环境中,您可以尝试使用预配置的运行时系统角色来连接 Amazon EMR 集群。

先决条件

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

跨账户连接方案

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

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

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

在选项 2 中,您的亚马逊 EMR 集群和亚马逊 EMR 执行角色位于您的 Studio Classic 账户中。您的 Studio Classic 执行角色有权使用 Amazon EMR API GetClusterSessionCredentials 访问您的集群。要访问 Amazon S3 存储桶,请向 Amazon 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 Studio Classic 账户之外,您的设置将取决于您是否处理任何跨账户安排。 SageMaker 下面的讨论将引导您了解要安装的策略、如何配置网络以允许跨账户之间的流量,以及要设置的本地配置文件,以便自动连接 Amazon EMR。

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

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

  1. 添加连接 Amazon EMR 集群所需的 IAM 策略。有关详细信息,请参阅探索 Studio Classic 中的 SageMaker亚马逊 EMR 集群

  2. 当您传递策略中指定的一个或多个允许的 Amazon EMR 执行角色时,授予调用 Amazon EMR API GetClusterSessionCredentials 的权限。

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

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

  5. 如果您不想手动调用 Amazon EMR 连接命令,请在您的本地 Amazon EFS 中安装 SageMaker配置文件,然后选择在选择 Amazon 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 账户不同时,配置运行时角色身份验证

如果您的 Amazon EMR 集群不在您的 Studio Classic 账户中,请允许您的 Studio Classic 执行角色代入跨账户 Amazon 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 账户 ID 来担任 Amazon 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 访问角色权限策略,该策略向 Amazon EMR 执行角色授予在集群上执行预期任务所需的权限。配置 Amazon EMR 访问角色,以便使用访问角色权限策略中指定的 Amazon EMR 执行角色调用 API GetClusterSessionCredentials。下面是一个示例策略:

    { "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 账户和 Amazon EMR 账户以建立连接。

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

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

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

配置 Lake Formation 访问权限

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

将执行角色预加载到 Studio Classic

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

要为 Amazon EMR 执行角色编写配置文件,请将 在 Amazon SageMaker 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 是 Amazon EMR 集群账户的 ARN,212121212121434343434343 是允许的 Amazon EMR 访问角色的 ARN。

#!/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