使用需要身份验证的 Docker 注册表进行训练 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用需要身份验证的 Docker 注册表进行训练

如果您的 Docker 注册表需要身份验证,则必须创建一个为其提供访问凭据 SageMaker的 Amazon Lambda 函数。然后,创建一个训练作业并在 create_training_job API 中提供此 Lambda 函数的 ARN。最后,您可以选择创建接口 VPC 端点,以便您的 VPC 可以与 Lambda 函数通信,而无需通过互联网发送流量。以下指南演示如何创建 Lambda 函数、为其分配正确的角色以及创建接口 VPC 端点。

创建 Lambda 函数

创建一个将访问凭证传递给 SageMaker 并返回响应的 Amazon Lambda 函数。以下代码示例创建 Lambda 函数处理程序,如下所示。

def handler(event, context): response = { "Credentials": {"Username": "username", "Password": "password"} } return response

设置私有 Docker 注册表所用的身份验证类型决定了您的 Lambda 函数返回的响应内容,如下所示。

  • 如果您的私有 Docker 注册表使用基本身份验证,则 Lambda 函数将返回所需的用户名和密码,以便向注册表进行身份验证。

  • 如果您的私有 Docker 注册表使用持有者令牌身份验证,则用户名和密码发送到您的授权服务器,该服务器将返回一个持有者令牌。然后,此令牌用于对您的私有 Docker 注册表进行身份验证。

注意

如果您在同一个账户的注册表中有多个 Lambda 函数,并且您的训练作业的执行角色相同,则一个注册表的训练作业可以访问其他注册表的 Lambda 函数。

将正确的角色权限授予 Lambda 函数

你在 create_training_job API 中使用的 iam Role 必须具有调用函数的权限。 Amazon Lambda 以下代码示例演示如何将扩展 IAM 角色的权限,使其能够调用 myLambdaFunction

{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:*:function:*myLambdaFunction*" ] }

有关编辑角色权限策略的信息,请参阅《Amazon Identity and Access Management 用户指南》中的修改角色权限策略(控制台)

注意

附加了AmazonSageMakerFullAccess托管策略的 IAM 角色有权调用名称中带有 “SageMaker” 的任何 Lambda 函数。

为 Lambda 创建接口 VPC 端点

通过创建接口端点,您的 Amazon VPC 可以与 Lambda 函数通信而无需通过互联网发送流量。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的为 Lambda 配置接口 VPC 终端节点

创建接口终端节点后, SageMaker 培训将通过您的 VPC 向发送请求,从而调用您的 Lambda 函数。lambda.region.amazonaws.com如果您在创建接口端点时选择启用 DNS 名称,则 Amazon Route 53 会将调用路由到 Lambda 接口端点。如果您使用不同的 DNS 提供商,则必须将 lambda.region.amazonaws.com 映射到您的 Lambda 接口端点。