我有一个角色附加到 EC2 实例的 LaunchConfiguration,该角色赋予 EC2 实例权限来执行某些操作,例如执行 Cloudwatch 日志(上下文对问题并不重要)。在 Cloudformation 中,角色如下所示:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: 'ec2.amazonaws.com'
Action: 'sts:AssumeRole'
Policies: ...
如果我在 AWS 控制台中查看角色,在“信任关系”下会显示“受信任实体:身份提供商 ec2.amazonaws.com”:
我假设 CloudformationAssumeRolePolicyDocument.Principal.Service
映射到控制台中的“受信任实体”(顺便说一句,这是一种奇怪的命名方式,因为我读过“主要的”在 IAM 中有不同的含义,但无论如何...)。我绞尽脑汁试图拼凑出到底发生了什么。我的问题是:
- IAM“可信实体”到底是什么?
- 它如何成为实体‘ec2.amazonaws.com’“承担角色”?服务的概念‘ec2.amazonaws.com’假设这个卷轴与我不太相符。
- 实体在什么意义上‘ec2.amazonaws.com’是“提供身份”吗?
- 在哪里可以找到这些所谓可信实体的完整列表?
答案1
- 受信任实体是指可以承担任何给定角色的服务。如果您将 EC2 设为受信任实体,则您无法承担使用权限的角色,lambda 无法承担该角色,只能承担 EC2 实例。AWS 中的大多数服务都是通过承担角色来获得权限的。许多服务可以为您自动配置此功能,这在人们学习 AWS 时很常见。当您在安全环境中工作时,设置角色和权限变得相当关键。例如,如果您为 EC2 授予具有管理员权限的角色,并且有人破坏了该实例,那么他们实际上就拥有了您 AWS 帐户的管理员权限,这就是您为所有资源/角色授予最少权限的原因。
- 当您配置 EC2 实例或 Lambda 函数等资源时,您会告诉它要承担什么角色。然后,该 EC2 实例/函数/等具有与该角色相关的权限。
- 这仅意味着允许 EC2 实例承担该角色。当 EC2 实例启动时,它会识别它想要承担的角色。IAM 验证该角色是否允许承担该角色,以及是否允许实例启动。
- 这里有一个 AWS 服务主体列表这里。当您在控制台中点击“创建角色”时,您会获得受信任实体的列表。当我需要将一个实体放入我的 CloudFormation 时,我只需单击它,然后从 json 中复制并粘贴它。
AssumeRolePolicyDocument 指定谁可以担任该角色。我怀疑您可以指定多个实体可以担任一个角色,但实际上我为每个服务都编写了一个角色。
您可以将 IAM 角色视为与人的角色类似。我作为“XYZ 公司架构师”的角色赋予我进入办公室、登录系统等权限。如果我担任警察的角色,我拥有其他权利,例如进入警察局、逮捕人员等。