"Assume" 在 AWS 中究竟是什么角色?

What is exactly "Assume" a role in AWS?

问题

"Assume" 角色在 AWS 中的确切含义是什么?在哪里提供了明确的定义?

背景

假设一个角色 经常被使用并试图理解定义及其实际含义。

我想当委托人(IAM 用户、EC2 实例中的应用程序 运行ning 等调用操作来访问 AWS 资源)需要调用操作来访问 AWS 资源时:

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

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

    • EC2 IAM 配置文件中的所有 IAM 角色
    • 代入角色调用中请求的 IAM 角色和策略
    • EC2 用户被授予的 IAM 角色

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

  3. AWS 将原则的角色切换为确定的角色。

当第 3 步发生时,表示 "the principal has assumed the role"。这是正确的吗?

研究

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.

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

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

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

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

担任角色意味着要求安全令牌服务 (STS) 为您提供一组临时凭据——角色凭据——特定于您要担任的角色。 (具体来说,一个新的 "session" 担任该角色。)

您可以选择在此请求中包含一项政策,该政策将用于将临时凭证的权限限制为角色政策所允许的一部分。

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

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

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

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

没有。您指定要承担的角色。

当 "you" 是 EC2 实例上的代码 运行,并且实例具有实例角色时,EC2 基础设施实际上代表实例调用 assume-role,您可以获取来自 instance metadata service 的临时凭据。这些凭据只能从实例内部访问,但不会存储在实例上。

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

在任何一种情况下,您都可以使用这些凭据调用代入角色并代入不同的角色,但在大多数环境中没有必要这样做。

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:

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

All the IAM roles from the EC2 IAM profile

An instance profile can only include one role.

IAM roles and policies requested in the assume-role call

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

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

没有。如上所述,您在调用 assume-role 时要求指定角色。

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

没有。 使用提供的临时凭证进行切换。

我为自己创建了下图,以了解什么是在 AWS 中担任角色。希望您也会发现它对您有所帮助。

在图中,我把它分为 3 个步骤:

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

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

Typically, you use AssumeRole within your account or for cross-account access. ... Users in the same account as the role do not need explicit permission to assume the role.
Source: https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html