本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
防止跨服务混淆代理
在 AWS 中,以下情况可能会发生跨服务模拟:一项服务(调用服务)调用另一项服务(被调用服务)。尽管调用服务不应具有适当的权限,但仍可操纵以对另一个客户的资源进行操作,这会导致代理混淆。
为了防止这种情况,AWS 提供可帮助您保护所有服务的服务委托人数据的工具,这些服务委托人有权限访问账户中的资源。
我们建议在资源策略中使用 aws:SourceArn
和 aws: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:*
为了防止出现代理混淆的问题,请执行以下步骤:
-
在 IAM 控制台的导航窗格中,选择角色选项。控制台将显示您当前账户的角色。
-
选择要修改的角色的名称。您修改的角色应具有 AmazonRekognitionServiceRole 权限策略。选择信任关系选项卡。
-
选择编辑信任策略。
-
在编辑信任策略页面上,将默认 JSON 策略替换为使用
aws:SourceArn
和aws:SourceAccount
全局条件上下文密钥中的一个或两个的策略。请参阅下面的示例策略。 -
选择更新策略。
以下示例信任策略演示如何使用 Amazon Rekognition 中的 aws:SourceArn
和 aws:SourceAccount
全局条件上下文键来防范混淆代理问题。
如果您正在处理存储视频和流视频,则可以在您的 IAM 角色中使用如下所示的策略:
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"rekognition.amazonaws.com", "AWS":"arn:User ARN" }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"Account ID" }, "StringLike":{ "aws:SourceArn":"arn:aws:rekognition:region:111122223333:streamprocessor/*" } } } ] }
如果您只处理存储视频,则可以在您的 IAM 角色中使用如下所示的策略(请注意,您不必包含指定 streamprocessor
的 StringLike
参数):
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"rekognition.amazonaws.com", "AWS":"arn:User ARN" }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"Account ID" } } } ] }