

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

# 在亚马逊虚拟私有云中运行 Amazon G SageMaker round Truth 标签工作
<a name="samurai-vpc-labeling-job"></a>

Ground Truth 支持 Amazon VPC 中的以下功能。
+ 您可以使用 Amazon S3 存储桶策略来控制从特定的 Amazon VPC 终端节点或特定 VPCs终端节点访问存储桶。如果您启动了标注作业，而输入数据位于 Amazon S3 存储桶中，且该存储桶仅限 VPC 中的用户使用，那么您可以添加一个存储桶策略，同时授予 Ground Truth 端点访问存储桶的权限。要了解更多信息，请参阅[允许 Ground Truth 访问受 VPC 限制的 Amazon S3 存储库](#sms-vpc-permissions-s3)。
+ 您可以在 VPC 中启动[自动数据标注作业](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-automated-labeling.html)。您可以使用 VPC 配置来指定 VPC 子网和安全组。 SageMaker AI 使用此配置在您的 VPC 中启动用于自动数据标签的训练和推理作业。要了解更多信息，请参阅[在 VPC 中创建自动数据标注作业](#sms-vpc-permissions-automated-labeling)。

您可以通过以下任何一种方式使用这些选项。
+ 您可以使用这两种方法，使用受 VPC 保护并启用了自动数据标注功能的 Amazon S3 存储桶启动标注作业。
+ 您可以使用受 VPC 保护的存储桶，通过任何[内置任务类型](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-task-types.html)启动标注作业。
+ 您可以使用受 VPC 保护的存储桶启动[自定义标注工作流](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-custom-templates.html)。Ground Truth 使用 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/endpoint-services-overview.html) 端点与注释前和注释后 Lambda 函数进行交互。

在 Amazon VPC 中创建标注作业之前，我们建议您查看[在 VPC 中运行 Ground Truth 标注作业的先决条件](#sms-vpc-gt-prereq)。

## 在 VPC 中运行 Ground Truth 标注作业的先决条件
<a name="sms-vpc-gt-prereq"></a>

在 Amazon VPC 中创建 Ground Truth 标注作业之前，请查看以下先决条件。
+ 如果您是 Ground Truth 的新用户，请查看[入门](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-getting-started.html)以了解如何创建标注作业。
+ 如果输入数据位于受 VPC 保护的 Amazon S3 存储桶中，则工作人员必须从 VPC 访问工作人员门户。基于 VPC 的标注作业需要使用私人工作团队。要了解有关创建私有工作团队的更多信息，请参阅[使用私有人力](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-workforce-private.html)。
+ 以下是在 VPC 中启动标注作业的特定先决条件。
  + 使用[创建 Amazon S3 VPC 端点](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html#train-vpc-s3)中的说明。自动数据标注工作流中使用的训练和推理容器使用此端点与 Amazon S3 中的存储桶进行通信。
  + 要了解有关此功能的更多信息，请查看[自动数据标注](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-automated-labeling.html)。请注意，以下[内置任务类型](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-task-types.html)支持自动数据标注：[图像分类（单标签）](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-image-classification.html)、[图像语义分割](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-semantic-segmentation.html)、[边界框](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-bounding-box.html)和[文本分类（单标签）](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-text-classification.html)。流式标注作业不支持自动数据标注。
+ 查看 [Ground Truth 安全性和权限](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-security-general.html)部分，确保您已满足以下条件。
  + 创建标注作业的用户拥有所有必要的权限
  + 您已创建具有所需权限的 IAM 执行角色。如果您的使用案例不需要经过微调的权限，我们建议您使用[授予开始使用 Ground Truth 的一般权限](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-security-permission.html#sms-security-permissions-get-started)中所述的 IAM 托管策略。
  + 允许您的 VPC 访问 `sagemaker-labeling-data-region` 和 `sm-bxcb-region-saved-task-states` S3 存储桶。这些是系统拥有的区域化 S3 存储桶，当工作人员处理任务时，可以从工作人员门户访问这些存储桶。我们使用这些存储桶与系统托管的数据进行交互。

## 允许 Ground Truth 访问受 VPC 限制的 Amazon S3 存储库
<a name="sms-vpc-permissions-s3"></a>

以下各节将详细介绍 Ground Truth 使用 Amazon S3 存储桶启动标注作业所需的权限，这些存储桶的访问权限仅限于您的 VPC 和 VPC 端点。要了解如何限制 VPC 对 Amazon S3 存储桶的访问，请参阅《Amazon Simple Storage Service 用户指南》指南中的[使用存储桶策略控制 VPC 端点的访问](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)。要了解如何将策略添加到 S3 存储桶，请参阅[使用 Amazon S3 控制台添加存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)。

**注意**  
修改现有存储桶上的策略会导致 `IN_PROGRESS` Ground Truth 作业失败。我们建议您使用新的存储桶启动新作业。如果您想继续使用同一个存储桶，可以执行以下操作之一。  
等待 `IN_PROGRESS` 作业完成。
使用控制台或 AWS CLI终止作业。

您可以使用 [AWS PrivateLink](https://aws.amazon.com/privatelink/) 端点限制 VPC 中的用户访问 Amazon S3 存储桶。例如，以下 S3 存储桶策略只允许从 `<bucket-name>` 和端点 `<vpc>` 访问特定存储桶 `<vpc-endpoint>`。修改此策略时，必须将全部*red-italized text*替换为您的资源和规格。

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

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Policy1415115909152",
    "Statement": [
        {
            "Sid": "AccessToSpecificVPCEOnly",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Deny",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:sourceVpce": [
                        "vpce-12345678",
                        "vpce-12345678901234567"
                    ]
                }
            }
        }
    ]
}
```

------

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

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

您可以通过在存储桶策略中添加 Ground Truth 端点来做到这一点，就像前面提到的那样。下表包括每个 AWS 区域的 Ground Truth 服务终端节点。将您用于运行标注作业的同一 [AWS 区域](https://docs.aws.amazon.com/general/latest/gr/rande.html)的端点添加到存储桶策略中。


****  

| 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 | 

例如，以下策略限制对以下项执行 `GetObject` 和 `PutObject` 操作：
+ 向 VPC (`<vpc>`) 中的用户提供的 Amazon S3 存储桶
+ VPC 端点 (`<vpc-endpoint>`)
+ Ground Truth 服务端点 (`<ground-truth-endpoint>`)

------
#### [ JSON ]

****  

```
{
    "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": {
              "StringNotEquals": {
                "aws:SourceVpc": "vpc-12345678",
                "aws:sourceVpce": [
                  "vpce-12345678",
                  "vpce-12345678"
                ] 
             }
           }
        }
    ]
}
```

------

如果您希望用户有权使用 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>*

------
#### [ JSON ]

****  

```
{
    "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": {
                "StringNotEquals": {
                    "aws:SourceVpc": "vpc-12345678",
                    "aws:PrincipalArn": "arn:aws:iam::111122223333:role/role-name"
                },
                "StringNotEquals": {
                    "aws:sourceVpce": [
                        "vpce-12345678",
                        "vpce-12345678"
                    ]
                }
            }
        }
    ]
}
```

------

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

授予 Ground Truth 访问 Amazon S3 存储桶的权限后，可以使用[创建标注作业](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-create-labeling-job.html)中的任一主题来启动标注作业。为输入和输出数据存储桶指定受 VPC 限制的 Amazon S3 存储桶。

## 在 VPC 中创建自动数据标注作业
<a name="sms-vpc-permissions-automated-labeling"></a>

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

**重要**  
在使用 VPC 配置启动自动数据标注作业之前，请确保已使用要用于标注作业的 VPC 创建了 Amazon S3 VPC 端点。要了解如何操作，请参阅[创建 Amazon S3 VPC 端点](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html#train-vpc-s3)。  
此外，如果使用受 VPC 限制的 Amazon S3 存储桶创建自动数据标注作业，则必须按照[允许 Ground Truth 访问受 VPC 限制的 Amazon S3 存储库](#sms-vpc-permissions-s3)中的说明授予 Ground Truth 访问存储桶的权限。

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

**将 VPC 配置添加到自动数据标注作业（控制台）：**

1. 按照[创建标注作业（控制台）](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-create-labeling-job-console.html)中的说明，完成该过程中的每个步骤，直至步骤 15。

1. 在**工作人员**部分中，选中**启用自动数据标注**旁边的复选框。

1. 选择箭头，最大化控制台的 **VPC 配置**部分。

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

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

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

1. 完成[创建标注作业（控制台）](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-create-labeling-job-console.html)过程的所有剩余步骤。

**将 VPC 配置添加到自动数据标注作业 (API)：**  
要使用 Ground Truth API 操作 `CreateLabelingJob` 配置标注作业，请按照[创建自动数据标注作业 (API)](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-automated-labeling.html#sms-create-automated-labeling-api) 中的说明配置您的请求。除了本文档中描述的参数外，还必须在 `LabelingJobResourceConfig` 中包含一个 `VpcConfig` 参数，以便使用以下架构指定一个或多个子网和安全组。

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

以下是一个 [AWS Python SDK (Boto3) 请求](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_labeling_job)示例，该请求使用私有人力在美国东部（弗吉尼亚州北部）区域中创建自动数据标注作业。将所有内容*red-italicized text*替换为您的标签作业资源和规格。要了解有关该`CreateLabelingJob`操作的更多信息，请参阅[创建标注任务 (API)](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-create-labeling-job-api.html) 教程和 [CreateLabelingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateLabelingJob.html)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"
        },
    ]
)
```