

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

# 设置 Amazon Rekognition Custom Labels
<a name="setting-up"></a>

以下说明介绍了如何设置 Amazon Rekognition Custom Labels 控制台和 SDK。

请注意，您可通过以下浏览器使用 Amazon Rekognition Custom Labels 控制台：
+ **Chrome**：版本 21 或更高版本
+ **Firefox**：版本 27 或更高版本
+ **Microsoft Edge**：版本 88 或更高版本
+ **Safari**：版本 7 或更高版本 此外，使用 Safari 时，无法通过 Amazon Rekognition Custom Labels 控制台绘制边界框。有关更多信息，请参阅 [使用边界框标注物体](md-localize-objects.md)。

首次使用 Amazon Rekognition Custom Labels 前，请完成以下任务：

**Topics**
+ [第 1 步：创建 AWS 账户](su-account.md)
+ [步骤 2：设置 Amazon Rekognition Custom Labels 控制台权限](su-console-policy.md)
+ [步骤 3：创建控制台存储桶](su-create-console-bucket.md)
+ [步骤 4：设置 AWS CLI 和 AWS SDKs](su-awscli-sdk.md)
+ [步骤 5：（可选）加密训练文件](su-encrypt-bucket.md)
+ [步骤 6：（可选）将先前的数据集与新项目关联](su-associate-prior-dataset.md)

# 第 1 步：创建 AWS 账户
<a name="su-account"></a>

在此步骤中，您将创建一个 AWS 帐户，创建管理用户，并了解如何授予对 AWS SDK 的编程访问权限。

