

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

# 步骤 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);
           }
   
       }
   
   }
   ```

------