防范跨服务混淆代理问题 - Amazon Relational Database Service

防范跨服务混淆代理问题

混淆代理问题是一个安全问题,即没有执行操作权限的实体可能会迫使更具权限的实体执行该操作。在 AWS 中,跨服务模拟可能会导致混淆代理问题。

一个服务(呼叫服务) 调用另一项服务(所谓的服务)时,可能会发生跨服务模拟。可以操纵调用服务来使用其权限,以不应该具有的访问权限对另一个客户的资源进行操作。为防止这种情况,AWS 提供可帮助您保护所有服务数据的工具,而这些服务中的服务主体有权限访问账户中的资源。有关更多信息,请参阅《IAM 用户指南》中的混淆代理人问题

要限制 Amazon RDS 为其他服务提供对资源的权限,我们建议在资源策略中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键。

在某些情况下,aws:SourceArn 值不包含账户 ID,例如将 Amazon Resource Name (ARN) 用于 Amazon S3 存储桶时。在这些情况下,请确保使用两个全局条件上下文键来限制权限。在某些情况下,您可以使用两个全局条件上下文键并让 aws:SourceArn 值包含账户 ID。在这些情况下,当 aws:SourceAccount 值和 aws:SourceArn 值中的账户使用相同策略语句时,确保二者使用相同的账户 ID。如果您只希望将一个资源与跨服务访问相关联,请使用 aws:SourceArn。如果您想允许指定 AWS 账户中的任何资源与跨服务使用相关联,请使用 aws:SourceAccount

确保 aws:SourceArn 的值是 Amazon RDS 资源类型的 ARN。有关更多信息,请参阅Amazon RDS 中的 Amazon 资源名称(ARN)

防范混淆代理问题最有效的方法是使用 aws:SourceArn 全局条件上下文键和资源的完整 ARN。在某些情况下,您可能不知道资源的完整 ARN,或者您可能正在指定多个资源。在这些情况下,请将带通配符 (*) 的 aws:SourceArn 全局上下文条件键用于 ARN 的未知部分。示例是 arn:aws:rds:*:123456789012:*

以下示例演示如何使用 Amazon RDS 中的 aws:SourceArnaws:SourceAccount 全局条件上下文键来防范混淆代理问题。

{ "Version": "2012-10-17", "Statement": { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:rds:us-east-1:123456789012:db:mydbinstance" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } }

有关使用 aws:SourceArnaws:SourceAccount 全局条件上下文键的更多策略示例,请参阅以下部分: