

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

# 防止跨服务混淆代理
<a name="cross-service-confused-deputy-prevention"></a>

在中 AWS，当一个服务（调用服务）调用另一个服务（*被**调用的服务*）时，可能会发生跨服务模拟。尽管调用服务不应具有适当的权限，但仍可操纵以对另一个客户的资源进行操作，这会导致代理混淆。

为了防止这种情况，我们 AWS 提供了一些工具，帮助您保护所有服务的数据，这些服务委托人已被授予访问您账户中资源的权限。

我们建议在资源策略中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件上下文键，以限制 Amazon Rekognition 为其他服务提供的资源访问权限。

如果 `aws:SourceArn` 值不包含账户 ID，例如 Amazon S3 存储桶 ARN，您必须使用两个键来限制权限。如果同时使用键和包含账户 ID 的 `aws:SourceArn` 值，则 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的账户在同一策略语句中使用时，必须使用相同的账户 ID。

如果您只希望将一个资源与跨服务访问相关联，请使用。`aws:SourceArn`如果您想允许该账户中的任何资源与跨服务使用操作相关联，请使用。`aws:SourceAccount`

`aws:SourceArn` 的值必须是 Rekognition 使用的资源的 ARN，其指定格式如下：`arn:aws:rekognition:region:account:resource`。

`arn:User ARN` 的值应为将调用视频分析操作的用户（担任角色的用户）的 ARN。

解决代理混淆问题的推荐方法，是将 `aws:SourceArn` 全局条件上下文键与完整资源 ARN 结合使用。

 如果您不了解完整的资源 ARN，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符字符（`*`）的 `aws:SourceArn` 键。例如 `arn:aws:rekognition:*:111122223333:*`。

为了防止出现代理混淆的问题，请执行以下步骤：

1. 在 IAM 控制台的导航窗格中，选择**角色**选项。控制台将显示您当前账户的角色。

1. 选择要修改的角色的名称。您修改的角色应具有**AmazonRekognitionServiceRole**权限策略。选择**信任关系**选项卡。

1. 选择**编辑信任策略**。

1. 在**编辑信任策略**页面上，将默认 JSON 策略替换为使用 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文密钥中的一个或两个的策略。请参阅下面的示例策略。

1. 选择**更新策略**。

以下示例信任策略演示如何使用 Amazon Rekognition 中的 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键来防范混淆代理问题。

如果您正在处理存储视频和流视频，则可以在您的 IAM 角色中使用如下所示的策略：

如果您只处理存储视频，则可以在您的 IAM 角色中使用如下所示的策略（请注意，您不必包含指定 `streamprocessor` 的 `StringLike` 参数）：