如何使用AWS IAM PassRole权限(附实例)

684 阅读5分钟

在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服务的能力,我们需要三样东西:

  1. 角色的IAM权限策略,决定角色的范围。
  2. 附加在角色上的信任策略,允许EC2承担该角色并使用角色内定义的权限。
  3. 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用户授予最少的权限,这是一个非常重要的概念。