什么是"承担"AWS中的角色?

mon*_*mon 18 role amazon-web-services aws-iam

究竟"假设"角色在AWS中意味着什么?提供了明确的定义?

背景

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

我想当一个主体(IAM用户,在EC2实例中运行的应用程序等调用访问AWS资源的操作)需要调用访问AWS资源的操作时:

  1. AWS(API?或AWS中的某些授权运行时?)标识可以授予主体的角色.

    例如,如果指定EC2用户执行assume-role API调用并运行访问IAM配置文件所附加到的EC2实例中的AWS资源的应用程序,则:

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

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

  3. AWS将原则的角色转换为已识别的角色.

当第3步发生时,就说"委托人承担了这个角色".它是否正确?

研究

使用IAM角色

在IAM用户,应用程序或服务可以使用您创建的角色之前,您必须授予切换到该角色的权限.您可以使用附加到IAM用户组之一或用户自身的任何策略来授予必要的权限.

Mic*_*bot 24

假设一个角色意味着要求安全令牌服务(STS)为您提供一组临时凭证 - 角色凭证 - 特定于您要承担的角色.(具体来说,是一个具有该角色的新"会话".)

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

然后,您使用这些凭据进行进一步的请求.这些证书类似于与访问密钥ID和秘密IAM用户凭据,但访问键开始ASIA,而不是AKIA这里面的第三个元素,称为安全令牌,其中必须包含在与临时证书签名的请求.

当您使用这些临时凭证发出请求时,您拥有与该角色关联的权限,而不是您自己的(如果有的话),因为您已经使用了新的身份.CloudTrail可用于将角色凭证跟踪回给担任该角色的用户,但是该服务不知道谁在使用凭据.

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

AWS(API?或AWS中的某些授权运行时?)标识可以授予主体的角色.

不.您指定要承担的角色.

当"你"是在EC2实例上运行的代码,并且实例具有实例角色时,EC2基础结构实际上代表实例调用assume-role,并且您可以从实例元数据服务获取临时凭证.这些凭据只能从实例中访问,但它们不存储在实例中.

运行Lambda函数时,Lambda基础结构会联系STS并将临时凭证放在环境变量中.同样,函数可以访问这些凭证,而不是存储在函数内部.

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

例如,如果指定EC2用户执行assume-role API调用并运行访问IAM配置文件所附加到的EC2实例中的AWS资源的应用程序,则:

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

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

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

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

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

AWS从角色中找到角色,该角色具有允许原则对资源执行操作的策略(操作,资源).

不可以.如上所述,当您调用assume-role时,您会要求具体的角色.

AWS将原则的角色转换为已识别的角色.

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


Xia*_*com 6

我为自己创建了下图,以了解在 AWS 中扮演角色的确切含义。希望您也会发现它很有帮助。

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

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

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

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

在此处输入图片说明