本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Service Catalog 中配置亚马逊EMR CloudFormation模板
本主题假设管理员熟悉AWS CloudFormation中的 AWS Service Catalog产品组合和产品以及 Amazon EMR。
为了简化通过 Studio 创建亚马逊EMR集群的过程,管理员可以将亚马逊EMR CloudFormation 模板注册为产品AWS Service Catalog组合中的产品。要使模板可供数据科学家使用,他们必须将项目组合与 Studio 或 Studio Classic 中使用的 SageMaker 执行角色相关联。最后,要允许用户从 Studio 或 Studio Classic 中发现模板、配置EMR集群并连接到 Amazon 集群,管理员需要设置适当的访问权限。
Amazon EMR AWS CloudFormation 模板允许最终用户自定义群集的各个方面。例如,管理员可以定义已批准的实例类型列表,用户在创建集群时可以从中进行选择。
以下说明使用 end-to-end CloudFormation 堆栈
注意
GitHub 存储库 aws-samples/ sagemaker-studio-emr
sagemaker-studio-emr/cloudformation/emr_servicecatalog_templates 存储库包含各种亚马逊EMR CloudFormation 启动模板
有关从 SageMaker Studio 或 Studio Classic 连接至亚马逊EMR集群可用于连接到 Amazon EMR 集群的身份验证方法的详细信息,请参阅。
要让数据科学家从 Studio 或 Studio Classic 中发现 Amazon EMR CloudFormation 模板并配置集群,请按照以下步骤操作。
第 0 步:检查您的网络并准备 CloudFormation 堆栈
开始之前:
-
请确保您已查看中的网络和安全要求配置联网。
-
您必须有一个支持您选择的身份验证方法的现有 end-to-end CloudFormation 堆栈。您可以在 aws-sam sagemaker-studio-emr
GitHub p CloudFormation les/ 存储库中找到此类模板的示例。以下步骤重点介绍了 end-to-end堆栈中的特定配置,以允许在 Studio 或 Studio Classic 中使用亚马逊EMR模板。
步骤 1:将您的 Service Catalog 产品组合与关联起来 SageMaker
在您的 Service Catalog 产品组合中,将您的产品组合 ID 与访问您的集群的 SageMaker 执行角色相关联。
为此,请将以下部分(此处为YAML格式)添加到您的堆栈中。这将授予 SageMaker 执行角色访问包含亚马逊EMR模板等产品的指定 Service Catalog 产品组合的权限。它允许担任 SageMaker 的角色启动这些产品。
Replace(替换) SageMakerExecutionRole.Arn
以及 SageMakerStudioEMRProductPortfolio.ID
以及它们的实际值。
SageMakerStudioEMRProductPortfolioPrincipalAssociation: Type: AWS::ServiceCatalog::PortfolioPrincipalAssociation Properties: PrincipalARN:
SageMakerExecutionRole.Arn
PortfolioId:SageMakerStudioEMRProductPortfolio.ID
PrincipalType: IAM
注意
你应该考虑什么执行角色?
Studio 用户界面根据与启动它的用户配置文件关联的执行角色来确定其权限。用户界面会在启动时设置这些权限。但是,启动的空间 JupyterLab 或 Studio Classic 应用程序可以拥有单独的权限。
为了跨应用程序(例如 Studio 用户界面和 Studio Classic)一致地访问 Amazon EMR 模板和集群,请在域、用户配置文件或空间级别向所有角色授予相同的权限子集。 JupyterLab这些权限应允许发现和配置 Amazon EMR 集群。
有关所需IAM权限集的详细信息,请参阅权限部分。
第 2 步:在 Service Catalog 产品中引用亚马逊EMR模板
在您的产品组合的 Service Catalog 产品中,引用亚马逊EMR模板资源并确保其在 Studio 或 Studio Classic 中的可见性。
为此,请在 Service Catalog 产品定义中引用 Amazon EMR 模板资源,然后将以下标签密钥"sagemaker:studio-visibility:emr"
集添加到该值中"true"
(参见YAML格式中的示例)。
在 Service Catalog 产品定义中,集群的 AWS CloudFormation 模板是通过引用的URL。将附加标签设置为 true 可确保亚马逊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
用于在 Service Catalog 产品中定义 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亚马逊EMR模板组装而成的动态表单,用于在 Studio 或 Studio Classic 中创建亚马逊EMR集群。
![从 CloudFormation 亚马逊EMR模板组装而成的动态表单的插图,用于从 Studio 或 Studio Classic 创建亚马逊EMR集群。](images/studio/emr/studio-notebooks-emr-cluster-creation.png)
请访问从 Studio 或 Studio Classic 中启动 A EMR,了解如何使用这些亚马逊EMR模板从 Studio 或 Studio Classic 启动集群。
第 4 步:设置权限以允许从 Studio 发布和启动亚马逊EMR集群
最后,附加所需的IAM权限以允许列出正在运行的现有亚马逊EMR集群以及从 Studio 或 Studio Classic 自行配置新集群。
您必须添加这些权限的角色取决于 Studio 还EMR是 Studio Classic 和 Amazon 部署在同一个账户(选择单个账户)中,还是部署在不同的账户(选择跨账户)中。
注意
Studio 目前不支持访问在与部署 Studio 的 AWS 账户不同的账户中创建的亚马逊EMR集群。跨账户访问仅在 Studio Classic 中可用。
有关使用角色进行跨账户访问的更多信息,请参阅中的跨账户资源访问权限。IAM
如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在同一个 AWS 账户中,请向访问您的集群的 SageMaker 执行角色授予以下权限。
注意
你应该考虑什么执行角色?
Studio 用户界面根据与启动它的用户配置文件关联的执行角色来确定其权限。用户界面会在启动时设置这些权限。但是,启动的空间 JupyterLab 或 Studio Classic 应用程序可以拥有单独的权限。
为了跨应用程序(例如 Studio 用户界面和 Studio Classic)一致地访问 Amazon EMR 模板和集群,请在域、用户配置文件或空间级别向所有角色授予相同的权限子集。 JupyterLab这些权限应允许发现和配置 Amazon EMR 集群。
-
查找您的域名、用户个人资料或空间的执行角色。有关如何检索执行角色的信息,请参阅获取你的执行角色。
-
从 IAM 打开 https://console.aws.amazon.com/sagemaker/
控制台。 -
选择 “角色”,然后在 “搜索” 字段中键入角色名称来搜索您创建的角色。
-
点击链接进入您的职位。
-
选择添加权限,然后选择创建内联策略。
-
在JSON选项卡中,添加以下具有权限的JSON策略:
-
AllowPresignedUrl
允许生成预签名URLs以便从 Studio 或 Studio Classic 中访问 Spark 用户界面。 -
AllowClusterDiscovery
并AllowClusterDetailsDiscovery
允许在 Studio 或 Studio Classic 中列出和描述账户/区域中的亚马逊EMR集群。 -
AllowEMRTemplateDiscovery
允许在 Service Catalog 中搜索亚马逊EMR模板。Studio 和 Studio Classic 使用它来显示可用模板 -
AllowSagemakerProjectManagement
允许创建和删除。在中 SageMaker,对的访问 AWS Service Catalog 是通过管理的使用 SageMaker 项目MLOps实现自动化。
提供的IAM策略中定义的策略JSON授予这些权限。Replace(替换)
studio-region
以及studio-account
在将声明列表复制到您角色的内联政策之前,请使用您的实际地区和 AWS 账户 ID 值。{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPresignedUrl", "Effect": "Allow", "Action": [ "elasticmapreduce:CreatePersistentAppUI", "elasticmapreduce:DescribePersistentAppUI", "elasticmapreduce:GetPersistentAppUIPresignedURL", "elasticmapreduce:GetOnClusterAppUIPresignedURL" ], "Resource": [ "arn:aws:elasticmapreduce:
studio-region
:studio-account
:cluster/*" ] }, { "Sid": "AllowClusterDetailsDiscovery", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListInstances", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:DescribeSecurityConfiguration" ], "Resource": [ "arn:aws:elasticmapreduce:studio-region
:studio-account
:cluster/*" ] }, { "Sid": "AllowClusterDiscovery", "Effect": "Allow", "Action": [ "elasticmapreduce:ListClusters" ], "Resource": "*" }, { "Sid": "AllowEMRTemplateDiscovery", "Effect": "Allow", "Action": [ "servicecatalog:SearchProducts" ], "Resource": "*" }, { "Sid": "AllowSagemakerProjectManagement", "Effect": "Allow", "Action": [ "sagemaker:CreateProject", "sagemaker:DeleteProject" ], "Resource": "arn:aws:sagemaker:studio-region
:studio-account
:project/*" } ] } -
-
选择 “下一步”,然后提供策略名称。
-
选择创建策略。
如果您的 Amazon EMR 集群和 Studio 或 Studio Classic 部署在不同的 AWS 账户中,则需要为两个账户配置权限。
在亚马逊EMR账户上
在部署 Amazon EMR 的账户(也称为信任账户)上,使用以下配置创建名为ASSUMABLE-ROLE
的自定义IAM角色:
-
权限:向授予必要的权限
ASSUMABLE-ROLE
以允许访问 Amazon EMR 资源。 -
信任关系:配置的信任策略
ASSUMABLE-ROLE
以允许从需要访问权限的 Studio 帐户担任角色。
通过担任该角色,Studio 或 Studio Classic 可以获得其在亚马逊中所需的权限的临时访问权限EMR。
-
为该角色创建新策略。
-
从 IAM 打开 https://console.aws.amazon.com/sagemaker/
控制台。 -
在左侧菜单中,选择策略,然后选择创建策略。
-
在JSON选项卡中,添加以下具有权限的JSON策略:
-
AllowPresignedUrl
允许生成预签名,URLs以便从 Studio 中访问 Spark 用户界面。 -
AllowClusterDiscovery
并AllowClusterDetailsDiscovery
允许在 Studio 中列出和描述账户/区域中的亚马逊EMR集群。
Replace(替换)
emr-region
以及emr-account
在复制到您的保单之前,请使用您的实际地区和 AWS 账户 ID 值。JSON{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPresignedUrl", "Effect": "Allow", "Action": [ "elasticmapreduce:CreatePersistentAppUI", "elasticmapreduce:DescribePersistentAppUI", "elasticmapreduce:GetPersistentAppUIPresignedURL", "elasticmapreduce:GetOnClusterAppUIPresignedURL" ], "Resource": [ "arn:aws:elasticmapreduce:
emr-region
:emr-account
:cluster/*" ] }, { "Sid": "AllowClusterDetailsDiscovery", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListInstances", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:DescribeSecurityConfiguration" ], "Resource": [ "arn:aws:elasticmapreduce:emr-region
:emr-account
:cluster/*" ] }, { "Sid": "AllowClusterDiscovery", "Effect": "Allow", "Action": [ "elasticmapreduce:ListClusters" ], "Resource": "*" } ] } -
-
命名您的策略并选择创建策略。
-
-
创建名为的自定义IAM角色
ASSUMABLE-ROLE
,然后将您的新策略附加到该角色。-
在IAM控制台中,选择左侧菜单中的角色,然后选择创建角色。
-
对于可信实体类型,选择AWS 账户,然后选择下一步。
-
选择您刚刚创建的权限,然后选择 “下一步”。
-
命名您的角色,
ASSUMABLE-ROLE
然后选择 “步骤 1:选择可信实体” 右侧的 “编辑” 按钮。 -
对于 “可信实体类型”,选择 “自定义信任策略”,然后粘贴以下信任关系。这会向部署 Studio 的账户(可信账户)授予担任此角色的权限。
Replace(替换)
studio-account
附上其实际 AWS 账户 ID。选择下一步。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
studio-account
:root" }, "Action": "sts:AssumeRole" } ] } -
再次找到并选择您刚刚创建的权限,然后选择 “下一步”。
-
您的信任策略应使用JSON您粘贴的最新版本进行更新。选择 Create role(创建角色)。
-
有关在 AWS 账户上创建角色的更多信息,请参阅创建IAM角色(控制台)。
在 Studio 账号上
在部署 Studio 或 Studio Classic 的账户(也称为可信账户)上,将访问集群的 SageMaker 执行角色更新为访问信任账户中资源所需的权限。
注意
你应该考虑什么执行角色?
Studio 用户界面根据与启动它的用户配置文件关联的执行角色来确定其权限。用户界面会在启动时设置这些权限。但是,启动的空间 JupyterLab 或 Studio Classic 应用程序可以拥有单独的权限。
为了跨应用程序(例如 Studio 用户界面和 Studio Classic)一致地访问 Amazon EMR 模板和集群,请在域、用户配置文件或空间级别向所有角色授予相同的权限子集。 JupyterLab这些权限应允许发现和配置 Amazon EMR 集群。
-
查找您的域名、用户个人资料或空间的执行角色。有关如何检索执行角色的信息,请参阅获取你的执行角色。
-
从 IAM 打开 https://console.aws.amazon.com/sagemaker/
控制台。 -
选择 “角色”,然后在 “搜索” 字段中键入角色名称来搜索您创建的角色。
-
点击链接进入您的职位。
-
选择添加权限,然后选择创建内联策略。
-
在JSON选项卡中,添加以下具有权限的JSON策略:
-
AllowEMRTemplateDiscovery
允许在 Service Catalog 中搜索亚马逊EMR模板。Studio Classic 使用它来显示可用的模板。 -
AllowSagemakerProjectManagement
允许创建和删除。在中 SageMaker,对的访问 AWS Service Catalog 是通过管理的使用 SageMaker 项目MLOps实现自动化。
提供的IAM策略中定义的策略JSON授予这些权限。Replace(替换)
studio-region
以及studio-account
在将声明列表复制到您的保单之前,请使用您的实际地区和 AWS 账户 ID 值。{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEMRTemplateDiscovery", "Effect": "Allow", "Action": [ "servicecatalog:SearchProducts" ], "Resource": "*" }, { "Sid": "AllowSagemakerProjectManagement", "Effect": "Allow", "Action": [ "sagemaker:CreateProject", "sagemaker:DeleteProject" ], "Resource": "arn:aws:sagemaker:
studio-region
:studio-account
:project/*" } ] } -
-
选择 “下一步”,然后提供策略名称。
-
选择创建策略。
-
重复该步骤,向 Studio 执行角色添加另一个内联策略。该政策应允许跨账户扮演角色以发现其他账户中的资源。
在您的执行角色详细信息页面上,选择添加权限,然后选择创建内联策略。
-
在JSON选项卡中,添加以下JSON策略。
emr-account
使用亚马逊EMR账户的账户 ID 更新。{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRoleAssumptionForCrossAccountDiscovery", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": ["arn:aws:iam::
emr-account
:role/ASSUMABLE-ROLE
" ] }] } -
选择下一步,提供策略名称,然后选择创建策略。
-
要允许列出与 Studio 同一个账户中部署的 Amazon EMR 集群,请向你的 Studio 执行角色添加额外的内联策略,如的 “单一账户” 选项卡中所定义配置列出 Amazon EMR 集群。
在 Jupyter 服务器启动ARN时传递角色
最后,请参阅,了解跨账户访问的其他配置如何为您的 ARN Studio 执行角色提供。ASSUMABLE-ROLE
由 Jupyter 服务器在启动时加载。ARNStudio 使用的执行角色假设该跨账户角色来发现和连接信任账户中的 Amazon EMR 集群。