

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

# 设置权限以允许从 Studio 发布和启动 Amazon EMR 应用程序 SageMaker
<a name="studio-emr-serverless-permissions"></a>

在本节中，我们将详细介绍从 SageMaker Studio 列出和连接 EMR Serverless 应用程序所需的角色和权限，同时考虑了 Studio 和 EMR Serverless 应用程序部署在同一个 AWS 账户中或跨不同账户的情况。

必须向其添加必要权限的角色取决于 Studio 和您的 EMR Serverless 应用程序是位于同一个 AWS 账户（*单一账户*）还是位于不同的账户（*跨*账户）中。其中涉及两类角色：
+ 执行角色：
  + EMR Serverless 使用的@@ [运行时执行角色](https://docs.aws.amazon.com/http://emr/latest/EMR-Serverless-UserGuide/jobs-spark.html#spark-defaults-executionRoleArn)（基于角色的访问控制角色）：这些是 EMR Serverless 任务执行环境使用的 IAM 角色，用于访问运行时所需的 AWS 其他服务和资源，例如 Amazon S3，用于访问数据、记录 CloudWatch 、访问数据目录或其他基于您的工作负载要求的服务。 AWS Glue 我们建议在运行 EMR Serverless 应用程序的账户中创建这些角色。

    要了解有关运行时角色的更多信息，请参阅《EMR Serverless 用户指南》**中的[作业运行时角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)。
**注意**  
您可以为 EMR Serverless 应用程序定义多个 RBAC 角色。这些角色可以根据组织内不同用户或组别所需的职责和访问级别来确定。有关 RBAC 权限的更多信息，请参阅 [Amazon EMR Serverless 的安全最佳实践](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-best-practices.html#security-practice-rbac)。
  + SageMaker AI 执行角色：该执行角色允许 SageMaker AI 执行某些任务，例如从 Amazon S3 存储桶读取数据 CloudWatch、向其中写入日志以及访问您的工作流程可能需要的其他 AWS 服务。 SageMaker AI 执行角色还具有名为的特殊权限`iam:PassRole`，允许 SageMaker AI 将临时运行时执行角色传递给 EMR Serverless 应用程序。这些角色为 EMR Serverless 应用程序提供了在运行时与其他 AWS 资源进行交互所需的权限。
+ 可假设角色（也称为*服务访问角色*）：
  + 这些是 A SageMaker I 的执行角色可以担任的 IAM 角色，用于执行与管理 EMR Serverless 应用程序相关的操作。这些角色定义了列出、连接或管理 EMR Serverless 应用程序时所需的权限和访问策略。它们通常用于跨账户场景，其中 EMR Serverless 应用程序位于与 AI 域 AWS 不同的 SageMaker 账户中。为您的 EMR Serverless 应用程序设置专用 IAM 角色有助于遵循最低权限原则，并确保 Amazon EMR 仅拥有运行任务所需的权限，同时保护您账户中的其他资源。 AWS 

通过正确理解和配置这些角色，您可以确保 SageMaker Studio 拥有与 EMR Serverless 应用程序进行交互的必要权限，无论这些应用程序是在同一个账户中部署还是部署在不同的账户中。

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

下图说明了当 Studio 和应用程序部署在同一个账户中时，从 Studio 列出并连接到 EMR Serverless 应用程序所需的角色和权限。 AWS 

![\[该图显示了当 Studio 和应用程序位于同一个账户中时，从 Studio 列出和连接 EMR Serverless 应用程序所需的角色和权限。 AWS\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-singleaccount.png)


如果您的 Amazon EMR 应用程序和 Studio 部署在同一个 AWS 账户中，请按照以下步骤操作：

1. **步骤 1**：在 [Amazon S3 管理控制台](https://console.aws.amazon.com/S3)中读取用于数据来源和输出数据存储的 Amazon S3 存储桶的 ARN。

   要了解如何通过名称查找存储桶，请参阅[访问并列出 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)。有关如何创建 Amazon S3 存储桶的信息，请参阅[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

1. **步骤 2**：在您的账户中为 EMR Serverless 应用程序创建至少一个作业运行时执行角色（上文*单一账户*使用场景图中的 `EMRServerlessRuntimeExecutionRoleA`）。选择**自定义信任策略**作为受信任实体。添加作业所需的权限。您至少需要对 Amazon S3 存储桶的完全访问权限，以及对 AWS Glue 数据目录的创建和读取权限。

   有关如何为 EMR Serverless 应用程序创建新运行时执行角色的详细说明，请按照以下步骤操作：

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

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

   1. 添加运行时角色所需的权限，命名策略，然后选择 **创建策略**。

      您可以参考 [EMR Serverless 的作业运行时角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)查找 EMR Serverless 运行时角色的运行时策略示例。

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

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

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

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

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

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

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

   有了这些角色，您和您的队友就可以连接到同一个应用程序，每个人都可以使用一个运行时角色，该角色的权限与您访问数据的个人级别相匹配。
**注意**  
Spark 会话的运作方式不同。Spark 会话根据 Studio 使用的执行角色进行隔离，因此不同执行角色的用户将拥有单独、隔离的 Spark 会话。此外，如果启用了域的源身份，还可以进一步隔离不同源身份的 Spark 会话。

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

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

   有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)
**注意**  
 或者，不熟悉 SageMaker AI 的用户可以通过自动创建具有适当权限的新 A SageMaker I 执行角色来简化设置过程。在这种情况下，跳过步骤 3 和 4。相反，用户可以：  
在 [ SageMaker AI 控制台](https://console.aws.amazon.com/sagemaker)左侧导航栏的 “域” 菜单中创建新**域**时，选择 “为**组织设置**” 选项。
从管理控制台的**角色管理器**菜单创建新的执行角色，然后将该角色附加到现有的域或用户配置文件。
创建角色时，在**用户将执行哪些 ML 活动？**中选择**运行 Studio EMR Serverless Applications** 选项。然后，提供 Amazon S3 存储桶的名称，以及您希望 EMR Serverless 应用程序使用的作业运行时执行角色（步骤 2）。  
 SageMaker 角色管理器会自动将运行和连接 EMR Serverless 应用程序所需的权限添加到新的执行角色中。使用[SageMaker 角色管理器]()，您只能为 EMR Serverless 应用程序分配一个运行时角色，并且该应用程序必须使用在部署 Studio 的同一帐户中运行，使用在同一帐户中创建的运行时角色。

1. **步骤 4**：将以下权限附加到访问您的 EMR Serverless 应用程序的 SageMaker AI 执行角色。

   1. 使用 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 打开 IAM 控制台。

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

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

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

   1. 在 **JSON** 标签中，添加允许 EMR Serverless 访问和操作的 Amazon EMR Serverless 权限。有关策略文档的详细信息，请参阅 [参考策略](#studio-set-up-emr-serverless-permissions-reference) 中的 *EMR Serverless 策略*。用实际值替换 *region*、*accountID* 和通过的 *EMRServerlessAppRuntimeRole* ，然后将语句列表复制到角色的内联策略中。
**注意**  
您可以根据需要在权限中包含任意多个运行时角色的 ARN 字符串，并用逗号分隔。

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

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

   1. 重复**创建内联策略**步骤，添加另一个内联策略，授予角色更新域、用户配置文件和空间的权限。有关 `SageMakerUpdateResourcesPolicy` 策略文档的详情，请参阅 [参考策略](#studio-set-up-emr-serverless-permissions-reference) 中的*域、用户配置文件和空间更新操作策略*。用实际值替换 *region* 和 *accountID*，然后将语句列表复制到角色的内联策略中。

1. **步骤 5**：

   将运行时角色列表与您的用户个人资料或域相关联，这样您就可以直观地浏览角色列表并选择在[连接到 EMR Serverless 应用程序时要](connect-emr-serverless-application.md)使用的角色。 JupyterLab您可以使用 SageMaker AI 控制台或以下脚本。随后，从笔记本创建的所有 Apache Spark 或 Apache Hive 作业都只能访问所选运行时角色附加策略允许的数据和资源。
**重要**  
未能完成此步骤将使您无法将 JupyterLab 笔记本电脑连接到 EMR Serverless 应用程序。

------
#### [ 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. 选择 “**编辑”**，然后添加您的 ARNs EMR Serverless 运行时执行角色。

   1. 选择**提交**。

   下次通过连接到 EMR Serverless 应用程序时 JupyterLab，运行时角色应出现在下拉菜单中供选择。

------
#### [ Python script ]

   在使用已更新权限的 SageMaker AI 执行角色从私有空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`studio-accountID` 和 `EMRServerlessRuntimeExecutionRole`。此代码片段更新特定用户配置文件 (`client.update_user_profile`) 的用户配置文件设置或域设置 (`client.update_domain`)，特别是关联您之前创建的 EMR Serverless 运行时执行角色。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_user_profile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'ExecutionRoleArns': ["arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::studio-accountID:role/EMRServerlessRuntimeExecutionRoleAA"]
           }
           
       }
   })
   resp = client.describe_domain(DomainId="domainID")
   
   resp['CreationTime'] = str(resp['CreationTime'])
   resp['LastModifiedTime'] = str(resp['LastModifiedTime'])
   print(json.dumps(resp, indent=2))
   ```

------

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

下图说明了当 Studio 和应用程序部署在不同的账户中时，从 Studio 列出并连接到 EMR Serverless 应用程序所需的角色和权限。 AWS 

![\[该图显示了当 Studio 和应用程序属于不同账户时，从 Studio 列出和连接 EMR Serverless 应用程序所需的角色和权限。 AWS\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/studio/emr/studio-notebooks-emr-serverless-permissions-setup-crossaccount.png)


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

在您开始使用之前：
+ 检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。有关 SageMaker AI 中的空间和执行角色的信息，请参阅[了解域空间权限和执行角色](execution-roles-and-spaces.md)。有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息，请参阅。[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)
+ 在 [Amazon S3 管理控制台](https://console.aws.amazon.com/S3)中读取用于数据来源和输出数据存储的 Amazon S3 存储桶的 ARN。

  有关如何创建 Amazon S3 存储桶的信息，请参阅[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。要了解如何通过名称查找存储桶，请参阅[访问并列出 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)。

如果 EMR Serverless 应用程序和 Studio 分别部署在不同的 AWS 账户中，则需要对这两个账户的权限进行配置。

### 在 EMR Serverless 账户上
<a name="studio-set-up-emr-serverless-permissions-crossaccount-emraccount"></a>

请按照以下步骤在运行 EMR Serverless 应用程序的账户（也称为*信任账户*）上创建必要的角色和策略：

1. **步骤 1**：在您的账户中为 EMR Serverless 应用程序创建至少一个作业运行时执行角色（上文*跨账户*图中的 `EMRServerlessRuntimeExecutionRoleB`）。选择**自定义信任策略**作为受信任实体。添加作业所需的权限。您至少需要对 Amazon S3 存储桶的完全访问权限，以及对 AWS Glue 数据目录的创建和读取权限。

   有关如何为 EMR Serverless 应用程序创建新运行时执行角色的详细说明，请按照以下步骤操作：

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

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

   1. 添加运行时角色所需的权限，命名策略，然后选择**创建策略**。

      有关 EMR Serverless 运行时角色的运行时策略示例，请参阅 [Amazon EMR Serverless 的作业运行时角色](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/security-iam-runtime-role.html)。

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

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

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

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "emr-serverless.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

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

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

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

   有了这些角色，您和您的队友就可以连接到同一个应用程序，每个人都可以使用一个运行时角色，该角色的权限与您访问数据的个人级别相匹配。
**注意**  
Spark 会话根据 Studio 中使用的执行角色进行隔离，因此不同执行角色的用户将拥有独立、隔离的 Spark 会话。此外，如果启用了域的源身份，还可以进一步隔离不同源身份的 Spark 会话。

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

   通过担任该角色，Studio 可以临时访问 EMR Serverless 账户所需的权限。

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

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

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

   1. 在 **JSON** 标签中，添加允许 EMR Serverless 访问和操作的 Amazon EMR Serverless 权限。有关策略文档的详细信息，请参阅 [参考策略](#studio-set-up-emr-serverless-permissions-reference) 中的 *EMR Serverless 策略*。用实际值替换 `region`、`accountID` 和通过的 `EMRServerlessAppRuntimeRole` ，然后将语句列表复制到角色的内联策略中。
**注意**  
这里的 `EMRServerlessAppRuntimeRole` 是在步骤 1 中创建的作业运行时执行角色（即上文*跨账户*图中的 `EMRServerlessAppRuntimeRoleB`）。您可以根据需要在权限中包含任意多个运行时角色的 ARN 字符串，并用逗号分隔。

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

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

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

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

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

      `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"
              }
          ]
      }
      ```

------

   1. 在**添加权限**页面中，添加在步骤 2 中创建的权限 `EMRServerlessAppRuntimeRoleB`，然后选择**下一步**。

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

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

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

### Studio 账户
<a name="studio-set-up-emr-serverless-permissions-crossaccount-studioaccount"></a>

在部署 Studio 的账户（也称为*可信账户*）上，更新访问您的 EMR Serverless 应用程序的 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**：将以下权限附加到访问您的 EMR Serverless 应用程序的 SageMaker AI 执行角色。

   1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

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

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

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

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

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

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

   1. 重复**创建内联策略**步骤，添加另一个策略，授予执行角色使用 `AssumableRole` 的权限，然后执行角色访问策略允许的操作。

      将 `emr-account` 替换为 Amazon EMR Serverless 帐户 ID，将 `AssumableRole` 替换为 Amazon EMR Serverless 帐户中创建的可承担角色的名称。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": {
              "Sid": "AllowSTSToAssumeAssumableRole",
              "Effect": "Allow",
              "Action": "sts:AssumeRole",
              "Resource": "arn:aws:iam::111122223333:role/AssumableRole"
          }
      }
      ```

