View a markdown version of this page

配置 Amazon EMR 集群列表 - 亚马逊 SageMaker AI

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

配置 Amazon EMR 集群列表

管理员可以为 SageMaker Studio 执行角色配置权限,以授予用户查看他们有权访问的 Amazon EMR 集群列表的能力,从而允许他们连接到这些集群。您要访问的集群可以部署在与 Studio 相同的 AWS 账户中(选择单一账户),也可以部署在不同的账户中(选择跨账户)。下页介绍如何授予从 Studio 或 Studio Classic 查看 Amazon EMR 集群的权限。

重要

您只能发现并连接到从私有空间启动的 Studio Classic 应用程序的 Amazon EMR 集群。 JupyterLab 确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。

要让数据科学家从 Studio 或 Studio Classic 发现并连接到 Amazon EMR 集群,请按照以下步骤操作。

如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在同一个 AWS 账户中,请向访问您的集群的 SageMaker AI 执行角色授予以下权限。

  1. 步骤 1:检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

    有关 SageMaker AI 中的空间和执行角色的信息,请参阅了解域空间权限和执行角色。

    有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息,请参阅。获取执行角色

  2. 步骤 2:将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

    1. 导航到 IAM 控制台。

    2. 选择角色,然后在搜索字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分,位于最后一个正斜线 (/) 之后。

    3. 点击链接进入您的角色。

    4. 选择添加权限,然后选择创建内联策略。

    5. 在 JSON 选项卡中,添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息,请参阅 参考策略 中的列出 Amazon EMR 策略。用实际值替换 region 和 accountID,然后将语句列表复制到角色的内联策略中。

    6. 选择下一步,然后提供一个策略名称。

    7. 选择创建策略。

注意

基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 当 Amazon EMR 集群和 Studio 位于同一账户时,配置运行时系统角色身份验证。

在开始之前,请检索私有空间使用的 SageMaker AI 执行角色的 ARN。

有关 SageMaker AI 中的空间和执行角色的信息,请参阅了解域空间权限和执行角色。

有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息,请参阅。获取执行角色

如果 Amazon EMR 集群和 Studio 或 Studio Classic 分别部署在不同的 AWS 账户中,则需要在这两个账户上配置权限。

注意

基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 当集群和 Studio 位于不同的账户中时,配置运行时系统角色身份验证。

在 Amazon EMR 集群账户上

请按照以下步骤在部署 Amazon EMR 的账户(也称为信任账户)上创建必要的角色和策略:

  1. 步骤 1:读取 Amazon EMR 集群服务角色的 ARN。

    要了解如何查找集群服务角色的 ARN,请参阅为 Amazon EMR 对 AWS 服务和资源的权限配置 IAM 服务角色。

  2. 步骤 2:使用以下配置创建名为 AssumableRole 的自定义 IAM 角色:

    • 权限:向 AssumableRole 授予必要的权限,以允许访问 Amazon EMR 资源。在涉及跨账户访问的情况下,该角色也称为访问角色。

    • 信任关系:为 AssumableRole 配置信任策略,以允许从需要访问的 Studio 账户承担执行角色(跨账户图中的 SageMakerExecutionRole)。

    通过担任该角色,Studio 或 Studio Classic 可以临时访问 Amazon EMR 中所需的权限。

    有关如何在您的 Amazon EMR AWS 账户AssumableRole中创建新账户的详细说明,请按照以下步骤操作:

    1. 导航到 IAM 控制台。

    2. 在左侧导航窗格中,选择策略,然后选择创建策略。

    3. 在 JSON 选项卡中,添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息,请参阅 参考策略 中的列出 Amazon EMR 策略。用实际值替换 region 和 accountID,然后将语句列表复制到角色的内联策略中。

    4. 选择下一步,然后提供一个策略名称。

    5. 选择创建策略。

    6. 在左侧导航窗格中,选择角色,然后选择创建角色。

    7. 在创建角色页面上,选择自定义信任策略作为受信任实体。

    8. 在自定义信任策略部分粘贴以下 JSON 文档,然后选择下一步。

      For users of Studio and JupyterLab

      studio-account替换为 Studio 帐户 ID 和AmazonSageMaker-ExecutionRole您的 JupyterLab空间使用的执行角色。

      JSON
      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole" }, "Action": "sts:AssumeRole" } ] }
      For users of Studio Classic

      将 studio-account 替换为 Studio Classic 帐户 ID。

      JSON
      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole" } ] }
    9. 在添加权限页面上,添加刚刚创建的权限,然后选择下一步。

    10. 在审查页面上,输入角色名称(如 AssumableRole)和可选描述。

    11. 检查角色详细信息,然后选择创建角色。

    有关在 AWS 账户上创建角色的更多信息,请参阅创建 IAM 角色(控制台)。

Studio 账户

