本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置权限以允许从 SageMaker Studio 发布和启动亚马逊EMR应用程序
在本节中,我们将详细介绍从 SageMaker Studio 列出和连接到 EMR Serverless 应用程序所需的角色和权限,同时考虑了 Studio 和EMR无服务器应用程序部署在同一个 AWS 账户中或跨不同账户的情况。
必须向其添加必要权限的角色取决于 Studio 和您的EMR无服务器应用程序是位于同一个 AWS 帐户(单一账户)还是位于不同的账户(跨账户)中。涉及两种类型的角色:
-
执行角色:
-
EMRServerless 使用的@@ 运行时执行角色(基于角色的访问控制IAM角色):EMR无服务器任务执行环境使用这些角色来访问运行时所需的其他 AWS 服务和资源,例如 Amazon S3,用于访问数据、记录、访问 AWS Glue 数据目录或其他基于您的工作负载 CloudWatch 要求的服务。我们建议在运行EMR无服务器应用程序的账户中创建这些角色。
要了解有关运行时角色的更多信息,请参阅 EMRServerless 用户指南中的 Job 运行时角色。
注意
您可以为EMR无服务器应用程序定义多个RBAC角色。这些角色可以基于组织内不同用户或群组所需的职责和访问级别。有关RBAC权限的更多信息,请参阅 Amazon Amazon EMR Serverless 的安全最佳实践。
-
SageMaker 执行角色:该执行角色 SageMaker 允许执行某些任务,例如从 Amazon S3 存储桶读取数据 CloudWatch、向其中写入日志以及访问工作流程可能需要的其他 AWS 服务。 SageMaker 执行角色还具有名为的特殊权限,
iam:PassRole
该权限允许 SageMaker 将临时运行时执行角色传递给 EMR Serverless 应用程序。这些角色为EMR无服务器应用程序提供了在运行时与其他 AWS 资源进行交互所需的权限。
-
-
可担任的角色(也称为服务访问角色):
-
这些是执行IAM角色可以扮演 SageMaker的角色,用于执行与管理EMR无服务器应用程序相关的操作。这些角色定义了列出、连接或管理EMR无服务器应用程序时所需的权限和访问策略。它们通常用于跨账户场景,即EMR无服务器应用程序位于与域不同的 AWS 账户中。 SageMaker为您的EMR无服务器应用程序设置专门IAM角色有助于遵循最低权限原则,并确保 Amazon 仅EMR拥有运行任务所需的权限,同时保护您 AWS 账户中的其他资源。
-
通过正确理解和配置这些角色,您可以确保 SageMaker Studio 拥有与EMR无服务器应用程序交互的必要权限,无论这些应用程序是在同一个账户中部署还是部署在不同的账户中。
单一账户
下图说明了当 Studio 和应用程序部署在同一个 AWS 账户中时,从 Studio 列出和连接EMR无服务器应用程序所需的角色和权限。
如果您的 Amazon EMR 应用程序和 Studio 部署在同一个 AWS 账户中,请按照以下步骤操作:
-
步骤 1:在 Amazon S3 控制台中检索您用于数据源和输出数据存储的 Amazon S3
存储桶。ARN 要了解如何按名称查找存储桶,请参阅访问和列出 Amazon S3 存储桶。有关如何创建 Amazon S3 存储桶的信息,请参阅创建存储桶。
-
第 2 步:在您的账户中为EMR无服务器应用程序创建至少一个任务运行时执行角色(上面的单一账户用例图)。
EMRServerlessRuntimeExecutionRoleA
选择自定义信任策略作为可信实体。添加您的工作所需的权限。您至少需要对 Amazon S3 存储桶的完全访问权限,以及对 AWS Glue 数据目录的创建和读取权限。有关如何为EMR无服务器应用程序创建新的运行时执行角色的详细说明,请按照以下步骤操作:
-
导航到 IAM 控制台
。 -
在左侧导航窗格中,选择策略,然后选择创建策略。
-
添加运行时角色所需的权限,命名策略,然后选择创建策略。
您可以参阅 EMRServerless 的 Job 运行时角色来查找EMR无服务器运行时角色的示例运行时策略。
-
在左侧导航窗格中,选择角色,然后选择创建角色。
-
在创建角色页面上,选择自定义信任策略作为可信实体。
-
将以下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执行角色。ARN
有关中空间和执行角色的信息 SageMaker,请参阅了解域空间权限和执行角色。
有关如何检索 of 的执行角色ARN SageMaker的更多信息,请参阅获取你的执行角色。
注意
或者,新用户 SageMaker 可以通过自动创建具有适当权限的新 SageMaker 执行角色来简化设置过程。在这种情况下,请跳过步骤 3 和 4。相反,用户可以:
-
在 SageMaker控制台
左侧导航栏的 “域” 菜单中创建新域时,选择 “为组织设置” 选项。 -
从控制台的 “角色管理器” 菜单中创建新的执行角色,然后将该角色附加到现有的域或用户配置文件。
创建角色时,在 “用户将执行哪些机器学习活动?” 中选择 “运行 Studio EMR 无服务器应用程序” 选项 然后,提供您的 Amazon S3 存储桶的名称以及您希望您的EMR无服务器应用程序使用的任务运行时执行角色(步骤 2)。
SageMaker 角色管理器会自动将运行和连接到 EMR Serverless 应用程序所需的权限添加到新的执行角色中。使用SageMaker 角色管理器,您只能为EMR无服务器应用程序分配一个运行时角色,并且该应用程序必须使用在部署 Studio 的同一个帐户中运行,使用在同一帐户中创建的运行时角色。
-
-
步骤 4:将以下权限附加到访问您的EMR无服务器应用程序的 SageMaker 执行角色。
-
从 IAM 打开 https://console.aws.amazon.com/sagemaker/
控制台。 -
选择 “角色”,然后在 “搜索” 字段中按名称搜索您的执行角色。角色名称是的最后一部分ARN,位于最后一个正斜杠 (/) 之后。
-
点击链接进入您的职位。
-
选择添加权限,然后选择创建内联策略。
-
在JSON选项卡中,添加允许EMR无服务器访问和操作的 Amazon EMR 无服务器权限。有关策略文档的详细信息,请参阅中的EMR无服务器策略。参考政策更换
region
,accountID
,并通过了EMRServerlessAppRuntimeRole
(s) 在将语句列表复制到您角色的内联策略之前,使用其实际值。注意
您可以根据需要在权限中包含任意数量的运行时角色ARN字符串,并用逗号分隔。
-
选择 “下一步”,然后提供策略名称。
-
选择创建策略。
-
重复创建内联策略步骤,添加另一个内联策略,授予角色更新域、用户配置文件和空间的权限。有关
SageMakerUpdateResourcesPolicy
策略文档的详细信息,请参阅中的域、用户配置文件和空间更新操作策略参考政策。更换region
以及accountID
在将语句列表复制到角色的内联策略之前,先使用它们的实际值。
-
-
第 5 步:
将运行时角色列表与您的用户配置文件或域相关联,这样您就可以直观地浏览角色列表并选择要在连接到EMR无服务器应用程序时使用的角色。 JupyterLab您可以使用 SageMaker 控制台或以下脚本。随后,您在笔记本上创建的所有 Apache Spark 或 Apache Hive 作业将仅访问附加到所选运行时角色的策略所允许的数据和资源。
重要
未能完成此步骤将使您无法将 JupyterLab 笔记本电脑连接到EMR无服务器应用程序。
交叉账户
下图说明了当 Studio 和应用程序部署在不同的 AWS 账户中时,列出并连接到 Studio 中的EMR无服务器应用程序所需的角色和权限。
有关在 AWS 账户上创建角色的更多信息,请参阅https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html创建IAM角色(控制台)。
在您开始使用之前:
-
检索您的私有空间使用的 SageMaker 执行角色。ARN有关中空间和执行角色的信息 SageMaker,请参阅了解域空间权限和执行角色。有关如何检索 of 的执行角色ARN SageMaker的更多信息,请参阅获取你的执行角色。
-
在 Amazon S3 控制台中检索您将用于数据源和输出数据存储的 Amazon S3
存储桶。ARN 有关如何创建 Amazon S3 存储桶的信息,请参阅创建存储桶。要了解如何按名称查找存储桶,请参阅访问和列出 Amazon S3 存储桶。
如果您的EMR无服务器应用程序和 Studio 部署在不同的 AWS 账户中,则需要为两个账户配置权限。
在EMR无服务器账户上
按照以下步骤为运行 EMR Serverless 应用程序的账户(也称为信任账户)创建必要的角色和策略:
-
第 1 步:在您的账户中为EMR无服务器应用程序创建至少一个任务运行时执行角色(上面跨账户图表
EMRServerlessRuntimeExecutionRoleB
中的)。选择自定义信任策略作为可信实体。添加您的工作所需的权限。您至少需要对 Amazon S3 存储桶的完全访问权限,以及对 AWS Glue 数据目录的创建和读取权限。有关如何为EMR无服务器应用程序创建新的运行时执行角色的详细说明,请按照以下步骤操作:
-
导航到 IAM 控制台
。 -
在左侧导航窗格中,选择策略,然后选择创建策略。
-
添加运行时角色所需的权限,命名策略,然后选择创建策略。
有关EMR无服务器运行时角色的运行时策略示例,请参阅 Amazon Serv EMR erless 的作业运行时角色。
-
在左侧导航窗格中,选择角色,然后选择创建角色。
-
在创建角色页面上,选择自定义信任策略作为可信实体。
-
将以下JSON文档粘贴到 “自定义信任策略” 部分,然后选择 “下一步”。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
在添加权限页面中,添加您创建的策略,然后选择下一步。
-
在 “审阅” 页面上,输入角色的名称(例如)
EMRServerlessAppRuntimeRoleB
和可选的描述。 -
检查角色详细信息,然后选择 Create role。
使用这些角色,您和您的队友可以连接到同一个应用程序,每个应用程序都使用一个运行时角色,其权限范围与您的个人数据访问权限级别相匹配。
注意
Spark 会话的操作方式不同。Spark 会话是根据 Studio 使用的执行角色进行隔离的,因此具有不同执行角色的用户将拥有单独的、隔离的 Spark 会话。此外,如果您为域启用了源标识,则可以进一步隔离不同源身份之间的 Spark 会话。
-
-
步骤 2:使用以下配置创建名为
AssumableRole
的自定义IAM角色:-
权限:向授予必要的权限(Amazon EMR 无服务器策略),
AssumableRole
以允许访问EMR无服务器资源。此角色也称为访问角色。 -
信任关系:为配置信任策略,
AssumableRole
以允许从需要访问权限的 Studio 账户担任执行角色(跨账户图SageMakerExecutionRole
中的)。
通过担任该角色,Studio 可以临时访问其在EMR无服务器帐户中所需的权限。
有关如何在您的EMR无服务器账户
AssumableRole
中创建新 AWS 账户的详细说明,请按照以下步骤操作:-
导航到 IAM 控制台
。 -
在左侧导航窗格中,选择策略,然后选择创建策略。
-
在JSON选项卡中,添加允许EMR无服务器访问和操作的 Amazon EMR 无服务器权限。有关策略文档的详细信息,请参阅中的EMR无服务器策略。参考政策在将
region
语句列表复制到角色的内联策略之前,将accountID
、和 passedEMRServerlessAppRuntimeRole
(s) 替换为它们的实际值。注意
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" } ] } -
在添加权限页面中,添加
EMRServerlessAppRuntimeRoleB
您在步骤 2 中创建的权限,然后选择下一步。 -
在 “审阅” 页面上,输入角色的名称(例如)
AssumableRole
和可选的描述。 -
检查角色详细信息,然后选择 Create role。
有关在 AWS 账户上创建角色的更多信息,请参阅创建IAM角色(控制台)。
-
在工作室账号上
在部署 Studio 的账户(也称为可信账户)上,更新访问您的EMR无服务器应用程序的 SageMaker执行角色,使其具有访问信任账户中资源所需的权限。
-
步骤 1:检索您的空间使用的 SageMaker 执行角色。ARN
有关中空间和执行角色的信息 SageMaker,请参阅了解域空间权限和执行角色。
有关如何检索 of 的执行角色ARN SageMaker的更多信息,请参阅获取你的执行角色。
-
步骤 2:将以下权限附加到访问您的EMR无服务器应用程序的 SageMaker 执行角色。
-
从 IAM 打开 https://console.aws.amazon.com/iam/
控制台。 -
选择 “角色”,然后在 “搜索” 字段中按名称搜索您的执行角色。角色名称是的最后一部分ARN,位于最后一个正斜杠 (/) 之后。
-
点击链接进入您的职位。
-
选择添加权限,然后选择创建内联策略。
-
在JSON选项卡中,添加内联策略,授予角色更新域、用户配置文件和空间的权限。有关
SageMakerUpdateResourcesPolicy
策略文档的详细信息,请参阅中的域、用户配置文件和空间更新操作策略参考政策。在将语句列表复制到角色的内联策略之前,请将region
和accountID
替换为它们的实际值。 -
选择 “下一步”,然后提供策略名称。
-
选择创建策略。
-
重复 “创建内联策略” 步骤,添加另一个策略,授予执行角色代入权限,
AssumableRole
然后执行该角色的访问策略允许的操作。emr-account
替换为亚马逊EMR无服务器账户 ID,并AssumableRole
替换为在亚马逊无EMR服务器账户中创建的假设角色的名称。{ "Version": "2012-10-17", "Statement": { "Sid": "AllowSTSToAssumeAssumableRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
emr-account
:role/AssumableRole
" } }
-
-
第 3 步:
将运行时角色列表与您的域或用户配置文件相关联,这样您就可以直观地浏览角色列表,并从 JupyterLab中选择连接到EMR无服务器应用程序时要使用的角色。您可以使用 SageMaker 控制台或以下脚本。随后,您在笔记本上创建的所有 Apache Spark 或 Apache Hive 作业将仅访问附加到所选运行时角色的策略所允许的数据和资源。
重要
未能完成此步骤将使您无法将 JupyterLab 笔记本电脑连接到EMR无服务器应用程序。
参考政策
-
EMR无服务器策略:此策略允许管理EMR无服务器应用程序,包括列出、创建(使用必需的 SageMaker 标签)、启动、停止、获取详细信息、删除、访问 Livy 端点和获取任务运行仪表板。它还允许将所需的EMR无服务器应用程序运行时角色传递给服务。
-
EMRServerlessListApplications
:允许对指定区域和 AWS 账户中的所有EMR无服务器资源执行 ListApplications 操作。 -
EMRServerlessPassRole
:允许在提供的 AWS 账户中传递指定的运行时角色,但仅当角色被传递给时emr-serverless.amazonaws.com service
。 -
EMRServerlessCreateApplicationAction
:允许对 CreateApplication 指定区域和 AWS 账户中的EMR无服务器资源执行和 TagResource 操作。但是,它要求正在创建或标记的资源必须具有具有非空值的特定标签键(sagemaker:domain-arn
sagemaker:user-profile-arn
、和sagemaker:space-arn
)。 -
EMRServerlessDenyTaggingAction
:如果资源未设置任何指定的标签键(sagemaker:domain-arn
、和sagemaker:space-arn
),则对指定区域和 AWS 账户中的EMR无服务器资源执行和操作。 TagResource UntagResourcesagemaker:user-profile-arn
-
EMRServerlessActions
:允许对EMR无服务器资源执行各种操作(StartApplication
StopApplication
GetApplication
DeleteApplication
AccessLivyEndpoints
、、、、和GetDashboardForJobRun
),但前提是这些资源的指定标签键(sagemaker:domain-arn
sagemaker:user-profile-arn
、和sagemaker:space-arn
)设置为非空值。
所提供的JSON文档中定义的IAM策略授予了这些权限,但限制了对EMR无服务器应用程序上存在的特定 SageMaker 标签的访问权限,以确保只能管理与特定 SageMaker 域、用户个人资料和空间关联的 Amazon EMR Serverless 资源。
{ "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 域、用户配置文件和空间的权限。
{ "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/*" ] } ] }