防范跨服务混淆代理问题
混淆代理问题是一个安全问题,即没有执行操作权限的实体可能会迫使更具权限的实体执行该操作。在 AWS 中,跨服务模拟可能会导致混淆代理问题。
一个服务(呼叫服务) 调用另一项服务(所谓的服务)时,可能会发生跨服务模拟。可以操纵调用服务来使用其权限,以不应该具有的访问权限对另一个客户的资源进行操作。为防止这种情况,AWS 提供可帮助您保护所有服务数据的工具,而这些服务中的服务主体有权限访问账户中的资源。有关更多信息,请参阅《IAM 用户指南》中的混淆代理人问题。
要限制 Amazon RDS 为其他服务提供对资源的权限,我们建议在资源策略中使用 aws:SourceArn
和 aws: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:SourceArn
和 aws: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:SourceArn
和 aws:SourceAccount
全局条件上下文键的更多策略示例,请参阅以下部分:
-
设置 Amazon S3 存储桶的访问权限(PostgreSQL 导入)
-
设置 Amazon S3 存储桶的访问权限(PostgreSQL 导出)