**Topics**
+ [注册获取 AWS 账户](#sign-up-for-aws)
+ [创建具有管理访问权限的用户](#create-an-admin)
+ [以编程方式访问](#su-sdk-programmatic-access)

## 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**要注册 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

## 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

## 以编程方式访问
<a name="su-sdk-programmatic-access"></a>

如果用户想在 AWS 外部进行交互，则需要编程访问权限 AWS 管理控制台。授予编程访问权限的方式取决于正在访问的用户类型 AWS。

要向用户授予编程式访问权限，请选择以下选项之一。


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证，签署对 AWS CLI AWS SDKs、或的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/rekognition/latest/customlabels-dg/su-account.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/rekognition/latest/customlabels-dg/su-account.html)  | 
| IAM | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 | 按照 IAM 用户指南中的将[临时证书与 AWS 资源配合使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/rekognition/latest/customlabels-dg/su-account.html)  | 

# 步骤 2：设置 Amazon Rekognition Custom Labels 控制台权限
<a name="su-console-policy"></a>

要使用 Amazon Rekognition 控制台，您必须具有相应的权限。如果想将训练文件存储在[控制台存储桶](su-create-console-bucket.md)以外的存储桶中，则需要额外的权限。

**Topics**
+ [允许访问控制台](#su-console-access)
+ [访问外部 Amazon S3 存储桶](#su-external-buckets)
+ [分配权限](#su-assign-permissions)

## 允许访问控制台
<a name="su-console-access"></a>

要使用亚马逊 Rekognition 自定义标签控制台，您需要以下涵盖亚马逊 S3、A SageMaker I Ground Truth 和亚马逊 Rekognition 自定义标签的 IAM 政策。有关分配权限的信息，请参阅[分配权限](#su-assign-permissions)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        },
        {
            "Sid": "s3Policies",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:CreateBucket",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectTagging",
                "s3:GetBucketVersioning",
                "s3:GetObjectVersionTagging",
                "s3:PutBucketCORS",
                "s3:PutLifecycleConfiguration",
                "s3:PutBucketPolicy",
                "s3:PutObject",
                "s3:PutObjectTagging",
                "s3:PutBucketVersioning",
                "s3:PutObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::custom-labels-console-*"

            ]
        },
        {
            "Sid": "rekognitionPolicies",
            "Effect": "Allow",
            "Action": [
                "rekognition:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "groundTruthPolicies",
            "Effect": "Allow",
            "Action": [
                "groundtruthlabeling:*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 访问外部 Amazon S3 存储桶
<a name="su-external-buckets"></a>

当你首次在新 AWS 区域打开亚马逊 Rekognition 自定义标签控制台时，Amazon Rekognition 自定义标签会创建一个用于存储项目文件的存储桶（控制台存储桶）。或者，您可以使用自己的 Amazon S3 存储桶（外部存储桶）将图像或清单文件上传到控制台。要使用外部存储桶，请将以下策略块添加到先前的策略中。将 `amzn-s3-demo-bucket` 替换为存储桶名称。

```
        {
            "Sid": "s3ExternalBucketPolicies",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectTagging",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*"
            ]
        }
```

## 分配权限
<a name="su-assign-permissions"></a>

要提供访问权限，请为您的用户、组或角色添加权限：
+ 中的用户和群组 AWS IAM Identity Center：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

# 步骤 3：创建控制台存储桶
<a name="su-create-console-bucket"></a>

您使用 Amazon Rekognition Custom Labels 项目来创建和管理您的模型。当你首次在新 AWS 区域打开 Amazon Rekognition 自定义标签控制台时，Amazon Rekognition 自定义标签会创建一个 Amazon S3 存储桶（控制台存储桶）来存储您的项目。您应该在某个地方记下控制台存储桶名称，以便日后可以参考，因为您可能需要在 AWS SDK 操作或控制台任务（例如创建数据集）中使用存储桶名称。

存储桶名称的格式为 `custom-labels-console`-*<region>*-*<random value>*。该随机值可确保存储桶名称不会重复。

**创建控制台存储桶**

1. 请确保用户具有正确的权限。有关更多信息，请参阅 [允许访问控制台](su-console-policy.md#su-console-access)。

1. 登录 AWS 管理控制台 并打开亚马逊 Rekognition 控制台，网址为。[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)

1. 选择**开始**。

1. 如果这是您首次在当前 AWS 区域中打开控制台，请在**首次设置**对话框中执行以下操作：

   1. 记下所显示的 Amazon S3 存储桶的名称。稍后您将需要此信息。

   1. 选择**创建 S3 存储桶**，让 Amazon Rekognition Custom Labels 为您创建一个 Amazon S3 存储桶（控制台存储桶）。

1. 关闭浏览器窗口。

# 步骤 4：设置 AWS CLI 和 AWS SDKs
<a name="su-awscli-sdk"></a>

您可以将 Amazon Rekognition 自定义标签 AWS Command Line Interface 与 () 和。AWS CLI AWS SDKs如果需要从终端运行 Amazon Rekognition Custom Labels 操作，请安装 AWS CLI。如果您正在创建应用程序，请下载与您正在使用的编程语言对应的 AWS SDK。

**Topics**
+ [安装软件 AWS 开发工具包](#sdk-install-sdk)
+ [授予编程式访问权限](su-sdk-programmatic-access.md)
+ [设置 SDK 权限](su-sdk-permissions.md)
+ [调用 Amazon Rekognition Custom Labels 操作](su-sdk-list-projects.md)

## 安装软件 AWS 开发工具包
<a name="sdk-install-sdk"></a>

按照以下步骤下载和配置 AWS SDKs。

**要设置 AWS CLI 和 AWS SDKs**
+ 下载[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)并安装您要使用的和。 AWS SDKs 本指南提供了 AWS CLI、[Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html) 和 [Python](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation) 的示例。有关安装的信息 AWS SDKs，请参阅 [Amazon Web Services 工具](https://aws.amazon.com/tools/)。

# 授予编程式访问权限
<a name="su-sdk-programmatic-access"></a>

您可以在本地计算机或其他 AWS 环境（例如 Amazon Elastic Compute Cloud 实例）上运行本指南中的 AWS CLI 和代码示例。要运行这些示例，您需要授予对示例使用的 AWS SDK 操作的访问权限。

**Topics**
+ [在本地计算机上运行代码](#su-sdk-programmatic-access-general)
+ [在 AWS 环境中运行代码](#su-sdk-aws-environments)

## 在本地计算机上运行代码
<a name="su-sdk-programmatic-access-general"></a>

要在本地计算机上运行代码，我们建议您使用短期凭证向用户授予对 AWS SDK 操作的访问权限。有关在本地计算机上运行 AWS CLI 和代码示例的具体信息，请参阅[在本地计算机上使用配置文件](#su-sdk-programmatic-access-customlabels-examples)。

如果用户想在 AWS 外部进行交互，则需要编程访问权限 AWS 管理控制台。授予编程访问权限的方式取决于正在访问的用户类型 AWS。

要向用户授予编程式访问权限，请选择以下选项之一。


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证，签署对 AWS CLI AWS SDKs、或的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/rekognition/latest/customlabels-dg/su-sdk-programmatic-access.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/rekognition/latest/customlabels-dg/su-sdk-programmatic-access.html)  | 
| IAM | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 | 按照 IAM 用户指南中的将[临时证书与 AWS 资源配合使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/rekognition/latest/customlabels-dg/su-sdk-programmatic-access.html)  | 

### 在本地计算机上使用配置文件
<a name="su-sdk-programmatic-access-customlabels-examples"></a>

您可以使用您在中创建 AWS CLI 的短期证书运行本指南中的和代码示例[在本地计算机上运行代码](#su-sdk-programmatic-access-general)。为了获取凭证和其他设置信息，这些示例使用名为 `custom-labels-access` 的配置文件。例如：

```
session = boto3.Session(profile_name='custom-labels-access')
rekognition_client = session.client("rekognition")
```

个人资料所代表的用户必须有权调用 Amazon Rekognition 自定义标签 SDK 操作 AWS 以及示例所需的其他 SDK 操作。有关更多信息，请参阅 [设置 SDK 权限](su-sdk-permissions.md)。若要分配权限，请参阅 [设置 SDK 权限](su-sdk-permissions.md)。

要创建适用于 AWS CLI 和代码示例的配置文件，请选择以下选项之一。确保您创建的配置文件的名称为 `custom-labels-access`。
+ 由 IAM 管理的用户 — 按照[切换到 IAM 角色 (AWS CLI)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html) 部分的说明进行操作。
+ 员工身份（由管理的用户 AWS IAM Identity Center）— 按照[配置 AWS CLI 中的说明进行操作 AWS IAM Identity Center](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html)。对于这些代码示例，我们建议使用集成式开发环境 (IDE)，该环境支持 AWS Toolkit，可通过 IAM Identity Center 实现身份验证。有关 Java 示例，请参阅[使用 Java 开始构建](https://aws.amazon.com/developer/language/java/)。有关 Python 示例，请参阅[使用 Python 开始构建](https://aws.amazon.com/developer/tools/#IDE_and_IDE_Toolkits)。有关更多信息，请参阅 [IAM Identity Center 凭证](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html)。

**注意**  
您可以使用代码获取短期凭证。有关更多信息，请参阅[切换到 IAM 角色 (AWS API)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_use_switch-role-api.html)。对于 IAM Identity Center，请按照[获取用于 CLI 访问的 IAM 角色凭证](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html)部分的说明操作，获取角色的短期凭证。

## 在 AWS 环境中运行代码
<a name="su-sdk-aws-environments"></a>

您不应使用用户凭据在 AWS 环境中签署 AWS SDK 调用，例如在 AWS Lambda 函数中运行的生产代码。相反，您应该配置一个角色来定义代码所需的权限。然后，将该角色附加到运行代码的环境。关于如何附加角色和提供可用的临时凭证，取决于运行代码的环境：
+ AWS Lambda 函数 — 使用 Lambda 在担任 Lambda 函数的执行角色时自动提供给您的函数的临时证书。这些凭证在 Lambda 环境变量中可用。您不需要指定配置文件。有关更多信息，请参阅 [Lambda 执行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。
+ Amazon EC2 — 使用 Amazon EC2 实例元数据端点凭证提供程序。该提供程序会使用您附加到 Amazon EC2 实例的 Amazon EC2 *实例配置文件*，自动为您生成和刷新凭证。有关更多信息，请参阅[使用 IAM 角色为 Amazon EC2 实例上运行的应用程序授予权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)。
+ Amazon Elastic Container Service — 使用 Container 凭证提供程序。Amazon ECS 会向元数据端点发送和刷新凭证。您指定的*任务 IAM 角色*会提供一项策略，用于管理您的应用程序所使用的凭证。有关更多信息，请参阅[与 AWS 服务交互](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。

有关凭证提供程序的更多信息，请参阅[标准化凭证提供程序](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)。

# 设置 SDK 权限
<a name="su-sdk-permissions"></a>

要使用 Amazon Rekognition Custom Labels SDK 操作，您需要具有 Amazon Rekognition Custom Labels API 和用于模型训练的 Amazon S3 存储桶的访问权限。

**Topics**
+ [授予 SDK 操作权限](#su-grant-sdk-permissions)
+ [有关使用 AWS SDK 的政策更新](#su-sdk-policy-update)
+ [分配权限](#su-sdk-assign-permissions)

## 授予 SDK 操作权限
<a name="su-grant-sdk-permissions"></a>

建议仅授予执行任务所必需的权限（最低权限）。例如，要拨打电话 [DetectCustomLabels](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectCustomLabels.html)，您需要获得执行权限`rekognition:DetectCustomLabels`。要查找操作的权限，请查看 [API 参考](https://docs.aws.amazon.com/rekognition/latest/APIReference/Welcome.html)。

刚开始使用应用程序时，您可能不知道具体需要哪些权限，因此可以从广泛权限入手。 AWS 托管式策略可以提供一些权限来帮助您入门。您可以使用`AmazonRekognitionCustomLabelsFullAccess` AWS 托管策略来完全访问亚马逊 Rekognition 自定义标签 API。有关更多信息，请参阅 [AWS 托管策略： AmazonRekognitionCustomLabelsFullAccess](https://docs.aws.amazon.com/rekognition/latest/dg/security-iam-awsmanpol.html#security-iam-awsmanpol-custom-labels-full-access)。如果知道应用程序所需的权限，则可定义特定于您的使用场景的客户管理型策略，从而进一步减少权限。有关更多信息，请参阅[客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)。

若要分配权限，请参阅[分配权限](#su-sdk-assign-permissions)。

## 有关使用 AWS SDK 的政策更新
<a name="su-sdk-policy-update"></a>

要将 AWS 软件开发工具包与最新版本的 Amazon Rekognition 自定义标签一起使用，您无需再向亚马逊 Rekognition 自定义标签授予访问包含您的训练和测试图像的 Amazon S3 存储桶的权限。如果之前添加了权限，也不需要将其移除。您可以选择从主体的服务为 `rekognition.amazonaws.com` 的存储桶中移除任何策略。例如：

```
"Principal": {
    "Service": "rekognition.amazonaws.com"
}
```

有关更多信息，请参阅[使用存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)。

## 分配权限
<a name="su-sdk-assign-permissions"></a>

要提供访问权限，请为您的用户、组或角色添加权限：
+ 中的用户和群组 AWS IAM Identity Center：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

# 调用 Amazon Rekognition Custom Labels 操作
<a name="su-sdk-list-projects"></a>

运行以下代码，确认您可以调用 Amazon Rekognition Custom Labels API。该代码列出了您 AWS 账户中当前 AWS 区域中的项目。如果您之前未创建项目，则响应为空，但确实会确认您可以调用 `DescribeProjects` 操作。

通常，调用示例函数需要 AWS SDK Rekognition 客户端和任何其他所需的参数。AWS SDK 客户端会在主函数中声明。

如果该代码失败，请检查所用的用户是否具有正确的权限。另请检查您用作亚马逊 Rekognition 自定义标签的 AWS 地区并非在所有地区都可用。 AWS 

**调用 Amazon Rekognition Custom Labels 操作**

1. 如果您尚未这样做，请安装并配置 AWS CLI 和 AWS SDKs。有关更多信息，请参阅 [步骤 4：设置 AWS CLI 和 AWS SDKs](su-awscli-sdk.md)。

1. 使用以下示例代码查看您的项目。

------
#### [ CLI ]

   使用 `describe-projects` 命令列出您账户中的项目。

   ```
   aws rekognition describe-projects \
   --profile custom-labels-access
   ```

------
#### [ Python ]

   ```
   # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
   # SPDX-License-Identifier: Apache-2.0
   
   """
   This example shows how to describe your Amazon Rekognition Custom Labels projects.
   If you haven't previously created a project in the current AWS Region,
   the response is an empty list, but does confirm that you can call an
   Amazon Rekognition Custom Labels operation.
   """
   from botocore.exceptions import ClientError
   import boto3
   
   def describe_projects(rekognition_client):
       """
       Lists information about the projects that are in in your AWS account
       and in the current AWS Region.
   
       : param rekognition_client: A Boto3 Rekognition client.
       """
       try:
           response = rekognition_client.describe_projects()
           for project in response["ProjectDescriptions"]:
               print("Status: " + project["Status"])
               print("ARN: " + project["ProjectArn"])
               print()
           print("Done!")
       except ClientError as err:
           print(f"Couldn't describe projects. \n{err}")
           raise
   
   
   def main():
       """
       Entrypoint for script.
       """
   
       session = boto3.Session(profile_name='custom-labels-access')
       rekognition_client = session.client("rekognition")
   
       describe_projects(rekognition_client)
   
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ Java V2 ]

   ```
   /*
      Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
   */
   
   package com.example.rekognition;
   
   import java.util.ArrayList;
   import java.util.List;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   import software.amazon.awssdk.regions.Region;
   import software.amazon.awssdk.services.rekognition.RekognitionClient;
   import software.amazon.awssdk.services.rekognition.model.DatasetMetadata;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectsRequest;
   import software.amazon.awssdk.services.rekognition.model.DescribeProjectsResponse;
   import software.amazon.awssdk.services.rekognition.model.ProjectDescription;
   import software.amazon.awssdk.services.rekognition.model.RekognitionException;
   
   public class Hello {
   
       public static final Logger logger = Logger.getLogger(Hello.class.getName());
   
       public static void describeMyProjects(RekognitionClient rekClient) {
   
           DescribeProjectsRequest descProjects = null;
   
           // If a single project name is supplied, build projectNames argument
   
           List<String> projectNames = new ArrayList<String>();
   
   
           descProjects = DescribeProjectsRequest.builder().build();
   
           // Display useful information for each project.
   
           DescribeProjectsResponse resp = rekClient.describeProjects(descProjects);
   
           for (ProjectDescription projectDescription : resp.projectDescriptions()) {
   
               System.out.println("ARN: " + projectDescription.projectArn());
               System.out.println("Status: " + projectDescription.statusAsString());
               if (projectDescription.hasDatasets()) {
                   for (DatasetMetadata datasetDescription : projectDescription.datasets()) {
                       System.out.println("\tdataset Type: " + datasetDescription.datasetTypeAsString());
                       System.out.println("\tdataset ARN: " + datasetDescription.datasetArn());
                       System.out.println("\tdataset Status: " + datasetDescription.statusAsString());
                   }
               }
               System.out.println();
           }
   
       }
   
       public static void main(String[] args) {
   
           try {
   
               // Get the Rekognition client
               RekognitionClient rekClient = RekognitionClient.builder()
                   .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access"))
                   .region(Region.US_WEST_2)
                   .build();
               
               // Describe projects
   
               describeMyProjects(rekClient);
   
               rekClient.close();
   
           } catch (RekognitionException rekError) {
               logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage());
               System.exit(1);
           }
   
       }
   
   }
   ```

------

# 步骤 5：（可选）加密训练文件
<a name="su-encrypt-bucket"></a>

您可以选择以下选项之一来加密控制台存储桶或外部 Amazon S3 存储桶中的 Amazon Rekognition Custom Labels 清单文件和图像文件。
+ 使用 Amazon S3 密钥 (SSE-S3)。
+ 用你的 AWS KMS key.
**注意**  
调用 [IAM 主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal%23intro-structure-principal)需要解密文件的权限。有关更多信息，请参阅 [解密使用加密的文件 AWS Key Management Service](#su-kms-encryption)。

有关如何加密 Amazon S3 存储桶的信息，请参阅[为 Amazon S3 存储桶设置默认服务器端加密行为](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)。

## 解密使用加密的文件 AWS Key Management Service
<a name="su-kms-encryption"></a>

如果您使用 AWS Key Management Service (KMS) 加密您的 Amazon Rekognition 自定义标签清单文件和图像文件，请将调用 Amazon Rekognition 自定义标签的 IAM 委托人添加到 KMS 密钥的密钥策略中。这样做可以让 Amazon Rekognition Custom Labels 在训练之前解密清单和图像文件。有关更多信息，请参阅[我的 Amazon S3 存储桶使用自定义 AWS KMS 密钥进行默认加密。如何允许用户从存储桶下载内容以及上传内容到存储桶？](https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-access-default-encryption/)

IAM 主体需要对 KMS 密钥具有以下权限。
+ kms: GenerateDataKey
+ kms:Decrypt

有关更多信息，请参阅[使用存储在 AWS Key Management Service 中的 KMS 密钥通过服务器端加密 (SSE-KMS) 保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。

## 对复制的训练和测试图像进行加密
<a name="w2aab8c21c11"></a>

为了训练您的模型，Amazon Rekognition Custom Labels 会复制您的源训练图像和测试图像。默认情况下，复制的图像使用 AWS 拥有和管理的密钥进行静态加密。您也可以选择使用自己的 AWS KMS key。如果使用自己的 KMS 密钥，则需要对该 KMS 密钥具有以下权限。
+ kms: CreateGrant
+ kms: DescribeKey

在使用控制台训练模型或者在调用 `CreateProjectVersion` 操作时，可以选择指定 KMS 密钥。所使用的 KMS 密钥不必与用于加密 Amazon S3 存储桶中的清单文件和图像文件的 KMS 密钥相同。有关更多信息，请参阅 [步骤 5：（可选）加密训练文件](#su-encrypt-bucket)。

有关更多信息，请参阅 [AWS Key Management Service 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)。源图像不受影响。

有关训练模型的信息，请参阅[训练 Amazon Rekognition Custom Labels 模型](training-model.md)。

# 步骤 6：（可选）将先前的数据集与新项目关联
<a name="su-associate-prior-dataset"></a>

Amazon Rekognition Custom Labels 现在可以通过项目管理数据集。您创建的早期（先前）数据集是只读的，必须先与项目关联才能使用。通过控制台打开项目的详细信息页面时，我们会自动将训练项目最新版本模型的数据集与项目关联起来。如果您使用的是 AWS SDK，则不会自动将数据集与项目关联。

未关联的先前数据集从未用于训练过模型，或者曾用于训练过模型的先前版本。“之前的数据集”页面会显示所有关联和未关联的数据集。

要使用未关联的先前数据集，请在“之前的数据集”页面上创建一个新项目。该数据集将成为该新项目的训练数据集。您也可以为已关联的数据集创建项目，因为先前的数据集可以有多个关联。

**将先前的数据集与新项目相关联**

1. 打开亚马逊 Rekognition 控制台，网址为[https://console.aws.amazon.com/rekognition/](https://console.aws.amazon.com/rekognition/)。

1. 在左侧窗格中，选择**使用自定义标签**。随后将显示 Amazon Rekognition Custom Labels 登录页面。

1. 在左侧导航窗格中，选择**之前的数据集**。

1. 在数据集视图中，选择一个要与项目关联的先前数据集。

1. 选择**使用数据集创建项目**。

1. 在**创建项目**页面上，于**项目名称**中输入新项目的名称。

1. 选择**创建项目**，创建项目。该项目可能需要一段时间才能创建。

1. 保存项目。有关更多信息，请参阅 [了解 Amazon Rekognition Custom Labels](understanding-custom-labels.md)。

## 使用先前的数据集作为测试数据集
<a name="su-prior-dataset-as-test-dataset"></a>

要将先前数据集作为现有项目的测试数据集，需要先将该先前数据集与新项目相关联。然后，再将该新项目的训练数据集复制到该现有项目的测试数据集中。

**使用先前的数据集作为测试数据集**

1. 按照[步骤 6：（可选）将先前的数据集与新项目关联](#su-associate-prior-dataset)中的说明将先前的数据集与新项目相关联。

1. 使用从该新项目中复制的训练数据集，在现有项目中创建测试数据集。有关更多信息，请参阅 [复制现有数据集的内容](md-create-dataset-existing-dataset.md)。

1. 按照[删除 Amazon Rekognition Custom Labels 项目（控制台）](mp-delete-project.md#mp-delete-project-console)中的说明将该新项目删除。

或者，也可以使用先前数据集的清单文件来创建测试数据集。有关更多信息，请参阅 [创建清单文件](md-create-manifest-file.md)。