如何将 Amazon SageMaker 模型部署到不同的 AWS 账户?

上次更新时间:2020 年 7 月 14 日

我正在培训 AWS 账户中的 Amazon SageMaker 模型。如何将此模型部署到其他 AWS 账户中的终端节点?

解决方法

账户 A(沙盒账户)

1.    创建 AWS Key Management Service (AWS KMS) 客户主密钥 (CMK)。在其他 AWS 账户部分中的定义密钥使用权限页面,选择添加其他 AWS 账户。然后,输入账户 B 的 AWS 账号(您想要将部模型部署至其中的账户)。

您将使用此 CMK 进行 Amazon SageMaker 培训作业。如果您没有为培训作业指定 CMK,那么 Amazon SageMaker 将默认使用 Amazon Simple Storage Service (Amazon S3) 服务器端加密密钥。默认的 Amazon S3 服务器端加密密钥无法与其他 AWS 账户共享或由其他 AWS 账户使用。

2.    如果没有培训作业,请先创建培训作业。在 Estimator 类中,添加您在上一步中创建的 CMK。示例:

linear = sagemaker.estimator.Estimator(
    …
    output_kms_key='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    … 
    )

账户 B(部署账户)

1.    创建两个 AWS Identity and Access Management (IAM) 策略,类似于以下内容。这两种策略为内联策略,这意味着它们会嵌入到 IAM 身份(用户、组或角色)中。

内联策略 1:允许角色访问账户 A(含有模型构件)中的 Amazon S3 资源。将 awsdoc-example-bucket 替换为存储培训作业输出的 S3 存储桶的名称。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::awsdoc-example-bucket/sagemaker/linear-learner/output/model.tar.gz"
        }
    ]
}

内联策略 2:允许您稍后将会创建的角色使用账户 A 中的 CMK。对于资源,指定账户 A 的账户 ID 和 CMK ID。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUseOfTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:AccountA:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
            ]
        }
    ]
}

2.    为 Amazon SageMaker 创建 IAM 角色 该角色附加了 AmazonSageMakerFullAccess 策略。

3.    将您在步骤 1 中创建的两个内联策略附加到在步骤 2 中创建的角色。该角色应具有三个策略:AmazonSageMakerFullAccess,以及两个内联策略。

账户 A(沙盒账户)

为存储培训作业输出的存储桶创建 S3 存储桶策略。此存储桶策略允许您在上一部分中创建的角色访问模型构件。替换以下示例中的相关值:

AccountB:部署账户的 AWS 账户 ID
AmazonSageMaker:您在部署账户中创建的角色的名称
awsdoc-example-bucket:存储培训作业输出的 S3 存储桶

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountB:root"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::awsdoc-example-bucket/sagemaker/linear-learner/output/model.tar.gz"
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalArn": "arn:aws:iam::AccountB:role/AmazonSageMaker"
                }
            }
        }
    ]
}

账户 B(部署账户)

创建部署模型:

1.    打开 Amazon SageMaker 控制台

2.    在导航窗格中,选择推理下的模型

3.    选择创建模型,然后输入以下内容
IAM 角色
:选择自定义 IAM 角色 ARN。对于 YourAccountID,输入账户 B 的 ID。对于 YourRole,输入您在账户 B 中创建的 IAM 角色的名称。
推理代码图像的位置提供推理代码图像存储在 Amazon Elastic Container Registry (Amazon ECR) 中的注册路径。
模型构件的位置:提供模型构件存储在 Amazon S3 中的 URL。

4.    在页面的底部,选择创建模型。有关创建模型的更多信息,请参阅创建管道模型

创建终端节点配置:

1.    打开 Amazon SageMaker 控制台

2.    在导航窗格中,选择推理下的终端节点配置

3.    选择创建终端节点配置。然后,在生产变体下,添加您在上一部分中创建的模型。

4.    选择创建终端节点配置

创建终端节点:

1.    打开 Amazon SageMaker 控制台

2.    在导航窗格中,选择推理下的终端节点

3.    选择创建终端节点,然后选择您在上一部分中创建的终端节点配置。

4.    选择创建终端节点

现在,您可以从账户 A 部署模型到账户 B。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?