

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

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


如果您的 Docker 注册表需要身份验证，则必须创建一个向 SageMaker AI 提供访问凭据的 Amazon Lambda 函数。然后，创建一个训练作业并在 [create\$1training\$1job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job) API 中提供此 Lambda 函数的 ARN。最后，您可以选择创建接口 VPC 端点，以便您的 VPC 可以与 Lambda 函数通信，而无需通过互联网发送流量。以下指南演示如何创建 Lambda 函数、为其分配正确的角色以及创建接口 VPC 端点。

## 创建 Lambda 函数


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

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

设置私有 Docker 注册表所用的身份验证类型决定了您的 Lambda 函数返回的响应内容，如下所示。
+ 如果您的私有 Docker 注册表使用基本身份验证，则 Lambda 函数将返回所需的用户名和密码，以便向注册表进行身份验证。
+ 如果您的私有 Docker 注册表使用[持有者令牌身份验证](https://docs.docker.com/registry/spec/auth/token/)，则用户名和密码发送到您的授权服务器，该服务器将返回一个持有者令牌。然后，此令牌用于对您的私有 Docker 注册表进行身份验证。

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

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


您在 [IAMrole](https://docs.amazonaws.cn/sagemaker/latest/dg/sagemaker-roles.html)`create_training_job`API 中使用的必须具有调用 Amazon Lambda 函数的权限。以下代码示例演示如何将扩展 IAM 角色的权限，使其能够调用 `myLambdaFunction`。

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

有关编辑角色权限策略的信息，请参阅《Amazon Identity and Access Management 用户指南》**中的[修改角色权限策略（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)。

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

## 为 Lambda 创建接口 VPC 端点


通过创建接口端点，您的 Amazon VPC 可以与 Lambda 函数通信而无需通过互联网发送流量。有关更多信息，请参阅《Amazon Lambda 开发人员指南》**中的[为 Lambda 配置接口 VPC 终端节点](https://docs.amazonaws.cn/lambda/latest/dg/configuration-vpc-endpoints.html)。

创建接口终端节点后， SageMaker 培训将通过您的 VPC 向发送请求，从而调用您的 Lambda 函数。`lambda.region.amazonaws.com`如果您在创建接口端点时选择**启用 DNS 名称**，则 [Amazon Route 53](https://docs.amazonaws.cn/Route53/latest/DeveloperGuide/Welcome.html) 会将调用路由到 Lambda 接口端点。如果您使用不同的 DNS 提供商，则必须将 `lambda.region.amazonaws.co`m 映射到您的 Lambda 接口端点。