在AWS中,IAM角色是一个像IAM用户一样的AWS身份。AWS IAM服务是一个非常复杂的服务,如果不进行明智的配置,会导致潜在的安全问题。它们与政策相连,决定这个身份被允许做什么和不允许做什么。它不是附属于一个人,而是可以由任何需要它的人承担。IAM角色没有像IAM用户那样的长期凭证(密码或访问密钥),而是有临时安全凭证。当用户、应用程序或服务需要访问他们没有权限的AWS资源时,他们会为此目的使用/承担一个特定的角色。然后,临时安全凭证被用于这项任务。
我们将涉及什么?
在本指南中,我们将看到如何使用 "IAM Passrole "权限。作为一个具体的例子,我们将看到如何使用passrole权限连接一个EC2实例和S3桶。
重要术语和概念
AWS服务角色:它是一个由服务承担的角色,以便它可以代表用户或账户持有人执行任务。
EC2实例的AWS服务角色:它是由运行在亚马逊EC2实例上的应用程序承担的角色,以执行该角色所允许的用户账户中的任务。
AWS服务连接的角色:它是一个预定义的角色,直接连接到AWS服务,像RDS服务链接的角色,用于启动RDS DB。
使用Passrole权限来连接EC2实例与S3
许多AWS服务需要一个角色进行配置,这个角色由用户传递/管理给它们。通过这种方式,服务承担/接受角色并代表用户执行任务。对于大多数服务,在配置该服务时需要传递一次角色。用户在向AWS服务传递角色时需要权限。从安全的角度来看,这是一件好事,因为管理员可以控制哪些用户可以将角色传递给服务。"PassRole "权限是由用户授予其IAM用户、角色或组的,用于将角色传递给AWS服务。
为了详细说明前面的概念,考虑一个案例,当一个在EC2实例上运行的应用程序需要访问S3桶。为此,我们可以在这个实例上附加一个IAM角色,这样这个应用就可以获得角色中定义的S3权限。这个应用程序将需要临时凭证来进行验证和授权。当一个角色与运行我们应用程序的实例相关联时,EC2会获得临时安全凭证。然后,这些凭证被提供给我们的应用程序,以访问S3。
要授予IAM用户在启动实例时将角色传递给EC2服务的能力,我们需要三样东西:
- 角色的IAM权限策略,决定角色的范围。
- 附加在角色上的信任策略,允许EC2承担该角色并使用角色内定义的权限。
- IAM用户的IAM权限策略,列出它可以通过的角色。
让我们以一种更务实的方式来做。我们有一个具有有限权限的IAM用户。然后,我们附加一个内联策略来启动EC2实例,并允许将IAM角色传递给一个服务。然后,我们为S3访问创建一个角色;让我们称它为 "S3Access"。并给它附加一个IAM策略。在这个角色中,我们只允许使用AWS管理的 "AmazonS3ReadOnlyAccess "策略来读取S3数据。
创建角色的步骤
第1步:从管理员(root)的IAM控制台,点击 "角色",然后选择 "创建角色"。
第2步:从 "选择受信任实体 "页面,在 "受信任实体类型 "下选择 "AWS服务"。
第3步:在 "使用情况 "下,选择 "其他AWS服务的使用情况 "中的 "EC2 "对应的单选按钮。

第4步:在下一页,指定一个 "AmazonS3R只读访问 "策略。

第5步:给你的角色取个名字(在我们的例子中是 "S3Access")。为这个角色添加一个描述。下面的信任策略会随着这个角色自动创建。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Principal": {
"Service": [
"ec2.amazonaws.com"
]
}
}
]
}
第6步:点击 "创建角色 "来创建角色。

用户的IAM策略
该策略给予IAM用户完整的EC2权限,并允许将 "S3Access "角色与实例关联。
第一步:从IAM控制台,点击政策,然后点击 "创建政策"。
第二步:在新的页面上,选择json标签并粘贴以下代码。
{
"Version": "2012-10-17",
"Statement": [{
"Effect":"Allow",
"Action":["ec2:*"],
"Resource":"*"
},
{
"Effect":"Allow",
"Action":"iam:PassRole",
"Resource":"arn:aws:iam::Account_ID:role/S3Access"
}]
}
将粗体字 "Account_ID"替换为用户的账户ID。
第三步:(可选)为你的策略给出标签。
第四步:给策略取一个合适的名字(在我们的例子中是 "IAM-User-Policy"),然后点击 "Create policy "按钮,把这个策略附加到你的IAM用户。

将 "S3Access "角色附加到EC2实例上
现在,我们将把这个角色附加到我们的实例上。从EC2控制台选择你的实例,进入 "行动>安全>修改IAM角色"。在新的页面上,从下拉菜单中选择 "S3Access "角色并保存它。

验证设置
现在,我们将检查我们的EC2实例是否能够访问由管理员创建的S3桶。登录到EC2实例并安装AWS CLI应用程序。现在,在这个EC2实例上运行以下命令。
$ aws s3ls
再次,从你的本地机器上配置的IAM账户运行之前的命令。你会注意到,该命令在EC2实例上成功执行,但我们在本地机器上得到一个 "拒绝访问 "的错误。

这个错误很明显,因为我们只为EC2实例授予了S3访问权限,而没有为IAM用户和任何其他AWS服务授予访问权限。另一个需要注意的问题是,我们没有让水桶和它的对象公开访问。
总结
在本指南中,我们演示了如何在AWS中使用PassRole权限。我们成功地将EC2连接到S3。如果你想给你的IAM用户授予最少的权限,这是一个非常重要的概念。