本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置权限以允许从 Studio 发布和启动 Amazon EMR 应用程序 SageMaker
在本节中,我们将详细介绍从 SageMaker Studio 列出和连接 EMR Serverless 应用程序所需的角色和权限,同时考虑了 Studio 和 EMR Serverless 应用程序部署在同一个 AWS 账户中或跨不同账户的情况。
必须向其添加必要权限的角色取决于 Studio 和您的 EMR Serverless 应用程序是位于同一个 AWS 账户(单一账户)还是位于不同的账户(跨账户)中。其中涉及两类角色:
-
执行角色:
-
EMR Serverless 使用的@@ 运行时执行角色(基于角色的访问控制角色):这些是 EMR Serverless 任务执行环境使用的 IAM 角色,用于访问运行时所需的 AWS 其他服务和资源,例如 Amazon S3,用于访问数据、记录 CloudWatch 、访问数据目录或其他基于您的工作负载要求的服务。 AWS Glue 我们建议在运行 EMR Serverless 应用程序的账户中创建这些角色。
要了解有关运行时角色的更多信息,请参阅《EMR Serverles s 用户指南》中的 Job 运行时角色。
注意
您可以为 EMR Serverless 应用程序定义多个 RBAC 角色。这些角色可以根据组织内不同用户或组别所需的职责和访问级别来确定。有关 RBAC 权限的更多信息,请参阅 Amazon EMR Serverless 的安全最佳实践。
-
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 应用程序进行交互的必要权限,无论这些应用程序是在同一个账户中部署还是部署在不同的账户中。
单一账户
下图说明了当 Studio 和应用程序部署在同一个账户中时,从 Studio 列出并连接到 EMR Serverless 应用程序所需的角色和权限。 AWS

如果您的 Amazon EMR 应用程序和 Studio 部署在同一个 AWS 账户中,请按照以下步骤操作:
-
步骤 1:在 Amazon S3 管理控制台
中读取用于数据来源和输出数据存储的 Amazon S3 存储桶的 ARN。 要了解如何通过名称查找存储桶,请参阅访问并列出 Amazon S3 存储桶。有关如何创建 Amazon S3 存储桶的信息,请参阅创建存储桶。
-
步骤 2:在您的账户中为 EMR Serverless 应用程序创建至少一个作业运行时执行角色(上文单一账户使用场景图中的
EMRServerlessRuntimeExecutionRoleA
)。选择自定义信任策略作为受信任实体。添加作业所需的权限。您至少需要对 Amazon S3 存储桶的完全访问权限,以及对 AWS Glue 数据目录的创建和读取权限。有关如何为 EMR Serverless 应用程序创建新运行时执行角色的详细说明,请按照以下步骤操作:
-
导航到 IAM 控制台
。 -
在左侧导航窗格中,选择策略,然后选择创建策略。
-
添加运行时角色所需的权限,命名策略,然后选择 创建策略。
您可以参考 EMR Serverless 的作业运行时角色查找 EMR Serverless 运行时角色的运行时策略示例。
-
在左侧导航窗格中,选择角色,然后选择创建角色。
-
在创建角色页面上,选择自定义信任策略作为受信任实体。
-
在自定义信任策略部分粘贴以下 JSON 文档,然后选择下一步。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
在添加权限页面上,添加创建的策略,然后选择下一步。
-
在审查页面上,输入角色名称(如
EMRServerlessAppRuntimeRoleA
)和可选描述。 -
检查角色详细信息,然后选择 Create role。
有了这些角色,您和您的队友就可以连接到同一个应用程序,每个人都可以使用一个运行时角色,该角色的权限与您访问数据的个人级别相匹配。
注意
Spark 会话的运作方式不同。Spark 会话根据 Studio 使用的执行角色进行隔离,因此不同执行角色的用户将拥有单独、隔离的 Spark 会话。此外,如果启用了域的源身份,还可以进一步隔离不同源身份的 Spark 会话。
-
-
步骤 3:检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。
有关 SageMaker AI 中的空间和执行角色的信息,请参阅了解域空间权限和执行角色。
有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息,请参阅。获取执行角色
注意
或者,不熟悉 SageMaker AI 的用户可以通过自动创建具有适当权限的新 A SageMaker I 执行角色来简化设置过程。在这种情况下,跳过步骤 3 和 4。相反,用户可以:
-
在 SageMaker AI 控制台
左侧导航栏的 “域” 菜单中创建新域时,选择 “为组织设置” 选项。 -
从管理控制台的角色管理器菜单创建新的执行角色,然后将该角色附加到现有的域或用户配置文件。
创建角色时,在用户将执行哪些 ML 活动?中选择运行 Studio EMR Serverless Applications 选项。然后,提供 Amazon S3 存储桶的名称,以及您希望 EMR Serverless 应用程序使用的作业运行时执行角色(步骤 2)。
SageMaker 角色管理器会自动将运行和连接 EMR Serverless 应用程序所需的权限添加到新的执行角色中。使用SageMaker 角色管理器,您只能为 EMR Serverless 应用程序分配一个运行时角色,并且该应用程序必须使用在部署 Studio 的同一帐户中运行,使用在同一帐户中创建的运行时角色。
-
-
步骤 4:将以下权限附加到访问您的 EMR Serverless 应用程序的 SageMaker AI 执行角色。
-
使用 https://console.aws.amazon.com/sagemaker/
打开 IAM 控制台。 -
选择角色,然后在搜索字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分,位于最后一个正斜线 (/) 之后。
-
点击链接进入您的角色。
-
选择添加权限,然后选择创建内联策略。
-
在 JSON 标签中,添加允许 EMR Serverless 访问和操作的 Amazon EMR Serverless 权限。有关策略文档的详细信息,请参阅 参考策略 中的 EMR Serverless 策略。用实际值替换
region
、accountID
和通过的EMRServerlessAppRuntimeRole
,然后将语句列表复制到角色的内联策略中。注意
您可以根据需要在权限中包含任意多个运行时角色的 ARN 字符串,并用逗号分隔。
-
选择下一步,然后提供一个策略名称。
-
选择创建策略。
-
重复创建内联策略步骤,添加另一个内联策略,授予角色更新域、用户配置文件和空间的权限。有关
SageMakerUpdateResourcesPolicy
策略文档的详情,请参阅 参考策略 中的域、用户配置文件和空间更新操作策略。用实际值替换region
和accountID
,然后将语句列表复制到角色的内联策略中。
-
-
步骤 5:
将运行时角色列表与您的用户个人资料或域相关联,这样您就可以直观地浏览角色列表并选择在连接到 EMR Serverless 应用程序时要使用的角色。 JupyterLab您可以使用 SageMaker AI 控制台或以下脚本。随后,从笔记本创建的所有 Apache Spark 或 Apache Hive 作业都只能访问所选运行时角色附加策略允许的数据和资源。
重要
未能完成此步骤将使您无法将 JupyterLab 笔记本电脑连接到 EMR Serverless 应用程序。
跨账户
下图说明了当 Studio 和应用程序部署在不同的账户中时,从 Studio 列出并连接到 EMR Serverless 应用程序所需的角色和权限。 AWS