------

1. **步骤 3**：

   将运行时角色列表与您的域或用户配置文件相关联，这样您就可以直观地浏览角色列表并选择在[连接到 EMR Serverless 应用程序时要](connect-emr-serverless-application.md)使用的角色。 JupyterLab您可以使用 SageMaker AI 控制台或以下脚本。随后，从笔记本创建的所有 Apache Spark 或 Apache Hive 作业都只能访问所选运行时角色附加策略允许的数据和资源。
**重要**  
未能完成此步骤将使您无法将 JupyterLab 笔记本电脑连接到 EMR Serverless 应用程序。

------
#### [ 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. 选择 **“编辑”**，然后添加您的假设角色和 EMR Serverless 运行时执行 ARNs角色。

   1. 选择**提交**。

   下次通过连接到 EMR Serverless 应用程序时 JupyterLab，运行时角色应出现在下拉菜单中供选择。

------
#### [ Python script ]

    在使用已更新权限的 SageMaker AI 执行角色从私有空间启动的 JupyterLab 应用程序中，在终端中运行以下命令。用适当的值替换 `domainID`、`user-profile-name`、`studio-accountID` 和 `EMRServerlessRuntimeExecutionRole`。此代码段更新了 SageMaker AI 域中特定用户配置文件 (`client.update_user_profile`) 或网域设置 (`client.update_domain`) 的用户配置文件设置。具体来说，它会为您之前创建的 Amazon EMR Serverless 设置运行时执行角色。它还允许 JupyterLab 应用程序担任特定的 IAM 角色 (`AssumableRole`)，以便在 Amazon EMR 账户中运行 EMR 无服务器应用程序。

   ```
   import botocore.session
   import json
   sess = botocore.session.get_session()
   client = sess.create_client('sagemaker')
   
   client.update_user_profile(
   DomainId="domainID", 
   UserProfileName="user-profile-name",
   DefaultUserSettings={
       'JupyterLabAppSettings': {
           'EmrSettings': {
               'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"],
               'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServerlessRuntimeExecutionRoleA", 
                                "arn:aws:iam::emr-accountID:role/AnotherRuntimeExecutionRole"]
           }
           
       }
   })
   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))
   ```

