AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

AssumeRole、AssumeRoleWithSAML 和 AssumeRoleWithWebIdentity 的权限

所代入的角色的权限策略决定由 AssumeRoleAssumeRoleWithSAMLAssumeRoleWithWebIdentity 返回的临时安全凭证的权限。您可在创建或更新该角色时定义这些权限。

您可以选择将 JSON 策略作为 AssumeRoleAssumeRoleWithSAMLAssumeRoleWithWebIdentity API 调用的参数进行传递。这样,您可以通过为角色设置权限边界来限制角色的临时凭证的权限。您可以在后续的 AWS API 调用中使用角色的临时凭证来访问拥有该角色的账户中的资源。您无法使用传递的策略授予所代入的角色的权限策略不允许的权限。要了解有关 AWS 如何确定角色的有效权限的更多信息,请参阅策略评估逻辑


      PermissionsWhenPassingRoles_Diagram

在做出“允许”或“拒绝”授权决定时,AWS 不会对附加至发出 AssumeRole 原始调用的凭证的策略进行评估。用户将临时放弃其原始权限,以支持代入的角色所分配的权限。对于 AssumeRoleWithSAMLAssumeRoleWithWebIdentity API 操作,不会有任何策略受到评估,因为这些 API 的发起人不是 AWS 身份。

示例:使用 AssumeRole 分配权限

您可以将 AssumeRole API 操作与不同类型的策略结合使用。下面是几个示例。

角色权限策略

在本示例中,调用 AssumeRole API 操作时不带有可选的 Policy 参数。分配给临时凭证的权限取决于所代入角色的权限策略。以下示例权限策略向角色授予权限,允许该角色列出名为 productionapp 的 S3 存储桶中包含的所有对象。它还允许该角色获取、放置和删除该存储桶中的对象。

例 角色权限策略

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws-cn:s3:::productionapp" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws-cn:s3:::productionapp/*" } ] }

作为参数传递的策略

假设您希望允许某用户代入上例中的角色,但希望代入角色的用户只具有获取 productionapp S3 存储桶中的对象和向其中上传对象的权限。您不希望允许他们删除对象。达到这一目的的一种方式是创建一个新角色,并在该角色的权限策略中指定所需的权限。达到这一目的的另一种方式是调用 AssumeRole API 并在可选的 Policy 参数中包含权限边界策略作为 API 调用的一部分。例如,假设将以下策略作为该 API 调用的参数传递。担任角色的用户将只具备执行以下操作的权限:

  • 列出 productionapp 存储桶中的所有对象。

  • 获取 productionapp 存储桶中的对象或向其中上传对象。

在以下策略中,s3:DeleteObject 权限已被筛选掉,因此,未向代入角色的用户授予 s3:DeleteObject 权限。该策略为角色设置权限边界,以便它覆盖角色上的任何现有权限策略。

例 通过 AssumeRole API 调用传递的策略

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws-cn:s3:::productionapp" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws-cn:s3:::productionapp/*" } ] }

基于资源的策略

某些 AWS 资源支持基于资源的策略,这些策略提供另一种机制用于定义影响临时安全凭证的权限。仅几种资源(如 Amazon S3 存储桶、Amazon SNS 主题和 Amazon SQS 队列)支持基于资源的策略。以下示例是前例的扩展,其中使用了一个名为 productionapp 的 S3 存储桶。以下策略被附加到该存储桶。

将下面的策略附加至 productionapp 存储桶后,所有 用户的删除该存储桶中对象的权限均会遭拒 (请留意该策略中的 Principal 元素)。这包括所有担任角色的用户 (即使角色权限策略授予了 DeleteObject 权限)。显式 Deny 声明始终优先于显式 Allow 声明,并且设置为权限边界的策略仍会覆盖存储桶策略。

例 存储桶策略

{ "Version": "2012-10-17", "Statement": { "Principal": {"AWS": "*"}, "Effect": "Deny", "Action": "s3:DeleteObject", "Resource": "arn:aws-cn:s3:::productionapp/*" } }

有关 AWS 如何对多个策略进行合并和评估的更多信息,请参阅策略评估逻辑