防止跨服务混淆代理 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

防止跨服务混淆代理

混淆代理问题是一个安全性问题,即不具有某操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。

在 Amazon 中,跨服务模拟可能会导致混淆代理问题。一个服务(呼叫服务)调用另一项服务(所谓的服务)时,可能会发生跨服务模拟。可以操纵调用服务,使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。

为防止这种情况,Amazon 提供可帮助您保护所有服务的数据的工具,而这些服务中的服务主体有权限访问账户中的资源。我们建议使用 Amazon EC2 Auto Scaling 服务角色信任策略中的 aws:SourceArnaws:SourceAccount 全局条件上下文键。这些密钥限制了 Amazon EC2 Auto Scaling 为资源提供另一项服务的权限。

SourceArnSourceAccount 字段的值是在 Amazon EC2 Auto Scaling 使用 Amazon Security Token Service (Amazon STS) 代表您担任角色时设置的。

要使用 aws:SourceArnaws:SourceAccount 全局条件键,将值设置为 Amazon 资源名称(ARN)或 Amazon EC2 Auto Scaling 存储的资源账户。请尽可能使用更具体的 aws:SourceArn。将值设置为 ARN 或带通配符 (*) 的 ARN 模式,用于 ARN 的未知部分。如果您不知道资源的 ARN,请改用 aws:SourceAccount

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

示例:使用 aws:SourceArnaws:SourceAccount 条件键

由一项服务担任、代表您执行操作的角色称为服务角色。如果您希望创建会将通知发送到除 Amazon EventBridge 以外任何地方的生命周期挂钩,您必须创建一个服务角色,以允许 Amazon EC2 Auto Scaling 代表您向 Amazon SNS 主题或 Amazon SQS 队列发送通知。如果您只希望将一个自动扩缩组与跨服务访问相关联,则可以指定服务角色的信任策略,如下所示。

此示例信任策略使用条件语句,将服务角色的 AssumeRole 功能限制为只能执行影响指定账户中指定自动扩缩组的操作。aws:SourceArnaws:SourceAccount 条件会得到独立评估。使用服务角色的任何请求都必须满足这两个条件。

在使用此策略之前,请将区域、账户 ID、UUID 和组名称替换为您账户中的有效值。

JSON
{ "Version":"2012-10-17", "Statement": { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "autoscaling.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:autoscaling:us-east-1:111122223333:autoScalingGroup:uuid:autoScalingGroupName/my-asg" }, "StringEquals": { "aws:SourceAccount": "111122223333" } } } }

在上述示例中:

  • Principal 元素指定服务的服务主体 (autoscaling.amazonaws.com)。

  • Action 元素指定 sts:AssumeRole 操作。

  • Condition 元素指定 aws:SourceArnaws:SourceAccount 全局条件键。源的 ARN 包含账户 ID,因此不必将 aws:SourceAccountaws:SourceArn 结合使用。

其他信息

有关更多信息,请参阅《IAM 用户指南》中的 Amazon 全局条件上下文键混淆代理人问题以及更新角色信任策略