在服务目录中配置 Amazon EMR CloudFormation 模板
本主题假定管理员熟悉 AWS CloudFormation、AWS Service Catalog 中的投资组合和产品以及 Amazon EMR。
为了简化从 Studio 创建 Amazon EMR 集群的过程,管理员可以将 Amazon EMR CloudFormation 模板注册为 AWS Service Catalog 组合中的产品。要向数据科学家提供模板,他们必须将组合与 Studio 或 Studio Classic 中使用的 SageMaker 执行角色关联起来。最后,要允许用户从 Studio 或 Studio Classic 发现模板、配置集群并连接到 Amazon EMR 集群,管理员需要设置适当的访问权限。
Amazon EMR AWS CloudFormation 模板可让最终用户自定义集群的各个方面。例如,管理员可以定义已批准的实例类型列表,供用户在创建集群时选择。
以下说明使用端到端 CloudFormation 堆栈
注意
GitHub 存储库 aws-samples/sagemaker-studio-emr
sagemaker-studio-emr/cloudformation/emr_servicecatalog_templates
有关可用于连接 Amazon EMR 集群的身份验证方法的详细信息,请参阅 从 SageMaker Studio 或 Studio Classic 连接到 Amazon EMR 集群。
要让数据科学家从 Studio 或 Studio Classic 发现 Amazon EMR CloudFormation 模板并配置集群,请按照以下步骤操作。
步骤 0:检查网络并准备 CloudFormation 堆栈
开始之前:
-
确保已查看 为 Amazon EMR 集群配置网络访问权限 中的联网和安全要求。
-
您必须有一个现有的端到端 CloudFormation 协议栈,该协议栈支持您选择的身份验证方法。您可以在 aws-samples/sagemaker-studio-emr
GitHub 存储库中找到此类 CloudFormation 模板的示例。以下步骤强调了端到端堆栈中的具体配置,以便在 Studio 或 Studio Classic 中使用 Amazon EMR 模板。
步骤 1:将服务目录组合与 SageMaker 关联起来
在服务目录组合中,将组合 ID 与访问集群的 SageMaker 执行角色关联。
为此,请在堆栈中添加以下部分(此处为 YAML 格式)。这样,SageMaker 执行角色就可以访问指定的服务目录组合,其中包含 Amazon EMR 模板等产品。它允许 SageMaker 承担的角色推出这些产品。
用实际值替换 SageMakerExecutionRole.Arn
和 SageMakerStudioEMRProductPortfolio.ID
。
SageMakerStudioEMRProductPortfolioPrincipalAssociation: Type: AWS::ServiceCatalog::PortfolioPrincipalAssociation Properties: PrincipalARN:
SageMakerExecutionRole.Arn
PortfolioId:SageMakerStudioEMRProductPortfolio.ID
PrincipalType: IAM
有关所需的 IAM 权限集的详细信息,请参阅权限部分。
步骤 2:在服务目录产品中引用 Amazon EMR 模板
在产品组合的服务目录产品中,引用 Amazon EMR 模板资源并确保其在 Studio 或 Studio Classic 中可见。
为此,请在服务目录产品定义中引用 Amazon EMR 模板资源,然后添加以下设置为 "true"
值的标签键 "sagemaker:studio-visibility:emr"
(请参阅 YAML 格式的示例)。
在服务目录产品定义中,集群的 AWS CloudFormation 模板是通过 URL 引用的。将附加标记设置为 true 可确保 Amazon EMR 模板在 Studio 或 Studio Classic 中的可见性。
注意
示例中提供的 URL 所引用的 Amazon EMR 模板在启动时不会强制执行任何身份验证要求。该选项用于演示和学习。不建议在生产环境中使用。
SMStudioEMRNoAuthProduct: Type: AWS::ServiceCatalog::CloudFormationProduct Properties: Owner: AWS Name: SageMaker Studio Domain No Auth EMR ProvisioningArtifactParameters: - Name: SageMaker Studio Domain No Auth EMR Description: Provisions a SageMaker domain and No Auth EMR Cluster Info: LoadTemplateFromURL:
Link to your CloudFormation template. For example, https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/astra-m4-sagemaker/end-to-end/CFN-EMR-NoStudioNoAuthTemplate-v3.yaml
Tags: - Key: "sagemaker:studio-visibility:emr" Value: "true"
步骤 3:参数化 Amazon EMR CloudFormation 模板
用于在服务目录产品中定义 Amazon EMR 集群的 CloudFormation 模板允许管理员指定可配置的参数。管理员可在模板的 Parameters
部分为这些参数定义 Default
值和 AllowedValues
范围。在集群启动过程中,数据科学家可以提供自定义输入或从这些预定义选项中进行选择,以自定义其 Amazon EMR 集群的某些方面。
以下示例说明了管理员在创建 Amazon EMR 模板时可以设置的其他输入参数。
"Parameters": { "EmrClusterName": { "Type": "String", "Description": "EMR cluster Name." }, "MasterInstanceType": { "Type": "String", "Description": "Instance type of the EMR master node.", "Default": "m5.xlarge", "AllowedValues": [ "m5.xlarge", "m5.2xlarge", "m5.4xlarge" ] }, "CoreInstanceType": { "Type": "String", "Description": "Instance type of the EMR core nodes.", "Default": "m5.xlarge", "AllowedValues": [ "m5.xlarge", "m5.2xlarge", "m5.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge" ] }, "CoreInstanceCount": { "Type": "String", "Description": "Number of core instances in the EMR cluster.", "Default": "2", "AllowedValues": [ "2", "5", "10" ] }, "EmrReleaseVersion": { "Type": "String", "Description": "The release version of EMR to launch.", "Default": "emr-5.33.1", "AllowedValues": [ "emr-5.33.1", "emr-6.4.0" ] } }
管理员在 Studio 中提供 Amazon EMR CloudFormation 模板后,数据科学家就可以使用它们来自行配置 Amazon EMR 集群。模板中定义的 Parameters
部分将转化为 Studio 或 Studio Classic 中集群创建表单上的输入字段。对于每个参数,数据科学家既可以在输入框中输入自定义值,也可以从下拉菜单中列出的预定义选项中进行选择,这些选项与模板中指定的 AllowedValues
相对应。
下图显示了从 CloudFormation Amazon EMR 模板组装的动态表单,用于在 Studio 或 Studio Classic 中创建 Amazon EMR 集群。
访问 从 Studio 或 Studio Classic 启动 Amazon EMR 集群 了解如何使用这些 Amazon EMR 模板从 Studio 或 Studio Classic 启动集群。
步骤 4:设置权限以启用从 Studio 列出和启动 Amazon EMR 集群
最后,附加所需的 IAM 权限,以启用从 Studio 或 Studio Classic 列出现有正在运行的 Amazon EMR 集群和自配置新集群。
您必须添加这些权限的角色取决于 Studio 或 Studio Classic 和 Amazon EMR 是部署在同一账户(选择单账户)还是不同账户(选择跨账户)中。
重要
您只能为从专用空间启动的 JupyterLab 和 Studio Classic 应用程序发现和连接 Amazon EMR 集群。确保 Amazon EMR 集群与您的 Studio 环境位于同一 AWS 区域。
如果 Amazon EMR 集群和 Studio 或 Studio Classic 部署在同一个 AWS 账户中,请为访问集群的 SageMaker 执行角色附加以下权限。
-
步骤 1:读取专用空间使用的 SageMaker 执行角色的 ARN。
有关 SageMaker 中空间和执行角色的信息,请参阅 了解域空间权限和执行角色。
有关如何检索 SageMaker 执行角色的 ARN 的更多信息,请参阅 获取执行角色。
-
步骤 2:为访问 Amazon EMR 集群的 SageMaker 执行角色附加以下权限。
-
导航到 IAM 控制台
。 -
选择角色,然后在搜索字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分,位于最后一个正斜线 (/) 之后。
-
点击链接进入您的角色。
-
选择添加权限,然后选择创建内联策略。
-
在 JSON 选项卡中,添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息,请参阅 参考策略 中的列出 Amazon EMR 策略。用实际值替换
region
和accountID
,然后将语句列表复制到角色的内联策略中。 -
选择下一步,然后提供一个策略名称。
-
选择创建策略。
-
重复创建内联策略步骤,添加另一个策略,授予执行角色使用 AWS CloudFormation 模板配置新 Amazon EMR 集群的权限。有关策略文档的详细信息,请参阅 参考策略 中的创建 Amazon EMR 集群策略。用实际值替换
region
和accountID
,然后将语句列表复制到角色的内联策略中。
-
注意
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 当 Amazon EMR 集群和 Studio 位于同一账户时,配置运行时系统角色身份验证。
开始之前,请检索专用空间使用的 SageMaker 执行角色的 ARN。
有关 SageMaker 中空间和执行角色的信息,请参阅 了解域空间权限和执行角色。
有关如何检索 SageMaker 执行角色的 ARN 的更多信息,请参阅 获取执行角色。
如果 Amazon EMR 集群和 Studio 或 Studio Classic 分别部署在不同的 AWS 账户中,则需要在这两个账户上配置权限。
注意
基于角色的访问控制 (RBAC) 连接到 Amazon EMR 集群的用户也应参考 当集群和 Studio 位于不同的账户中时,配置运行时系统角色身份验证。
在 Amazon EMR 集群账户上
请按照以下步骤在部署 Amazon EMR 的账户(也称为信任账户)上创建必要的角色和策略:
-
步骤 1:读取 Amazon EMR 集群服务角色的 ARN。
要了解如何查找集群服务角色的 ARN,请参阅为 Amazon EMR 对 AWS 服务和资源的权限配置 IAM 服务角色。
-
步骤 2:使用以下配置创建名为
AssumableRole
的自定义 IAM 角色:-
权限:向
AssumableRole
授予必要的权限,以允许访问 Amazon EMR 资源。在涉及跨账户访问的情况下,该角色也称为访问角色。 -
信任关系:为
AssumableRole
配置信任策略,以允许从需要访问的 Studio 账户承担执行角色(跨账户图中的SageMakerExecutionRole
)。
通过担任该角色,Studio 或 Studio Classic 可以临时访问 Amazon EMR 中所需的权限。
有关如何在 Amazon EMR AWS 账户中创建新
AssumableRole
的详细说明,请按照以下步骤操作:-
导航到 IAM 控制台
。 -
在左侧导航窗格中,选择策略,然后选择创建策略。
-
在 JSON 选项卡中,添加允许 Amazon EMR 访问和操作的 Amazon EMR 权限。有关策略文件的详细信息,请参阅 参考策略 中的列出 Amazon EMR 策略。用实际值替换
region
和accountID
,然后将语句列表复制到角色的内联策略中。 -
选择下一步,然后提供一个策略名称。
-
选择创建策略。
-
在左侧导航窗格中,选择角色,然后选择创建角色。
-
在创建角色页面上,选择自定义信任策略作为受信任实体。
-
在自定义信任策略部分粘贴以下 JSON 文档,然后选择下一步。
-
在添加权限页面上,添加刚刚创建的权限,然后选择下一步。
-
在审查页面上,输入角色名称(如
AssumableRole
)和可选描述。 -
检查角色详细信息,然后选择 Create role。
有关在 AWS 账户上创建角色的更多信息,请参阅创建 IAM 角色(管理控制台)。
-
Studio 账户
在部署 Studio 的账户(也称为受信任账户)上,更新访问集群的 SageMaker 执行角色,使其具有访问受信任账户资源所需的权限。
-
步骤 1:读取专用空间使用的 SageMaker 执行角色的 ARN。
有关 SageMaker 中空间和执行角色的信息,请参阅 了解域空间权限和执行角色。
有关如何检索 SageMaker 执行角色的 ARN 的更多信息,请参阅 获取执行角色。
-
步骤 2:为访问 Amazon EMR 集群的 SageMaker 执行角色附加以下权限。
-
导航到 IAM 控制台
。 -
选择角色,然后在搜索字段中按名称搜索执行角色。角色名称是 ARN 的最后一部分,位于最后一个正斜线 (/) 之后。
-
点击链接进入您的角色。
-
选择添加权限,然后选择创建内联策略。
-
在 JSON 选项卡中,添加授予角色更新域、用户配置文件和空间权限的内联策略。有关策略文档的详细信息,请参阅 参考策略 中的域、用户配置文件和空间更新操作策略。用实际值替换
region
和accountID
,然后将语句列表复制到角色的内联策略中。 -
选择下一步,然后提供一个策略名称。
-
选择创建策略。
-
重复创建内联策略步骤,添加另一个策略,授予执行角色使用
AssumableRole
的权限,然后执行角色访问策略允许的操作。将emr-account
替换为 Amazon EMR 帐户 ID,将AssumableRole
替换为 Amazon EMR 帐户中创建的可承担角色的名称。{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRoleAssumptionForCrossAccountDiscovery", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": ["arn:aws:iam::
emr-account
:role/AssumableRole
" ] }] } -
重复创建内联策略步骤,添加另一个策略,授予执行角色使用 AWS CloudFormation 模板配置新 Amazon EMR 集群的权限。有关策略文档的详细信息,请参阅 参考策略 中的 创建 Amazon EMR 群集策略。用实际值替换
region
和accountID
,然后将语句列表复制到角色的内联策略中。 -
(可选)要允许列出与 Studio 部署在同一账户中的 Amazon EMR 集群,请按照 参考策略 中的列出 Amazon EMR 策略中的定义,在 Studio 执行角色中添加额外的内联策略。
-
-
步骤 3:将您的可承担角色(访问角色)与您的域或用户配置文件关联起来。JupyterLab in Studio 用户可以使用 SageMaker 管理控制台或提供的脚本。
选择与您的使用场景相对应的选项卡。