

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

# Amazon Rekognition 如何与 IAM 协同工作
<a name="security_iam_service-with-iam"></a>

在使用 IAM 管理对 Amazon Rekognition 的访问权限之前，您应该了解哪些 IAM 功能可用于 Amazon Rekognition。*要全面了解 Amazon Rekognition AWS 和其他服务如何与 IAM 配合使用 [AWS ，请参阅 IAM 用户指南中的与 IAM 配合使用的服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。*

**Topics**
+ [Amazon Rekognition 基于身份的策略](#security_iam_service-with-iam-id-based-policies)
+ [Amazon Rekognition 基于资源的策略](#security_iam_service-with-iam-resource-based-policies)
+ [Amazon Rekognition IAM 角色](#security_iam_service-with-iam-roles)

## Amazon Rekognition 基于身份的策略
<a name="security_iam_service-with-iam-id-based-policies"></a>

通过使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。Amazon Rekognition 支持特定的操作、资源和条件键。要了解在 JSON 策略中使用的所有元素，请参阅《IAM 用户指南》** 中的 [IAM JSON 策略元素参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

### 操作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。

Amazon Rekognition 中的策略操作在操作前面使用以下前缀：`rekognition:`。例如，要授予某人使用 Amazon Rekognition `DetectLabels` API 操作在图像中检测目标、场景或概念的权限，您应将 `rekognition:DetectLabels` 操作纳入其策略中。策略语句必须包含 `Action` 或 `NotAction` 元素。Amazon Rekognition 定义了一组自己的操作，以描述您可以使用该服务执行的任务。

要在单个语句中指定多项操作，请使用逗号将它们隔开，如下所示：

```
"Action": [
      "rekognition:action1",
      "rekognition:action2"
```

您也可以使用通配符 （\*) 指定多个操作。例如，要指定以单词 `Describe` 开头的所有操作，包括以下操作：

```
"Action": "rekognition:Describe*"
```



要查看 Amazon Rekognition 操作的列表，请参阅《IAM 用户指南》**中的 [Amazon Rekognition 定义的操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions)。

### 资源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\*) 指示语句应用于所有资源。

```
"Resource": "*"
```



有关格式的更多信息 ARNs，请参阅 [Amazon 资源名称 (ARNs) 和 AWS 服务命名空间](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

例如，要在语句中指定 `MyCollection` 集合，请使用以下 ARN。

```
"Resource": "arn:aws:rekognition:us-east-1:123456789012:collection/MyCollection"
```

要指定属于特定账户的所有实例，请使用通配符 (\*)：

```
"Resource": "arn:aws:rekognition:us-east-1:123456789012:collection/*"
```

无法对特定资源执行某些 Amazon Rekognition 操作，例如，用于创建资源的操作。在这些情况下，您必须使用通配符（\*)。

```
"Resource": "*"
```

*要查看 Amazon Rekognition 资源类型 ARNs及其列表，请参阅 IAM 用户指南中的[亚马逊 Rekognition 定义](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-resources-for-iam-policies)的资源。*要了解您可以使用哪些操作指定每个资源的 ARN，请参阅 [Amazon Rekognition 定义的操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions)。

### 条件键
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

Amazon Rekognition 不提供任何特定于服务的条件键，但支持使用某些全局条件键。要查看所有 AWS 全局条件键，请参阅 *IAM 用户指南*中的[AWS 全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

## Amazon Rekognition 基于资源的策略
<a name="security_iam_service-with-iam-resource-based-policies"></a>

Amazon Rekognition 支持基于资源的自定义标签模型复制操作策略。有关更多信息，请参阅 [Amazon Rekognition 基于资源的策略示例](https://docs.aws.amazon.com/rekognition/latest/dg/security_iam_resource-based-policy-examples.html)。

其他服务，如 Amazon S3，还支持基于资源的权限策略。例如，您可以将策略附加到 S3 存储桶以管理对该存储桶的访问权限。

要访问存储在 Amazon S3 存储桶中的图像，您必须有权访问 S3 存储桶中的对象。利用此权限，Amazon Rekognition 可从 S3 存储桶下载图像。以下示例策略允许用户对名为 amzn-s3-demo-bucket3 的 S3 存储桶执行 `s3:GetObject` 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket3/*"
            ]
        }
    ]
}
```

------

要使用已启用版本控制的 S3 存储桶，请添加 `s3:GetObjectVersion` 操作，如以下示例所示。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket3/*"
            ]
        }
    ]
}
```

------

## Amazon Rekognition IAM 角色
<a name="security_iam_service-with-iam-roles"></a>

I [AM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)是您的 AWS 账户中具有特定权限的实体。

### 将临时凭证用于 Amazon Rekognition
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

可以使用临时凭证进行联合身份验证登录，分派 IAM 角色或分派跨账户角色。您可以通过调用[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)或之类的 AWS STS API 操作来获取临时安全证书[GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html)。

Amazon Rekognition 支持使用临时凭证。

### 服务关联角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)允许 AWS 服务访问其他服务中的资源以代表您完成操作。服务关联角色显示在 IAM 账户中，并归该服务所有。IAM 管理员可以查看但不能编辑服务关联角色的权限。

Amazon Rekognition 不支持服务相关角色。

### 服务角色
<a name="security_iam_service-with-iam-roles-service"></a>

此功能允许服务代表您担任[服务角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role)。此角色允许服务访问其他服务中的资源以代表您完成操作。服务角色显示在 IAM 账户中，并归该账户所有。这意味着，IAM 管理员可以更改该角色的权限。但是，这样做可能会中断服务的功能。

Amazon Rekognition 支持服务角色。

使用服务角色可能会造成安全问题，即使用 Amazon Rekognition 调用其他服务，并对其不应该访问的资源采取行动。为了保护您的账户安全，您应将 Amazon Rekognition 的访问范围限制为仅限于您正在使用的资源。这可以通过将信任策略附加到您的 IAM 服务角色来完成。有关如何执行此操作的信息，请参阅 [防止跨服务混淆代理](cross-service-confused-deputy-prevention.md)。

### 在 Amazon Rekognition 中选择 IAM 角色
<a name="security_iam_service-with-iam-roles-choose"></a>

在您配置 Amazon Rekognition 来分析存储的视频时，您必须选择一个角色以允许 Amazon Rekognition 代表您访问 Amazon SNS。如果您之前已经创建了一个服务角色或服务相关角色，则 Amazon Rekognition 会为您提供一个角色列表供您选择。有关更多信息，请参阅 [配置 Amazon Rekognition Video](api-video-roles.md)。

### 示例：配置 Amazon Rekognition 以访问 Amazon S3 存储桶中的图像
<a name="security_iam_service-s3-example"></a>

以下示例展示如何配置 Amazon Rekognition 以分析 Amazon S3 存储桶中的图像。如果要使用 Amazon Rekognition 分析 Amazon S3 存储桶中的图像，则必须执行以下操作：

1. 确保你的 IAM user/role （客户端）有权调用相关的 Amazon Rekognition API 操作 DetectLabels（比如等） DetectFaces 

   附加一个基于身份的策略，授予调用所需的 API 操作的相应权限。例如，要向您的角色授予调用 `DetectLabels` 和 `DetectFaces` 的权限，则需要为角色附加如下所示的策略：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "rekognition:DetectLabels",
                   "rekognition:DetectFaces"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Amazon Rekognition 服务需要访问 Amazon S3 存储桶的权限。创建一个 IAM 服务角色，您在调用 API 时需要将其传递给 Amazon Rekognition。确保服务角色：信任 Amazon Rekognition 服务主体，并具有您存储桶的 `s3:GetObject` 权限。

   信任策略可能如下所示：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "rekognition.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

   附加到服务角色的基于身份的策略可能如下所示：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:GetObject",
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

------