有关在 AWS 账户上创建角色的更多信息,请参阅https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html创建 IAM 角色(控制台)。
在您开始使用之前:
-
检索您的私有空间使用的 SageMaker AI 执行角色的 ARN。有关 SageMaker AI 中的空间和执行角色的信息,请参阅了解域空间权限和执行角色。有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息,请参阅。获取执行角色
-
在 Amazon S3 管理控制台
中读取用于数据来源和输出数据存储的 Amazon S3 存储桶的 ARN。 有关如何创建 Amazon S3 存储桶的信息,请参阅创建存储桶。要了解如何通过名称查找存储桶,请参阅访问并列出 Amazon S3 存储桶。
如果 EMR Serverless 应用程序和 Studio 分别部署在不同的 AWS 账户中,则需要对这两个账户的权限进行配置。
在 EMR Serverless 账户上
请按照以下步骤在运行 EMR Serverless 应用程序的账户(也称为信任账户)上创建必要的角色和策略:
-
步骤 1:在您的账户中为 EMR Serverless 应用程序创建至少一个作业运行时执行角色(上文跨账户图中的
EMRServerlessRuntimeExecutionRoleB
)。选择自定义信任策略作为受信任实体。添加作业所需的权限。您至少需要对 Amazon S3 存储桶的完全访问权限,以及对 AWS Glue 数据目录的创建和读取权限。有关如何为 EMR Serverless 应用程序创建新运行时执行角色的详细说明,请按照以下步骤操作:
-
导航到 IAM 控制台
。 -
在左侧导航窗格中,选择策略,然后选择创建策略。
-
添加运行时角色所需的权限,命名策略,然后选择创建策略。
有关 EMR Serverless 运行时角色的运行时策略示例,请参阅 Amazon EMR Serverless 的作业运行时角色。
-
在左侧导航窗格中,选择角色,然后选择创建角色。
-
在创建角色页面上,选择自定义信任策略作为受信任实体。
-
在自定义信任策略部分粘贴以下 JSON 文档,然后选择下一步。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
在添加权限页面上,添加创建的策略,然后选择下一步。
-
在审查页面上,输入角色名称(如
EMRServerlessAppRuntimeRoleB
)和可选描述。 -
检查角色详细信息,然后选择 Create role。
有了这些角色,您和您的队友就可以连接到同一个应用程序,每个人都可以使用一个运行时角色,该角色的权限与您访问数据的个人级别相匹配。
注意
Spark 会话根据 Studio 中使用的执行角色进行隔离,因此不同执行角色的用户将拥有独立、隔离的 Spark 会话。此外,如果启用了域的源身份,还可以进一步隔离不同源身份的 Spark 会话。
-
-
步骤 2:使用以下配置创建名为
AssumableRole
的自定义 IAM 角色:-
权限:向
AssumableRole
授予必要的权限(Amazon EMR Serverless 策略),以允许访问 EMR Serverless 资源。该角色也称为访问角色。 -
信任关系:为
AssumableRole
配置信任策略,允许需要访问的 Studio 帐户承担执行角色(跨帐户图中的SageMakerExecutionRole
)。
通过担任该角色,Studio 可以临时访问 EMR Serverless 账户所需的权限。
有关如何在 EMR Serverless 账户
AssumableRole
中创建新 AWS 账户的详细说明,请按照以下步骤操作:-
导航到 IAM 控制台
。 -
在左侧导航窗格中,选择策略,然后选择创建策略。
-
在 JSON 标签中,添加允许 EMR Serverless 访问和操作的 Amazon EMR Serverless 权限。有关策略文档的详细信息,请参阅 参考策略 中的 EMR Serverless 策略。用实际值替换
region
、accountID
和通过的EMRServerlessAppRuntimeRole
,然后将语句列表复制到角色的内联策略中。注意
这里的
EMRServerlessAppRuntimeRole
是在步骤 1 中创建的作业运行时执行角色(即上文跨账户图中的EMRServerlessAppRuntimeRoleB
)。您可以根据需要在权限中包含任意多个运行时角色的 ARN 字符串,并用逗号分隔。 -
选择下一步,然后提供一个策略名称。
-
选择创建策略。
-
在左侧导航窗格中,选择角色,然后选择创建角色。
-
在创建角色页面上,选择自定义信任策略作为受信任实体。
-
在自定义信任策略部分粘贴以下 JSON 文档,然后选择下一步。
studio-account
替换为 Studio 帐户 ID 和AmazonSageMaker-ExecutionRole
您的 JupyterLab 空间使用的执行角色。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
studio-account
:role/service-role/AmazonSageMaker-ExecutionRole
" }, "Action": "sts:AssumeRole" } ] } -
在添加权限页面中,添加在步骤 2 中创建的权限
EMRServerlessAppRuntimeRoleB
,然后选择下一步。 -
在审查页面上,输入角色名称(如
AssumableRole
)和可选描述。 -
检查角色详细信息,然后选择 Create role。
有关在 AWS 账户上创建角色的更多信息,请参阅创建 IAM 角色(控制台)。
-
Studio 账户
在部署 Studio 的账户(也称为可信账户)上,更新访问您的 EMR Serverless 应用程序的 SageMaker AI 执行角色,使其具有访问信任账户中资源所需的权限。
-
步骤 1:检索您的空间使用的 SageMaker AI 执行角色的 ARN。
有关 SageMaker AI 中的空间和执行角色的信息,请参阅了解域空间权限和执行角色。
有关如何检索 A SageMaker I 执行角色的 ARN 的更多信息,请参阅。获取执行角色
-
步骤 2:将以下权限附加到访问您的 EMR Serverless 应用程序的 SageMaker AI 执行角色。
-
使用 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
选择角色,然后在搜索字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分,位于最后一个正斜线 (/) 之后。
-
点击链接进入您的角色。
-
选择添加权限,然后选择创建内联策略。
-
在 JSON 选项卡中,添加授予角色更新域、用户配置文件和空间权限的内联策略。有关
SageMakerUpdateResourcesPolicy
策略文档的详情,请参阅 参考策略 中的域、用户配置文件和空间更新操作策略。用实际值替换region
和accountID
,然后将语句列表复制到角色的内联策略中。 -
选择下一步,然后提供一个策略名称。
-
选择创建策略。
-
重复创建内联策略步骤,添加另一个策略,授予执行角色使用
AssumableRole
的权限,然后执行角色访问策略允许的操作。将
emr-account
替换为 Amazon EMR Serverless 帐户 ID,将AssumableRole
替换为 Amazon EMR Serverless 帐户中创建的可承担角色的名称。{ "Version": "2012-10-17", "Statement": { "Sid": "AllowSTSToAssumeAssumableRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
emr-account
:role/AssumableRole
" } }
-
-
步骤 3:
将运行时角色列表与您的域或用户配置文件相关联,这样您就可以直观地浏览角色列表并选择在连接到 EMR Serverless 应用程序时要使用的角色。 JupyterLab您可以使用 SageMaker AI 控制台或以下脚本。随后,从笔记本创建的所有 Apache Spark 或 Apache Hive 作业都只能访问所选运行时角色附加策略允许的数据和资源。
重要
未能完成此步骤将使您无法将 JupyterLab 笔记本电脑连接到 EMR Serverless 应用程序。
参考策略
-
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 UntagResourcesagemaker: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 无服务器资源。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EMRServerlessListApplications", "Effect": "Allow", "Action": [ "emr-serverless:ListApplications" ], "Resource": "arn:aws:emr-serverless:
region
:accountID
:/*" }, { "Sid": "EMRServerlessPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::accountID
: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:region
:accountID
:/*", "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:region
:accountID
:/*", "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:region
:accountID
:/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 域、用户配置文件和空间的权限。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SageMakerUpdateResourcesPolicy", "Effect": "Allow", "Action": [ "sagemaker:UpdateDomain", "sagemaker:UpdateUserprofile", "sagemaker:UpdateSpace" ], "Resource": [ "arn:aws:sagemaker:
region>
:accountID
:domain/*", "arn:aws:sagemaker:region
:accountID
:user-profile/*" ] } ] }