使用亚马逊 SageMaker 角色管理器在几分钟内定义自定义权限

机器学习 (ML) 工作负载的管理员专注于确保用户以最安全的方式进行操作,努力实现最低权限设计原则。他们有各种各样的角色需要考虑,每个角色都有自己独特的需求集,而建立正确的权限策略集来满足这些需求有时可能会抑制敏捷性。 在这篇文章中,我们将介绍如何使用 亚马逊 SageMaker 角色 管理器快速构建一组基于角色的角色,这些角色可以在几分钟内直接在 A mazon SageMaker 控制台上根据您的特定要求进行进一步定制。

Role Manager 提供预定义的角色和机器学习活动与向导相结合,可简化您的权限生成流程,使您的机器学习从业者能够以最低限度的必要权限履行职责。如果您需要额外的自定义,SageMaker 角色管理器允许您为 亚马逊虚拟私有云 (Amazon VPC) 资源和 亚马逊云科技 密钥管理服务 (亚马逊云科技 KMS) 加密密钥指定联网和加密权限,并附加您的自定义策略。

在这篇文章中,您将介绍如何使用 SageMaker 角色管理器创建用于访问 亚马逊 S ageMaker Studio 的数据科学家角色,同时保留一组执行必要活动的最低权限。

解决方案概述

在本演练中,您将执行所有步骤,向机器学习管理员授予权限,创建服务角色以访问构建和训练模型所需的依赖关系,并创建执行角色供用户在 Studio 中担任以执行任务。如果您的机器学习从业者通过 亚马逊云科技 管理控制台 访问 SageMaker ,则可以通过 IA M 身份中心 (亚马逊云科技 单点登录的继任者)创建权限以允许访问或授予访问权限。

人格特征

角色是需要执行一组机器学习活动并使用角色向其授予权限的实体。SageMaker 角色管理器为你提供了一组用于常见用例的预定义角色模板,或者你可以创建自己的自定义角色。

目前支持多个角色,包括:

  • 数据科学家 — 在 SageMaker 环境中执行机器学习活动的角色。他们被允许处理 亚马逊简单存储服务 (Amazon S3) 数据、进行实验和制作模型。
  • mLOps — 在 SageMaker 环境中处理运营活动的角色。他们被允许管理模型、端点和管道以及审计资源。
  • SageMaker 计算角色 — SageMaker 计算资源(例如任务和端点)使用的角色。他们被允许访问亚马逊 S3 资源、 亚马逊弹性容器注册表 (Amazon ECR) 存储库、 亚马逊 CloudWatch 和其他用于 ML 计算的服务。
  • 自定义角色设置 -此角色没有预先选择的设置或默认选项。它提供从空设置开始的完全自定义。

有关角色的完整列表和其他详细信息,请参阅 SageMaker 角色管理器开发者指南中的角色 参考资料。

机器学习活动

机器学习活动是针对常见机器学习任务量身定制的预定义权限集。角色由一个或多个 ML 活动组成,用于授予权限。

例如,数据科学家角色使用以下 ML 活动:

  • 运行 Studio 应用程序 -在 Studio 环境中运行的权限。域和用户配置文件执行角色是必需的。
  • 管理实验 — 管理实验和试验的权限。
  • 管理 ML 作业 -审计、查询谱系和可视化实验的权限。
  • 管理模型 -在整个生命周期中管理 SageMaker 任务的权限。
  • 管理管道 -管理 SageMaker 管道和管道执行的权限。
  • S3 存储桶访问权限 -对指定存储桶执行操作的权限。

可用的机器学习活动比此处列出的活动要多得多。要查看完整列表以及模板策略的详细信息,请参阅《 SageMaker 角色管理器开发者 指南》中的机器学习活动参考。

下图演示了本文的整个范围,您首先创建一个服务执行角色以允许用户 通过 Pass Role 访问底层服务,然后创建用户执行角色以授予您的机器学习从业者执行所需的机器学习活动的权限。

先决条件

您需要确保您的 ML 管理员拥有创建和管理角色的角色,以及这些用户的 亚马逊云科技 身份和访问管理 (IAM) 权限。

机器学习管理员的 IAM 策略示例,可能与以下代码类似。请注意,以下策略将 Studio 域的创建仅限于 VPC。尽管这是控制网络访问的最佳实践,但如果您的实现不使用基于 VPC 的 Studio 域,则需要删除 lockdownStudioDomainCreateToVPC 语句。