在部署 Studio 的账户(也称为可信账户)上,更新访问集群的 SageMaker AI 执行角色,使其具有访问信任账户中资源所需的权限。

  1. 步骤 1:检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。

    有关 SageMaker AI 中的空间和执行角色的信息,请参阅了解域空间权限和执行角色。

    有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息,请参阅。获取执行角色

  2. 步骤 2:将以下权限附加到访问您的 Amazon EMR 集群的 Amazon EMR 集群的 A SageMaker I 执行角色。

    1. 导航到 IAM 控制台。

    2. 选择角色,然后在搜索字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分,位于最后一个正斜线 (/) 之后。

    3. 点击链接进入您的角色。

    4. 选择添加权限,然后选择创建内联策略。

    5. 在 JSON 选项卡中,添加授予角色更新域、用户配置文件和空间权限的内联策略。有关策略文档的详细信息,请参阅 参考策略 中的域、用户配置文件和空间更新操作策略。用实际值替换 region 和 accountID,然后将语句列表复制到角色的内联策略中。

    6. 选择下一步,然后提供一个策略名称。

    7. 选择创建策略。

    8. 重复创建内联策略步骤,添加另一个策略,授予执行角色使用 AssumableRole 的权限,然后执行角色访问策略允许的操作。将 emr-account 替换为 Amazon EMR 帐户 ID,将 AssumableRole 替换为 Amazon EMR 帐户中创建的可承担角色的名称。

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowRoleAssumptionForCrossAccountDiscovery", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::111122223333:role/AssumableRole" ] } ] }
    9. (可选)要允许列出与 Studio 部署在同一账户中的 Amazon EMR 集群,请按照 参考策略 中的列出 Amazon EMR 策略中的定义,在 Studio 执行角色中添加额外的内联策略。

  3. 步骤 3:将您的假设角色(访问角色)与您的域名或用户个人资料相关联。 JupyterLabStudio 中的用户可以使用 SageMaker AI 控制台或提供的脚本。

    选择与您的使用场景相对应的选项卡。

    Associate your assumable roles in JupyterLab using the SageMaker AI console

    要使用 SageMaker AI 控制台将您的假设角色与您的用户个人资料或域关联起来,请执行以下操作:

    1. 导航到 SageMaker AI 控制台,网址为https://console.aws.amazon.com/sagemaker/。

    2. 在左侧导航窗格中,选择域,然后使用已更新其权限的 SageMaker AI 执行角色选择域。

      • 要将您的假设角色(访问角色)添加到您的域中:在域名详细信息页面的应用程序配置选项卡中,导航到该JupyterLab部分。

      • 要将您的假设角色(访问角色)添加到您的用户配置文件中:在域详细信息页面上,选择用户配置文件选项卡,使用您更新其权限的 SageMaker AI 执行角色选择用户配置文件。在 “应用程序配置” 选项卡中,导航至该JupyterLab部分。

    3. 选择编辑,然后添加可承担角色(访问角色)的 ARN。

    4. 选择提交。

    Associate your assumable roles in JupyterLab using a Python script

    在使用已更新权限的 SageMaker AI 执行角色从空间启动的 JupyterLab 应用程序中,在终端中运行以下命令。用适当的值替换 domainID、user-profile-name、emr-accountID 和 AssumableRole(RBAC 运行时角色的 EMRServiceRole)。此代码段更新了 SageMaker AI 域中特定用户配置文件(使用client.update_userprofile)或网域设置(使用client.update_domain)的用户配置文件设置。具体而言,它允许 JupyterLab应用程序担任特定的 IAM 角色 (AssumableRole),以便在亚马逊 EMR 账户中运行 Amazon EMR 集群。

    import botocore.session import json sess = botocore.session.get_session() client = sess.create_client('sagemaker') client.update_userprofile( DomainId="domainID", UserProfileName="user-profile-name", DefaultUserSettings={ 'JupyterLabAppSettings': { 'EmrSettings': { 'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"], 'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", "arn:aws:iam::emr-accountID:role/AnotherServiceRole"] } } }) resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name") resp['CreationTime'] = str(resp['CreationTime']) resp['LastModifiedTime'] = str(resp['LastModifiedTime']) print(json.dumps(resp, indent=2))
    For users of Studio Classic

    为您的 Studio Classic 执行角色提供 AssumableRole 的 ARN。Jupyter 服务器会在启动时加载 ARN。Studio 使用的执行角色假定为跨账户角色,以发现并连接到信任账户中的 Amazon EMR 集群。

    您可以使用生命周期配置 (LCC) 脚本指定这些信息。您可以将 LCC 附加到域或特定用户配置文件。您使用的 LCC 脚本必须是 JupyterServer 配置。有关如何创建 LCC 脚本的更多信息,请参阅在 Studio Classic 中使用生命周期配置。

    以下为示例 LCC 脚本。要修改脚本,请将 AssumableRole 和 emr-account 替换为各自的值。跨账户的数量限制为五个。

    # This script creates the file that informs Studio Classic that the role "arn:aws:iam::emr-account:role/AssumableRole" in remote account "emr-account" must be assumed to list and describe Amazon EMR clusters in the remote account. #!/bin/bash set -eux 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 > "$FILE" <<- "EOF" { emr-cross-account1: "arn:aws:iam::emr-cross-account1:role/AssumableRole", emr-cross-account2: "arn:aws:iam::emr-cross-account2:role/AssumableRole" } EOF

    在 LCC 运行并且文件写入之后,服务器读取文件 /home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE/emr-discovery-iam-role-arns-DO_NOT_DELETE.json 并存储跨账户 ARN。

请参阅 从 Studio 或 Studio Classic 列出 Amazon EMR 集群,了解如何从 Studio 或 Studio Classic 笔记本发现和连接 Amazon EMR 集群。