AWS中IAM角色和IAM用户之间的差异

时间:2017-09-13 14:04:28

标签: amazon-web-services amazon-iam federated-identity

IAM角色和IAM用户之间有什么区别? IAM FAQ有一个条目解释它,但它含糊不清,不太清楚:

  

IAM用户具有永久性长期凭据,用于直接与AWS服务交互。 IAM角色没有任何凭据,也无法向AWS服务发出直接请求。 IAM角色应由授权实体承担,例如IAM用户,应用程序或AWS服务(如EC2)。

我认为IAM角色用于联合登录(例如,使用带有SAML令牌的IdP),并且他们没有像常规IAM用户那样可以下载的永久访问密钥(" IAM角色没有任何凭据" part)。

当他们说IAM角色无法直接向AWS服务发出请求时,他们的意思是什么?我可以登录AWS控制台(Web控制台)并创建堆栈等,因此它不可能。

6 个答案:

答案 0 :(得分:11)

要了解其中的差异,让我们通过IAM基础知识

IAM控制:谁(身份验证)可以在您的AWS账户中执行什么(授权) 。 使用IAM进行身份验证(who)完成了用户/组和角色,而授权(what)由策略完成。

这里的术语

  • 用户 - 最终用户考虑人
  • 组 - 一组权限(策略)下的一组用户

  • 角色 - 用于在一段时间内向特定参与者授予特定权限。这些参与者可以通过AWS或某些可信赖的外部系统进行身份验证。

用户和角色使用策略进行授权。请记住,在您允许使用某项政策执行某些操作之前,用户和角色无法执行任何操作。

回答以下问题,您将区分用户和角色?

  • 可以有密码吗?是 - >用户,否 - >作用
  • 可以有访问密钥吗?是 - >用户,否 - >角色
  • 可以属于一个团体吗?是 - >用户,否 - >角色
  • 是否可以与AWS资源相关联(例如EC2实例)?否 - GT;用户,是 - >角色

AWS支持3种不同场景的角色类型

  • AWS服务角色(例如:EC2,Lambda,Redshift,...)
  • 跨账户访问:向其他AWS账户的用户授予权限,无论您是否控制这些账户。
  • 身份提供商访问权限:向受信任的外部系统验证的用户授予权限。 AWS支持两种身份联合:      - 基于Web的身份,如Facebook,Goolge-IAM支持通过OpenID Connect进行集成      - SAML 2.0身份,例如Active Directory,LDAP。

要了解角色是什么,您需要阅读其用例,我不想重新发明轮子所以请阅读以下AWS文档: https://aws.amazon.com/blogs/security/how-to-use-a-single-iam-user-to-easily-access-all-your-accounts-by-using-the-aws-cli/

https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html

希望它有所帮助。

答案 1 :(得分:9)

  

当他们说IAM角色无法直接向AWS服务发出请求时,他们的意思是什么?我可以登录AWS控制台(Web控制台)并创建堆栈等,因此它不可能。

是IAM用户(附带一些IAM角色)。

将IAM角色视为功能

您提供IAM用户功能(例如" 可以创建Lambda功能"," 可以上传到S3 " )。

关于联合用户的说明

来自http://docs.aws.amazon.com/IAM/latest/UserGuide/id.html

  

可以将角色分配给使用外部身份提供程序而非IAM登录的联合用户。 AWS使用身份提供程序传递的详细信息来确定将哪个角色映射到联合用户。

因此,联合用户类似于您可以将IAM角色附加到的IAM用户。除了您有外部身份提供者。

从技术上讲,当您登录AWS控制台时,您没有使用角色作为您的身份。您正在使用联合用户帐户(具有自己的附加角色)作为您的身份。

答案 2 :(得分:8)

IAM中的主要参与者是用户角色政策。而您需要了解的AWS并永远不会忘记的是

  

AWS中的一切都是API

要执行任何API或其任何方法,首先我们必须进行身份验证,然后授权该特定用户/组/角色。

Ex:操作员想要将一个对象放到S3存储桶中。此过程通过AWS内的一组API调用进行。基本上,我们调用S3 API及其将对象放入特定存储区的方法(例如方法put_object_in_s3)。为此,我们可能要提供存储桶,对象的名称,最重要的是,我们需要提供一组凭证(用户名和密码或私钥等),以告诉AWS API Engine该用户/组/角色是。

API引擎要做的第一件事是,查看与API一起发送的那些凭证。然后,它将验证那些(表明它们是正确的,活动的)凭据,以表明此请求来自实际的有效用户,组或角色。然后,API引擎要做的是(因为它现在知道谁发送了此API请求),它将获取与特定操作员(用户或角色)相关联的策略文档,并将它们作为单个视图进行评估。也就是说,我们检查API中调用的操作是否已授权给该操作员。

IAM用户-在IAM中,用户是“永久”命名的操作员(人或机器)。需要注意的重要一点是,它的凭证(凭证可能是用户名密码,访问密钥或秘密密钥)是永久的,并且与该命名用户一起使用。因此,AWS知道该用户的身份验证方法(用户名密码身份验证方法或私钥方法等)是什么(作为其永久身份并留在用户手中)。

IAM组-如上图所示,组是用户的集合。请注意,用户也可以分为多个组。

IAM角色-角色不是权限!!!。就像IAM用户和组一样,角色也是一种身份验证方法。作为用户,角色也是操作员(可以是人,也可以是机器)。区别在于带有角色的凭据是临时的。

策略文档-如前所述,角色不是“权限”。 AWS中的权限完全由称为Policy Documents的对象处理。策略文档是JSON文档。策略文档可以直接附加到用户,组或角色。当策略文档附加到上述操作员中的任何一个时,则只有他们获得许可才能执行操作。 策略文档列出了以下内容:特定API或API的通配符组(针对这些资源被列入白名单)以及这些API执行的条件(例如仅当此用户,组或角色在家庭网络中时允许,或者在任何位置都允许,仅允许在一天的特定时间等)

  

最后但并非最不重要的一点是,AWS中的身份验证是通过(IAM用户,   组和角色),而授权则由策略完成。

答案 3 :(得分:5)

IAM用户是可由个人或应用程序使用的帐户。用户具有登录凭据并使用分配给该帐户的权限执行操作。

IAM角色是资源可以假设的虚拟角色。例如,EC2实例可以承担角色并使用分配的权限执行AWS命令。其他服务也是如此,例如API网关,Lambda,Kinesis,RDS等。

  

当他们说IAM角色无法直接向AWS服务发出请求时,他们的意思是什么?

角色本身无法执行任何任务,因为必须由某人或某事来承担。有人也可以是通过身份联合登录的人,然后担任角色。

答案 4 :(得分:0)

IAM用户 - 访问AWS资源的用户/应用程序 IAM角色 - 可适用于用户或资源的权限/策略集。

您也可以将角色应用于IAM用户和AWS资源。 例如,将IAM角色应用于Lambda函数。功能只能与IAM角色一起使用。

答案 5 :(得分:0)

IAM 角色是具有策略定义的特定访问权限的实体。那个访问是。它没有永久凭证(访问密钥和秘密访问密钥)——它适用于“AssumeRole”方法,其中授予访问不同 AWs 资源的令牌。

IAM 用户拥有永久访问密钥和秘密访问密钥,我们可以定义对资源的权限,IAM ROLE 可以由 IAM USER 承担,因为它拥有密钥——它可以一直访问资源...