

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

# 配置 Amazon EMR 集群列表
<a name="studio-notebooks-configure-discoverability-emr-cluster"></a>

管理员可以为 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 集群，请按照以下步骤操作。

## 单一账户
<a name="studio-set-up-emr-permissions-singleaccount-list-clusters"></a>

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

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

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

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

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

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

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

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当 Amazon EMR 集群和 Studio 位于同一账户时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-same)。

## 跨账户
<a name="studio-set-up-emr-permissions-crossaccount-list-clusters"></a>

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

有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

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

**注意**  
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 [当集群和 Studio 位于不同的账户中时，配置运行时系统角色身份验证](studio-notebooks-emr-cluster-rbac.md#studio-notebooks-emr-cluster-iam-diff)。

**在 Amazon EMR 集群账户上**

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

1. **步骤 1**：读取 [Amazon EMR 集群服务角色的 ARN](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)。

   要了解如何查找集群服务角色的 ARN，请参阅[为 Amazon EMR 对 AWS 服务和资源的权限配置 IAM 服务角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html#emr-iam-role-landing)。

1. **步骤 2**：使用以下配置创建名为 `AssumableRole` 的自定义 IAM 角色：
   + 权限：向 `AssumableRole` 授予必要的权限，以允许访问 Amazon EMR 资源。在涉及跨账户访问的情况下，该角色也称为*访问角色*。
   + 信任关系：为 `AssumableRole` 配置信任策略，以允许从需要访问的 Studio 账户承担执行角色（跨账户图中的 `SageMakerExecutionRole`）。

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

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

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

   1. 在左侧导航窗格中，选择**策略**，然后选择**创建策略**。

   1. 在 **JSON** 选项卡中，添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 在左侧导航窗格中，选择**角色**，然后选择**创建角色**。

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

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

------
#### [ For users of Studio and JupyterLab ]

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

------
#### [ 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 ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::{{111122223333}}:root"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

------

   1. 在**添加权限**页面上，添加刚刚创建的权限，然后选择**下一步**。

   1. 在**审查**页面上，输入角色名称（如 `AssumableRole`）和可选描述。

   1. 检查角色详细信息，然后选择**创建角色**。

   有关在 AWS 账户上创建角色的更多信息，请参阅[创建 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

**Studio 账户**

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

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

   有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)

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

   1. 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。

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

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

   1. 选择**添加权限**，然后选择**创建内联策略**。

   1. 在 **JSON** 选项卡中，添加授予角色更新域、用户配置文件和空间权限的内联策略。有关策略文档的详细信息，请参阅 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 `region` 和 `accountID`，然后将语句列表复制到角色的内联策略中。

   1. 选择**下一步**，然后提供一个**策略名称**。

   1. 选择**创建策略**。

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 `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}}"
                  ]
              }
          ]
      }
      ```

------

   1. （可选）要允许列出与 Studio 部署在同一账户中的 Amazon EMR 集群，请按照 [参考策略](studio-set-up-emr-permissions-reference.md) 中的*列出 Amazon EMR 策略*中的定义，在 Studio 执行角色中添加额外的内联策略。

1. **步骤 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/](https://console.aws.amazon.com/sagemaker/)。

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

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

   1. 选择**编辑**，然后添加可承担角色（访问角色）的 ARN。

   1. 选择**提交**。

------
#### [ 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 中使用生命周期配置](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lcc.html)。

   以下为示例 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 集群](discover-emr-clusters.md)，了解如何从 Studio 或 Studio Classic 笔记本发现和连接 Amazon EMR 集群。