------

## 参考策略
<a name="studio-set-up-emr-serverless-permissions-reference"></a>
+ **EMR Serverless 策略**：此策略允许管理 EMR Serverless 应用程序，包括列出、创建（使用所需的 SageMaker AI 标签）、启动、停止、获取详细信息、删除、访问 Livy 端点和获取任务运行仪表板。它还允许将所需的 EMR Serverless 应用程序运行时角色传递给服务。
  + `EMRServerlessListApplications`：允许对指定区域和账户中的所有 EMR Serverless 资源执行 ListApplications 操作。 AWS 
  + `EMRServerlessPassRole`：允许在提供的 AWS 账户中传递指定的运行时角色，但仅当角色被传递给时`emr-serverless.amazonaws.com service`。
  + `EMRServerlessCreateApplicationAction`：允许对指定区域和账户中的 EMR Serverless 资源 TagResource 执行 CreateApplication 和操作。 AWS 不过，它要求创建或标记的资源必须具有非空值的特定标签密钥（`sagemaker:domain-arn`、`sagemaker:user-profile-arn` 和 `sagemaker:space-arn`）。
  + `EMRServerlessDenyTaggingAction`：如果资源未设置任何指定的标签键（`sagemaker:domain-arn`、和），则对指定区域和 AWS 账户中的 EMR Serverless 资源执行和`sagemaker:space-arn`操作。 TagResource UntagResource `sagemaker:user-profile-arn`
  + `EMRServerlessActions`：允许对 EMR Serverless 资源执行各种操作（`StartApplication`、`StopApplication`、`GetApplication`、`DeleteApplication`、`AccessLivyEndpoints` 和 `GetDashboardForJobRun`），但前提是资源的指定标签密钥（`sagemaker:domain-arn`、`sagemaker:user-profile-arn` 和 `sagemaker:space-arn`）设置为非空值。

  提供的 JSON 文档中定义的 IAM 策略授予了这些权限，但限制了对 EMR 无服务器应用程序上存在的特定 SageMaker AI 标签的访问权限，以确保只能管理与特定 A SageMaker I 域、用户个人资料和空间关联的 Amazon EMR 无服务器资源。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "EMRServerlessListApplications",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:ListApplications"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*"
          },
          {
              "Sid": "EMRServerlessPassRole",
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::111122223333:role/EMRServerlessAppRuntimeRole",
              "Condition": {
                  "StringLike": {
                      "iam:PassedToService": "emr-serverless.amazonaws.com"
                  }
              }
          },
          {
              "Sid": "EMRServerlessCreateApplicationAction",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:CreateApplication",
                  "emr-serverless:TagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "ForAllValues:StringEquals": {
                      "aws:TagKeys": [
                          "sagemaker:domain-arn",
                          "sagemaker:user-profile-arn",
                          "sagemaker:space-arn"
                      ]
                  },
                  "Null": {
                      "aws:RequestTag/sagemaker:domain-arn": "false",
                      "aws:RequestTag/sagemaker:user-profile-arn": "false",
                      "aws:RequestTag/sagemaker:space-arn": "false"
                  }
              }
          },
          {
              "Sid": "EMRServerlessDenyTaggingAction",
              "Effect": "Deny",
              "Action": [
                  "emr-serverless:TagResource",
                  "emr-serverless:UntagResource"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "true",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "true",
                      "aws:ResourceTag/sagemaker:space-arn": "true"
                  }
              }
          },
          {
              "Sid": "EMRServerlessActions",
              "Effect": "Allow",
              "Action": [
                  "emr-serverless:StartApplication",
                  "emr-serverless:StopApplication",
                  "emr-serverless:GetApplication",
                  "emr-serverless:DeleteApplication",
                  "emr-serverless:AccessLivyEndpoints",
                  "emr-serverless:GetDashboardForJobRun"
              ],
              "Resource": "arn:aws:emr-serverless:us-east-1:111122223333:/applications/*",
              "Condition": {
                  "Null": {
                      "aws:ResourceTag/sagemaker:domain-arn": "false",
                      "aws:ResourceTag/sagemaker:user-profile-arn": "false",
                      "aws:ResourceTag/sagemaker:space-arn": "false"
                  }
              }
          }
      ]
  }
  ```

------
+ **域、用户配置文件和空间更新操作策略**：以下策略授予在指定区域和 AWS 账户内更新 SageMaker AI 域、用户配置文件和空间的权限。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "SageMakerUpdateResourcesPolicy",
              "Effect": "Allow",
              "Action": [
                  "sagemaker:UpdateDomain",
                  "sagemaker:UpdateUserprofile",
                  "sagemaker:UpdateSpace"
              ],
              "Resource": [
                  "arn:aws:sagemaker:us-east-1:111122223333:domain/*",
                  "arn:aws:sagemaker:us-east-1:111122223333:user-profile/*"
              ]
          }
      ]
  }
  ```

------