问题
究竟“假设”角色在AWS中意味着什么?提供了明确的定义?
背景
经常使用 Assuming a role 并尝试理解定义及其实际含义 .
我想当一个主体(IAM用户,在EC2实例中运行的应用程序等调用访问AWS资源的操作)需要调用访问AWS资源的操作时:
- AWS(API?或AWS中的某些授权运行时?)标识可以授予主体的角色 .
例如如果指定EC2用户执行assume-role API调用并运行访问IAM配置文件所附加到的EC2实例中的AWS资源的应用程序,则:
-
EC2 IAM配置文件中的所有IAM角色
假设角色调用中请求的 -
IAM角色和策略
-
授予EC2用户的IAM角色
-
AWS从角色中找到角色,该角色具有允许原则对资源执行操作的策略(操作,资源) .
-
AWS将原则的角色切换为已识别的角色 .
当第3步发生时,就说“委托人已经担任了这个角色” . 它是否正确?
研究
在IAM用户,应用程序或服务可以使用您创建的角色之前,您必须授予切换到该角色的权限 . 您可以使用附加到IAM用户组之一或用户自身的任何策略来授予必要的权限 .
2 回答
假设一个角色意味着要求安全令牌服务(STS)为您提供一组临时凭证 - 角色凭证 - 特定于您要承担的角色 . (具体来说,是一个具有该角色的新“会话” . )
您可以选择包含具有此请求的策略,该策略将用于将临时凭证的权限限制为角色策略允许的子集 .
然后,您使用这些凭据进行进一步的请求 . 这些凭据看起来类似于具有access-key-id和secret的IAM用户凭证,但访问密钥以
ASIA
而不是AKIA
开头,并且还有第三个元素,称为安全令牌,必须包含在使用临时凭证签名的请求中 .当您使用这些临时凭证发出请求时,您拥有与该角色关联的权限,而不是您自己的(如果有的话),因为您已经使用了新的身份 . CloudTrail可用于将角色凭证追溯回承担角色的用户,但服务不知道谁在使用凭据 .
tl;dr: Assuming a role means obtaining a set of temporary credentials which are associated with the role and not with the entity that assumed the role.
不 . 您指定要承担的角色 .
当"you"是在EC2实例上运行的代码,并且该实例具有实例角色时,EC2基础结构实际上代表该实例调用assume-role,并且您可以从instance metadata service获取临时凭证 . 这些凭据只能从实例中访问,但它们不存储在实例中 .
运行Lambda函数时,Lambda基础结构会联系STS并将临时凭据放在environment variables中 . 同样,函数可以访问这些凭证,而不是存储在函数内部 .
在任何一种情况下,您都可以使用这些凭据调用assume角色并承担不同的角色,但在大多数环境中这不是必需的 .
AWS不了解EC2用户 . 实例上运行的所有内容都可以访问实例角色 .
An instance profile can only include one role .
您要求只承担一个角色 . 您不需要请求策略 - 如果您希望临时凭证的权限少于角色凭据允许的权限,则只需指定策略 . 如果您需要在不受信任的位置运行代码(例如浏览器或应用程序中的代码)以便能够使用凭据对请求进行签名,则可能会执行此操作 .
不是 . 如上所述,当您调用assume-role时,您会要求具体的角色 .
不可以 . 您可以使用提供的临时凭证进行切换 .
您在承担角色时提到的步骤是 correct .
这里重要的一点是IAM角色的信任关系配置,您可以在其中授予每个承担角色的IAM用户,应用程序或服务 . 这是您授予承担特定角色的权限的地方 .
这在许多方面都很重要,它可以控制谁可以担任角色,并且重要的是不仅要提供对角色的最小访问权限,还要授予可以担任该角色的最少量的实体 .