在亚马逊虚拟私有云中运行 Amazon G SageMaker round Truth 标签工作 - Amazon SageMaker

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

在亚马逊虚拟私有云中运行 Amazon G SageMaker round Truth 标签工作

Ground Truth 支持亚马逊 VPC 中的以下功能。

  • 您可以使用 Amazon S3 存储桶策略来控制从特定 Amazon VPC 端点或特定 VPC 对存储桶的访问。如果您启动了标签任务,并且您的输入数据位于仅限您的 VPC 中的用户使用的 Amazon S3 存储桶中,则可以添加存储桶策略来授予 Ground Truth 终端节点访问该存储桶的权限。要了解更多信息,请参阅允许 Ground Truth 访问受 VPC 限制的 Amazon S3 存储库

  • 您可以在 VPC 中启动自动数据标注作业。您可以使用 VPC 配置来指定 VPC 子网和安全组。 SageMaker 使用此配置启动用于在您的 VPC 中自动标记数据的训练和推理作业。要了解更多信息,请参阅在 VPC 中创建自动数据标注作业

您可以通过以下任何一种方式使用这些选项。

  • 您可以使用这两种方法,使用受 VPC 保护并启用了自动数据标注功能的 Amazon S3 存储桶启动标注作业。

  • 您可以使用受 VPC 保护的存储桶,通过任何内置任务类型启动标注作业。

  • 您可以使用受 VPC 保护的存储桶启动自定义标注工作流。Ground Truth 使用 AWS PrivateLink 端点与注释前和注释后 Lambda 函数进行交互。

在 Amazon VPC 中创建标注作业之前,我们建议您查看在 VPC 中运行 Ground Truth 标签作业的先决条件

在 VPC 中运行 Ground Truth 标签作业的先决条件

在 Amazon VPC 中创建 Ground Truth 标注作业之前,请查看以下先决条件。

  • 如果您是 Ground Truth 的新用户,请查看入门以了解如何创建标注作业。

  • 如果输入数据位于受 VPC 保护的 Amazon S3 存储桶中,则工作人员必须从 VPC 访问工作人员门户。基于 VPC 的标签作业需要使用私人工作团队。要了解有关创建私有工作团队的更多信息,请参阅使用私有人力

  • 以下先决条件特定于在您的 VPC 中启动标签任务。

  • 查看 Ground Truth 安全性和权限部分,确保您已满足以下条件。

    • 创建标注作业的用户拥有所有必要的权限

    • 您已创建具有所需权限的 IAM 执行角色。如果您的使用案例不需要经过微调的权限,我们建议您使用授予开始使用 Ground Truth 的一般权限中所述的 IAM 托管策略。

    • 允许您的 VPC 访问 sagemaker-labeling-data-regionsm-bxcb-region-saved-task-states S3 存储桶。这些是系统拥有的区域化 S3 存储桶,当工作人员处理任务时,可以从工作人员门户访问这些存储桶。我们使用这些存储桶与系统托管的数据进行交互。

允许 Ground Truth 访问受 VPC 限制的 Amazon S3 存储库

以下各节将详细介绍 Ground Truth 使用 Amazon S3 存储桶启动标注作业所需的权限,这些存储桶的访问权限仅限于您的 VPC 和 VPC 端点。要了解如何限制 VPC 对 Amazon S3 存储桶的访问,请参阅《Amazon Simple Storage Service 用户指南》指南中的使用存储桶策略控制 VPC 端点的访问。要了解如何将策略添加到 S3 存储桶,请参阅使用 Amazon S3 控制台添加存储桶策略

注意

修改现有存储桶上的策略会导致 IN_PROGRESS Ground Truth 作业失败。我们建议您使用新的存储桶启动新作业。如果您想继续使用同一个存储桶,可以执行以下操作之一。

  • 等待 IN_PROGRESS 作业完成。

  • 使用控制台或 AWS CLI终止作业。

您可以使用 AWS PrivateLink 端点限制 VPC 中的用户访问 Amazon S3 存储桶。例如,以下 S3 存储桶策略只允许从 <bucket-name> 和端点 <vpc> 访问特定存储桶 <vpc-endpoint>。修改此策略时,必须将所有红色斜体文本替换为您的资源和规范。

注意