{
    "Version": "2012-10-17",
    "Statement":
    [
        {
            "Sid": "LockDownStudioDomainCreateToVPC",
            "Effect": "Allow",
            "Action":
            [
                "sagemaker:CreateDomain"
            ],
            "Resource":
            [
                "arn:aws:sagemaker:<REGION>:<ACCOUNT-ID>:domain/*"
            ],
            "Condition":
            {
                "StringEquals":
                {
                    "sagemaker:AppNetworkAccessType": "VpcOnly"
                }
            }
        },
        {
            "Sid": "StudioUserProfilePerm",
            "Effect": "Allow",
            "Action":
            [
                "sagemaker:CreateUserProfile"
            ],
            "Resource":
            [
                "arn:aws:sagemaker:<REGION>:<ACCOUNT-ID>:user-profile/*"
            ]
        },
        {
            "Sid": "AllowFileSystemPermissions",
            "Effect": "Allow",
            "Action":
            [
                "elasticfilesystem:CreateFileSystem"
            ],
            "Resource": "arn:aws:elasticfilesystem:<REGION>:<ACCOUNT-ID>:file-system/*"
        },
        {
            "Sid": "KMSPermissionsForSageMaker",
            "Effect": "Allow",
            "Action":
            [
                "kms:CreateGrant",
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKeyWithoutPlainText"
            ],
            "Resource":
            [
                "arn:aws:kms:<REGION>:<ACCOUNT-ID>:key/<KMS-KEY-ID>"
            ]
        },
        {
            "Sid": "AmazonSageMakerPresignedUrlPolicy",
            "Effect": "Allow",
            "Action":
            [
                "sagemaker:CreatePresignedDomainUrl"
            ],
            "Resource":
            [
                "arn:aws:sagemaker:<REGION>:<ACCOUNT-ID>:user-profile/*"
            ]
        },
        {
            "Sid": "AllowRolePerm",
            "Effect": "Allow",
            "Action":
            [
                "iam:PassRole",
                "iam:GetRole"
            ],
            "Resource":
            [
                "arn:aws:iam::<ACCOUNT-ID>:role/*"
            ]
        },
        {
            "Sid": "ListExecutionRoles",
            "Effect": "Allow",
            "Action":
            [
                "iam:ListRoles"
            ],
            "Resource":
            [
                "arn:aws:iam::<ACCOUNT-ID>:role/*"
            ]
        },
        {
            "Sid": "SageMakerApiListDomain",
            "Effect": "Allow",
            "Action":
            [
                "sagemaker:ListDomains"
            ],
            "Resource": "arn:aws:sagemaker:<REGION>:<ACCOUNT-ID>:domain/*"
        },
        {
            "Sid": "VpcConfigurationForCreateForms",
            "Effect": "Allow",
            "Action":
            [
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Sid": "KmsKeysForCreateForms",
            "Effect": "Allow",
            "Action":
            [
                "kms:ListAliases"
            ],
            "Resource":
            [
                "*"
            ]
        },
        {
            "Sid": "StudioReadAccess",
            "Effect": "Allow",
            "Action":
            [
                "sagemaker:ListDomains",
                "sagemaker:ListApps",
                "sagemaker:DescribeDomain",
                "sagemaker:DescribeUserProfile",
                "sagemaker:ListUserProfiles",
                "sagemaker:EnableSagemakerServicecatalogPortfolio",
                "sagemaker:GetSagemakerServicecatalogPortfolioStatus"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SageMakerProjectsSC",
            "Effect": "Allow",
            "Action":
            [
                "servicecatalog:AcceptPortfolioShare",
                "servicecatalog:ListAcceptedPortfolioShares",
                "servicecatalog:Describe*",
                "servicecatalog:List*",
                "servicecatalog:ScanProvisionedProducts",
                "servicecatalog:SearchProducts",
                "servicecatalog:SearchProvisionedProducts",
                "cloudformation:GetTemplateSummary",
                "servicecatalog:ProvisionProduct",
                "cloudformation:ListStackResources",
                "servicecatalog:AssociatePrincipalWithPortfolio"
            ],
            "Resource": "*"
        },
        {
            "Action":
            [
                "s3:CreateBucket",
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation",
                "s3:AbortMultipartUpload",
                "s3:GetBucketCors",
                "s3:PutBucketCors",
                "s3:GetBucketAcl",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource":
            [
                "arn:aws:s3:::<S3-BUCKET-NAME>",
                "arn:aws:s3:::<S3-BUCKET-NAME>/*"
            ]
        }
    ]
}

创建用于传递任务和端点的服务角色

为机器学习从业者创建角色以在 SageMaker 中执行活动时,他们需要将权限传递给有权管理底层基础设施的服务角色。此服务角色可以重复使用,不需要为每个用例都创建。在本节中,您将创建一个服务角色,然后在通过 Pass Role 创建其他角色时引用该服务角色。如果您已经有了相应的服务角色,则可以使用它来代替创建另一个服务角色。

  1. 在 SageMaker 控制台上,在导航栏 中选择 “ 入门”。
  2. 配置角色下 ,选择 创建角色。

  3. 对于 角色名称后缀 ,为您的角色指定一个名称,该名称将成为为您创建的 IAM 角色名称的后缀。在这篇文章中,我们进入了 Sag emaker-demoComputerole。
  4. 选择 SageMaker 计算角色 作为你的角色。
  5. (可选)配置网络和加密设置以使用所需的资源。
  6. 选择 “ 下一步” 。

    配置 ML 活动 部分中,您可以看到已为 SageMaker 计算角色角色预先选择了 亚马逊云科技 所需 访问权限 的 ML 活动。
    由于选择了 “需要 访问权限 亚马逊云科技 服务 ML” 活动,因此会显示更多选项。
  7. 输入该服务角色将能够访问的相应 S3 存储桶 ARN 和 Amazon ECR ARN。
    您可以通过 在每个部分中选择 “ 添加” 来添加多个值。
  8. 填写完所需值后,选择 “ 下一步” 。
  9. 添加其他策略和标签 部分中,选择您的服务角色可能需要的任何其他策略。
  10. 选择 “ 下一步” 。
  11. 在 “ 查看角色 ” 部分中,验证您的配置是否正确,然后选择 提交
    对于服务角色,你需要做的最后一件事是记下角色 ARN,以便稍后在数据科学家角色创建过程中使用它。
  12. 要查看 IAM 中的角色,请在成功横幅 中选择 Go to Role,或者在 IAM 控制台上搜索您为服务角色角色提供的名称。
  13. 在 IAM 控制台上,记下 ARN 部分中该角色的 ARN。

您稍后在创建其他基于角色的角色时输入此 ARN。

为数据科学家创建执行角色

现在,您已经创建了供其他角色使用的基本服务角色,您可以为数据科学家创建角色。

  1. 在 SageMaker 控制台上,在导航栏 中选择 “ 入门”。
  2. 配置角色下 ,选择 创建角色
  3. 在角色名称后缀中 ,为你的角色命名,例如 S agemaker-DatascientistRole。
    请注意,生成的名称在您现有的角色中必须是唯一的,否则角色创建将失败。
  4. (可选)添加描述。
  5. 选择一个基本角色模板,为你的角色提供一组基本的机器学习活动。在此示例中,我们选择了 数据科学家
  6. (可选)在 网络设置 部分中,指定角色可以访问的特定 VPC 子网和安全组,以获取支持它们的资源。
  7. 加密设置中 ,您可以选择为支持静态加密的服务选择一个或多个数据加密和批量加密密钥。
  8. 完成角色自定义后,选择 “ 下一步”。

    在 “ 配置 ML 活动 ” 部分中,系统会根据您的基准角色模板预先选择一个或多个 ML 活动。
  9. 在本节中,您可以添加或删除其他 ML 活动,以便根据您的特定用例定制此角色。

    某些 ML 活动需要其他信息才能完成角色设置。例如,选择 S3 存储桶访问 机器学习活动要求您指定要授予访问权限的 S3 存储桶列表。其他 ML 活动可能需要一个 p assRoles 条目才能允许此角色将其权限传递给服务角色以代表角色执行操作。在我们的示例中,“ 管理 M L 作业” 活动需要 PassRoles 条 目。
  10. 输入您之前创建的服务角色的角色 ARN。
    您可以通过选择 “添加” 来 添加多个条目 ,这将在生成的角色中创建包含指定值的数组。
  11. 选择所有相应的 ML 活动并提供必要值后,选择 Next
  12. 添加其他策略 部分中,选择您的执行角色可能需要的任何其他策略。您也可以为执行角色添加标签。
  13. 选择 “ 下一步” 。
  14. 在 “ 审阅角色 ” 部分中,验证角色配置详细信息是否准确,然后选择 提交

查看并添加新角色的最终自定义设置

提交您的角色后,您可以前往 IAM 控制台查看为您创建的角色和策略,并进行进一步修改。要获取 IAM 中的新角色,请在成功横幅中选择 转到角色

在 IAM 控制台上,您可以查看新创建的角色以及映射您在角色管理器中选择的机器学习活动的附加策略。您可以在此处通过选择策略并编辑文档来更改现有策略。也可以通过基础架构即代码 (IaC) 重新创建此角色,只需获取策略文档的内容并将其插入到现有解决方案中即可。

将新角色关联到用户

为了让您的用户访问 Studio,他们需要与您创建的用户执行角色相关联(在本示例中,基于数据科学家角色)。将用户与角色关联的方法因您为 Studio 域设置的身份验证方法(IAM 或 IAM 身份中心)而异。您可以在 Studio 控制面板的 “” 部分下找到身份验证方法,如以下屏幕截图所示。

根据您的身份验证方法,转到相应的小节。

通过 IAM 访问工作室

请注意,如果您使用的是 IAM 身份中心与 Studio 的集成,则无需使用本节中的 IAM 角色。继续下一节。

SageMaker 角色管理器创建用于访问 亚马逊云科技 服务的执行角色。为了让您的数据科学家通过控制台扮演给定的角色,他们需要控制台角色才能进入 Studio 环境。

以下示例角色提供了必要的权限,允许数据科学家访问控制台并在 Studio 中担任其角色角色:

{
    "Version": "2012-10-17",
    "Statement":
    [
        {
            "Sid": "DescribeCurrentDomain",
            "Effect": "Allow",
            "Action": "sagemaker:DescribeDomain",
            "Resource": "arn:aws:sagemaker:<REGION>:<ACCOUNT-ID>:domain/<STUDIO-DOMAIN-ID>"
        },
        {
            "Sid": "RemoveErrorMessagesFromConsole",
            "Effect": "Allow",
            "Action":
            [
                "servicecatalog:ListAcceptedPortfolioShares",
                "sagemaker:GetSagemakerServicecatalogPortfolioStatus",
                "sagemaker:ListModels",
                "sagemaker:ListTrainingJobs",
                "servicecatalog:ListPrincipalsForPortfolio",
                "sagemaker:ListNotebookInstances",
                "sagemaker:ListEndpoints"
            ],
            "Resource": "*"
        },
        {
            "Sid": "RequiredForAccess",
            "Effect": "Allow",
            "Action":
            [
                "sagemaker:ListDomains",
                "sagemaker:ListUserProfiles"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CreatePresignedURLForAccessToDomain",
            "Effect": "Allow",
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<REGION>:<ACCOUNT-ID>:user-profile/<STUDIO-DOMAIN-ID>/<PERSONA_NAME>"
        }
    ]
}

标有 RemoveErrorMessagesFromConsole 的语句 可以在不影响进入 Studio 的能力的情况下删除,但会导致控制台界面出现 API 错误。

有时,管理员会授予机器学习从业者访问控制台的权限,以调试其 Studio 环境中的问题。在这种情况下,您希望授予额外的权限来查看 CloudWatch 和 亚马逊云科技 CloudTrail 日志。

以下代码是只读 CloudWatch Logs 访问策略的示例:

{
"Version": "2012-10-17",
    "Statement": [
        {
        "Action": [
                "logs:Describe*",
                "logs:Get*",
                "logs:List*",
                "logs:StartQuery",
                "logs:StopQuery",
                "logs:TestMetricFilter",
                "logs:FilterLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

有关 CloudWatch Logs 策略的更多信息,请参阅 客户托管策略示例

以下代码是只读 CloudTrail 访问策略的示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudtrail:Get*",
                "cloudtrail:Describe*",
                "cloudtrail:List*",
                "cloudtrail:LookupEvents"
            ],
            "Resource": "*"
        }
    ]
}

有关更多详细信息和示例策略,请参阅 亚马逊云科技 Cloud Trail 的 身份和访问管理

  1. 在 Studio 控制面板中,选择 添加用户 以创建新的数据科学家用户。
  2. 对于 “名称” ,为您的用户命名。
  3. 对于 默认执行角色 ,选择您之前创建的角色角色。
  4. 选择 “ 下一步” 。
  5. 选择相应的 Jupyter Lab 版本,以及是否启用 亚马逊 SageMaker JumpStart 和 SageMaker 项目模板
  6. 选择 “ 下一步” 。
  7. 这篇文章假设你没有使用 RStudio,因此 再次选择 “ 下一步” 以跳过 RStudio 配置。
  8. 选择是否启用 亚马逊 SageMaker Canva s 支持,以及是否允许在 Canvas 中进行时间序列预测。
  9. 选择 “ 提交” 。
    现在,您可以在 Studio 控制面板中看到您的新数据科学用户。
  10. 要测试此用户,请在 “ 启动应用程序 ” 菜单上选择 Studio
    这会以具有角色权限的选定用户身份将您重定向到 Studio 控制台。

通过 IAM 身份中心访问工作室

将 IAM 身份中心用户分配给执行角色要求他们首先存在于 IAM 身份中心目录中。如果它们不存在,请联系您的身份管理员或参阅 IAM Identity Center 中的 管理身份 以获取相关说明。

请注意,要使用 IAM 身份中心身份验证方法,其目录和您的 Studio 域必须位于同一 亚马逊云科技 区域。

  1. 要将 IAM 身份中心用户分配到您的 Studio 域,请 在 Studio 控制面板中选择 分配用户和群组
  2. 选择您的数据科学家用户,然后选择 分配用户和群组
  3. 将用户添加到 Studio 控制面板后,选择用户打开用户详细信息屏幕。
  4. 用户详细信息 页面上,选择 编辑
  5. 编辑用户配置文件 页面的 常规设置下 ,更改 默认执行角色 以匹配您为数据科学家创建的用户执行角色。
  6. 选择 “ 下一步” 。
  7. 在其余设置页面 中选择 “ 下一步”,然后选择 “ 提交” 以保存更改。

现在,当您的数据科学家登录 IAM 身份中心门户时,他们将看到该 Studio 域的磁贴。选择该磁贴使用您分配给他们的用户执行角色将他们登录到 Studio。

测试你的新角色

登录 Studio 后,您可以使用以下 示例笔记本 来验证您授予数据科学用户的权限。

您可以观察到,数据科学家用户只能在笔记本中执行其角色被允许的操作。例如:

  • 如果用户自定义了没有 VPC 或 亚马逊云科技 KMS 配置的任务,则该用户将被禁止运行任务
  • 只有当角色包含 ML 活动时,用户才有权访问 Amazon S3 资源
  • 只有当角色包含 ML 活动时,用户才能部署端点

清理

要清理您在本演练中创建的资源,请完成以下步骤:

  1. 删除您的新角色
    1. 与用户的映射: 如果使用 Studio 和 IAM,请删除您创建的所有新 Studio 用户。
    2. 如果使用带有 IAM 身份中心的 Studio,请将创建的执行角色与您的 Studio 用户分离。
  2. 在 IAM 控制台上,找到您的用户执行角色并将其删除。
  3. 在 IAM 控制台上,找到您的服务角色并将其删除。
  4. 如果您
    1. 为 ML 管理员创建了新角色: 以 ML 管理员角色注销您的账户,然后以另一位拥有 IAM 权限的管理员身份重新登录。
    2. 删除您创建的 ML 管理员角色。

结论

直到最近,为了构建具有自定义权限的 SageMaker 角色,你必须从头开始。使用新的 SageMaker 角色管理器,您可以使用角色、预建机器学习活动和自定义策略的组合,在几分钟内快速生成自定义角色。这可以让你的机器学习从业者更快地开始在 SageMaker 中工作。

要了解有关如何使用 SageMaker 角色管理器的更多信息,请参阅 Sag eMaker 角色管理器开发者指南。


作者简介

Giuseppe Zappia 是 亚马逊云科技 的高级解决方案架构师,在全栈软件开发、分布式系统设计和云架构方面拥有 20 多年的经验。在业余时间,他喜欢玩电子游戏、编程、看体育赛事和建造东西。

Ram Vittal Ram Vittal 是 亚马逊云科技 的首席机器学习解决方案架构师。他在架构和构建分布式、混合和云应用程序方面拥有 20 多年的经验。他热衷于构建安全且可扩展的人工智能/机器学习和大数据解决方案,以帮助企业客户完成云采用和优化之旅,从而改善其业务成果。业余时间,他喜欢骑摩托车、打网球和摄影。

Arvind Sowmyan 是 SageMaker 模型治理团队的高级软件开发工程师,他专门构建以企业安全为重点的可扩展网络服务。在此之前,他曾在 Training Jobs 平台工作,在那里他是 SageMaker 发布团队的一员。在业余时间,他喜欢画漫画、探索虚拟现实和修改大型语言模型。

Ozan Eken 是亚马逊网络服务的高级产品经理。他热衷于在机器学习中为企业客户开发治理产品。工作之余,他喜欢探索不同的户外活动和看足球。