我是 AWS 和 IAM 的新手,并试图了解角色和信任关系。
我完全理解为什么要使用角色、如何创建角色以及它们的用例。
我没有得到的是信任关系步骤。在我见过的几乎所有情况下,它都是一对一的关系。EC2 需要对 EC2 的信任。为什么会有额外的步骤?
如果我创建一个 EC2 实例和一个具有 S3 权限的角色,为什么这还不够?
我是 AWS 和 IAM 的新手,并试图了解角色和信任关系。
我完全理解为什么要使用角色、如何创建角色以及它们的用例。
我没有得到的是信任关系步骤。在我见过的几乎所有情况下,它都是一对一的关系。EC2 需要对 EC2 的信任。为什么会有额外的步骤?
如果我创建一个 EC2 实例和一个具有 S3 权限的角色,为什么这还不够?
角色用于在一段时间内向特定参与者授予特定权限。因此,一个角色需要两件事:权限策略(可以访问哪些资源以及可以采取哪些操作)和信任策略(哪些实体可以承担该角色)。
例如,以下 CloudFormation 代码段创建一个角色 ( MyInstanceRole
),并使用策略 ( MyWritePolicy
) 授予对 S3 存储桶的访问权限,并允许 EC2 实例(Principal
或信任部分)担任该角色:
MyInstanceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
Service: ec2.amazonaws.com
Path: '/'
RoleName: MyInstanceRole
Policies:
- PolicyName: MyWritePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: WriteBackups
Action:
- s3:PutObject
Effect: Allow
Resource: !Join ['', ['arn:aws:s3:::', !Join [ '-', [ 'bucketName', !Ref Environment ] ], '/*' ] ]
在许多情况下,只有一个Principal
,但如果需要,可以有多个(AWS 账户、IAM 用户、IAM 角色、联合用户或假定角色用户)。
现在使用更新的 IAM 控制台更轻松地创建和管理 AWS IAM 角色有一篇方便的博客文章,其中提供了更多详细信息。
TLDR:将 aws 受信任关系视为 aws 服务可以实现(承担角色)您授予的权限。
快速示例:如果我创建了一个角色,该角色包含从 s3 读取存储桶的权限,并且 ec2 是该角色中的受信任关系,则只有 ec2 实例可以实现此角色并且可以访问此 s3 存储桶。例如 rds 不能承担这个角色,因此不能。您授予只有 aws service y可以使用的权限x 。
让我用一些简单的用例来解释它:
我希望能够将一些配置文件从 s3 存储桶下载到我的 Web 应用程序中,该 Web 应用程序在 ec2 实例上运行,并且 s3 存储桶名称是“configuration-for-app”
我正在创建一个名为“my-app-role”的角色,其中包含多个策略,其中一个是 s3 策略,它可以访问我的 s3 amazon 资源“configuration-for-app”并具有仅获取它的明确权限(不删除我,不改变它 - 只是得到它)。由于应用程序在 ec2 上运行 - 这些服务之间的此要求中的受信任关系将是<ec2> -> <s3>
,我在 ec2 上运行的应用程序可以假设角色(my-app-role)并访问(其中包含正确的策略)到 s3 并获得配置文件。
该角色包含此策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"s3:GetObject"
"Resource": "arn:aws:s3:::configuration-for-app/*"
}
]
}
受信任的策略是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
<x>
我授予服务<y>
(运行我的应用程序的我的 ec2 实例)权限(假设角色“my-app-role”)以完成操作<z>
(从角色包含的存储桶“configuration-for-app”中获取 s3 配置文件这个特定的 s3 政策)。
重要 - 如果 aws 中的不同服务(如 rds/elasticsearch/amplify 等)想要承担此角色并获取此应用程序的配置文件,这是不可能的,因为此示例中只有 ec2 实例具有正确的可信策略。