58

Question

What does exactly "Assume" a role mean in AWS and where is the definitive definition provided?

Background

Assuming a role is frequently used and trying to understand the definition and what it actually means.

I suppose when a principal (IAM user, application running in an EC2 instance, etc which invokes an action to access AWS resource(s)) needs to invoke an action to access an AWS resource:

  1. AWS (API? or some Authorisation runtime in AWS?) identifies the roles which the principal can be granted.

    e.g. if an EC2 user is specified to execute the assume-role API call and run an application which accesses an AWS resources in an EC2 instance to which IAM profile is attached, then:

    • All the IAM roles from the EC2 IAM profile
    • IAM roles and policies requested in the assume-role call
    • IAM roles which the EC2 user is granted

  2. AWS finds a role from the roles which has the policy (action, resource) that allows the principle to do the action on the resource.

  3. AWS switches the role of the principle to the role identified.

When the step 3 has happened, it is said "the principal has assumed the role". Is this correct?

Research

Using IAM Roles

Before an IAM user, application, or service can use a role that you created, you must grant permissions to switch to the role. You can use any policy attached to one of an IAM user's groups or to the user itself to grant the necessary permissions.

4

3 回答 3

69

承担角色意味着要求安全令牌服务 (STS) 为您提供一组临时凭证——角色凭证——特定于您要承担的角色。(特别是具有该角色的新“会话”。)

您可以选择在此请求中包含一个策略,该策略将用于将临时凭证的权限限制为角色策略允许的权限的子集。

然后,您可以使用这些凭据发出进一步的请求。这些凭证看起来类似于带有 access-key-id 和 secret 的 IAM 用户凭证,但访问密钥以 in 开头ASIAAKIA并且还有第三个元素,称为安全令牌,它必须包含在使用临时凭证签名的请求中。

当您使用这些临时凭证发出请求时,您拥有与该角色相关联的权限,而不是您自己的权限(如果您有的话),因为您采用了新身份。CloudTrail 可用于将角色凭证追溯到担任该角色的用户,但否则该服务不知道谁在使用这些凭证。

tl;dr:承担角色意味着获得一组与角色相关联的临时凭证,而不是与承担该角色的实体相关联。

AWS(API?或 AWS 中的一些授权运行时?)标识可以授予委托人的角色。

不,您指定要担任的角色。

当“您”是在 EC2 实例上运行的代码,并且该实例具有实例角色时,EC2 基础设施实际上代表该实例调用了假设角色,您可以从实例元数据服务中获取临时凭证。这些凭证只能从实例内部访问,但它们不存储在实例上。

运行 Lambda 函数时,Lambda 基础设施会联系 STS 并将您的临时凭证放在环境变量中。同样,函数可以访问这些凭据,而无需存储在函数内部。

在任何一种情况下,您都可以使用这些凭据调用承担角色并承担不同的角色,但在大多数环境中这不是必需的。

例如,如果指定 EC2 用户执行假设角色 API 调用并运行应用程序,该应用程序访问附加了 IAM 配置文件的 EC2 实例中的 AWS 资源,则:

AWS 不了解 EC2用户。实例角色可供在实例上运行的所有内容访问。

EC2 IAM 配置文件中的所有 IAM 角色

一个实例配置文件只能包含一个角色

假设角色调用中请求的 IAM 角色和策略

您要求只担任一个角色。您不需要请求策略 - 如果您希望临时凭证的权限少于角色凭证所允许的权限,您只需指定策略。如果您需要在不受信任的地方运行代码(例如浏览器或应用程序中的代码),以便能够使用凭据对请求进行签名,那么您可能会这样做。

AWS 从具有允许原则对资源执行操作的策略(操作、资源)的角色中找到一个角色。

不。如上所述,当您调用假设角色时,您要求一个特定的角色。

AWS 将原则的角色切换为识别的角色。

不会。 可以使用提供的临时凭证进行切换。

于 2018-04-29T04:41:29.263 回答
9

我为自己创建了下图,以了解在 AWS 中扮演的角色究竟是什么。希望您也会发现它很有帮助。

在图中,我将其分为 3 个步骤:

  1. 准备角色(ExecutionRole 和 AssumedRole)
  2. 在账户 A 上创建一个 Lambda 函数(在您的情况下是 EC2)
  3. 执行 Lambda 函数。

该图以跨账户为例,如果在同一账户内,则不需要步骤 1.3。

通常,您在您的账户中使用 AssumeRole 或用于跨账户访问。...与角色在同一帐户中的用户不需要显式权限即可担任该角色。
来源:https ://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html

在此处输入图像描述

于 2019-09-12T12:50:33.160 回答
2

当第 3 步发生时,即表示:“委托人已担任该角色”。这个对吗?

您在担任角色时提到的步骤是正确的。

此处的重点是 IAM 角色的信任关系配置,您可以在其中授予每个 IAM 用户、应用程序或服务来代入该角色。这是您授予承担特定角色的权限的地方。

这在许多方面都很重要,它控制谁可以担任该角色,并且重要的是不仅要提供对角色的最少访问权限,还要授予最少数量的可以担任该角色的实体。

于 2018-04-29T03:06:05.217 回答