以下策略拒绝 VPC 内用户除外的所有实体执行 Action 中列出的操作。如果您未在此列表中包含操作,则任何有权访问此数据桶并有权执行这些操作的实体仍可访问这些操作。例如,如果用户有权对 Amazon S3 存储桶执行 GetBucketLocation,则下面的策略不会限制用户在 VPC 外部执行此操作。

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Deny", "Resource": [ "arn:aws:s3:::<bucket-name>", "arn:aws:s3:::<bucket-name>/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": [ "<vpc-endpoint>", "<vpc>" ] } } } ] }

Ground Truth 必须能够对用于配置标注作业的 S3 存储桶执行以下 Amazon S3 操作。

"s3:AbortMultipartUpload", "s3:GetObject", "s3:PutObject", "s3:ListBucket", "s3:GetBucketLocation"

您可以通过在存储桶策略中添加 Ground Truth 端点来做到这一点,就像前面提到的那样。下表包括每个 AWS 区域的 Ground Truth 服务终端节点。将您用于运行标注作业的同一 AWS 区域的端点添加到存储桶策略中。

AWS 区域 Ground Truth 端点
us-east-2 vpce-02569ba1c40aad0bc
us-east-1 vpce-08408e335ebf95b40
us-west-2 vpce-0ea07aa498eb78469
ca-central-1 vpce-0d46ea4c9ff55e1b7
eu-central-1 vpce-0865e7194a099183d
eu-west-2 vpce-0bccd56798f4c5df0
eu-west-1 vpce-0788e7ed8628e595d
ap-south-1 vpce-0d7fcda14e1783f11
ap-southeast-2 vpce-0b7609e6f305a77d4
ap-southeast-1 vpce-0e7e67b32e9efed27
ap-northeast-2 vpce-007893f89e05f2bbf
ap-northeast-1 vpce-0247996a1a1807dbd

例如,以下策略限制对以下项执行 GetObjectPutObject 操作:

  • 向 VPC (<vpc>) 中的用户提供的 Amazon S3 存储桶

  • VPC 端点 (<vpc-endpoint>)

  • Ground Truth 服务端点 (<ground-truth-endpoint>)

{ "Version": "2012-10-17", "Id": "1", "Statement": [ { "Sid": "DenyAccessFromNonGTandCustomerVPC", "Effect": "Deny", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<bucket-name>", "arn:aws:s3:::<bucket-name>/*" ], "Condition": { "ForAllValues:StringNotEquals": { "aws:sourceVpce": [ "<vpc-endpoint>", "<ground-truth-endpoint>" ], "aws:SourceVpc": "<vpc>" } } } ] }

如果您希望用户有权使用 Ground Truth 控制台启动标注作业,则还必须使用 aws:PrincipalArn 条件将用户的 ARN 添加到存储桶策略中。此用户还必须有权对您用于启动标注作业的存储桶执行以下 Amazon S3 操作。

"s3:GetObject", "s3:PutObject", "s3:ListBucket", "s3:GetBucketCors", "s3:PutBucketCors", "s3:ListAllMyBuckets",

以下代码是存储桶策略的示例,该策略只允许以下项对 S3 存储桶 <bucket-name> 执行 Action 中列出的操作。

  • <role-name>

  • aws:sourceVpce 中列出的 VPC 端点

  • VPC <vpc> 中的用户

{ "Version": "2012-10-17", "Id": "1", "Statement": [ { "Sid": "DenyAccessFromNonGTandCustomerVPC", "Effect": "Deny", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<bucket-name>/*", "arn:aws:s3:::<bucket-name>" ], "Condition": { "ForAllValues:StringNotEquals": { "aws:sourceVpce": [ "<vpc-endpoint>", "<ground-truth-endpoint>" ], "aws:PrincipalArn": "arn:aws:iam::<aws-account-id>:role/<role-name>", "aws:SourceVpc": "<vpc>" } } } ] }
注意

用于输入和输出数据的 Amazon VPC 接口终端节点和受保护的 Amazon S3 存储桶必须位于您用于创建标签任务的同一 AWS 区域。

授予 Ground Truth 访问 Amazon S3 存储桶的权限后,可以使用创建标注作业中的任一主题来启动标注作业。为输入和输出数据存储桶指定受 VPC 限制的 Amazon S3 存储桶。

在 VPC 中创建自动数据标注作业

要使用 Amazon VPC 创建自动数据标注作业,您需要使用 Ground Truth 控制台或 CreateLabelingJob API 操作提供 VPC 配置。 SageMaker 使用您提供的子网和安全组启动用于自动标记的训练和推理作业。

重要

在使用 VPC 配置启动自动数据标注作业之前,请确保已使用要用于标注作业的 VPC 创建了 Amazon S3 VPC 端点。要了解如何操作,请参阅创建 Amazon S3 VPC 端点

此外,如果使用受 VPC 限制的 Amazon S3 存储桶创建自动数据标注作业,则必须按照允许 Ground Truth 访问受 VPC 限制的 Amazon S3 存储库中的说明授予 Ground Truth 访问存储桶的权限。

使用以下过程学习如何向标注作业请求中添加 VPC 配置。

将 VPC 配置添加到自动数据标注作业(控制台):
  1. 按照创建标注作业(控制台)中的说明,完成该过程中的每个步骤,直至步骤 15。

  2. 工作人员部分中,选中启用自动数据标注旁边的复选框。

  3. 选择箭头,最大化控制台的 VPC 配置部分。

  4. 指定要用于自动数据标注作业的虚拟私有云 (VPC)

  5. 选择子网下的下拉列表并选择一个或多个子网。

  6. 选择安全组下的下拉列表并选择一个或多个组。

  7. 完成创建标注作业(控制台)过程的所有剩余步骤。

将 VPC 配置添加到自动数据标注作业 (API):

要使用 Ground Truth API 操作 CreateLabelingJob 配置标注作业,请按照创建自动数据标注作业 (API) 中的说明配置您的请求。除了本文档中描述的参数外,还必须在 LabelingJobResourceConfig 中包含一个 VpcConfig 参数,以便使用以下架构指定一个或多个子网和安全组。

"LabelingJobAlgorithmsConfig": { "InitialActiveLearningModelArn": "string", "LabelingJobAlgorithmSpecificationArn": "string", "LabelingJobResourceConfig": { "VolumeKmsKeyId": "string", "VpcConfig": { "SecurityGroupIds": [ "string" ], "Subnets": [ "string" ] } } }

以下是一个 AWS Python SDK (Boto3) 请求示例,该请求使用私有人力在美国东部(弗吉尼亚州北部)区域中创建自动数据标注作业。将所有红色斜体文本替换为您的标注作业资源和规范。要了解有关该CreateLabelingJob操作的更多信息,请参阅创建标注任务 (API) 教程和CreateLabeling作业 API 文档。

import boto3 client = boto3.client(service_name='sagemaker') response = client.create_labeling_job( LabelingJobName="example-labeling-job", LabelAttributeName="label", InputConfig={ 'DataSource': { 'S3DataSource': { 'ManifestS3Uri': "s3://bucket/path/manifest-with-input-data.json" } } }, "LabelingJobAlgorithmsConfig": { "LabelingJobAlgorithmSpecificationArn": "arn:aws:sagemaker:us-east-1:027400017018:labeling-job-algorithm-specification/tasktype", "LabelingJobResourceConfig": { "VpcConfig": { "SecurityGroupIds": [ "sg-01233456789", "sg-987654321" ], "Subnets": [ "subnet-e0123456", "subnet-e7891011" ] } } }, OutputConfig={ 'S3OutputPath': "s3://bucket/path/file-to-store-output-data", 'KmsKeyId': "string" }, RoleArn="arn:aws:iam::*:role/*, LabelCategoryConfigS3Uri="s3://bucket/path/label-categories.json", StoppingConditions={ 'MaxHumanLabeledObjectCount': 123, 'MaxPercentageOfInputDatasetLabeled': 123 }, HumanTaskConfig={ 'WorkteamArn': "arn:aws:sagemaker:region:*:workteam/private-crowd/*", 'UiConfig': { 'UiTemplateS3Uri': "s3://bucket/path/custom-worker-task-template.html" }, 'PreHumanTaskLambdaArn': "arn:aws:lambda:us-east-1:432418664414:function:PRE-tasktype", 'TaskKeywords': [ "Images", "Classification", "Multi-label" ], 'TaskTitle': "Add task title here", 'TaskDescription': "Add description of task here for workers", 'NumberOfHumanWorkersPerDataObject': 1, 'TaskTimeLimitInSeconds': 3600, 'TaskAvailabilityLifetimeInSeconds': 21600, 'MaxConcurrentTaskCount': 1000, 'AnnotationConsolidationConfig': { 'AnnotationConsolidationLambdaArn': "arn:aws:lambda:us-east-1:432418664414:function:ACS-tasktype" }, Tags=[ { 'Key': "string", 'Value': "string" }, ] )