AWS中IAM角色和IAM用户的区别

75
IAM角色和IAM用户有什么区别?IAM FAQ中有一篇文章对此进行了解释,但是含义模糊不清:
IAM用户具有永久的长期凭证,并用于直接与AWS服务交互。IAM角色没有任何凭据,无法直接请求AWS服务。IAM角色旨在由授权实体(如IAM用户、应用程序或AWS服务,如EC2)来承担。
我认为IAM角色用于联合登录(例如使用SAML令牌的IdP),并且它们没有像常规IAM用户那样可以下载的永久访问密钥(“IAM角色没有任何凭据”部分)。
当他们说IAM角色不能直接请求AWS服务时,他们是什么意思?我可以登录到AWS控制台(Web控制台)并创建堆栈等,所以这不可能是真的。

我理解关于常见问题的担忧,但我认为我们应该参考详细的文档来掌握概念。从文档中可以看到:“此外,角色没有与之关联的凭据(密码或访问密钥)。相反,如果将用户分配给角色,则会动态创建访问密钥并提供给用户。” http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html - sudo
1
给用户分配角色听起来像是分配组,这似乎只会让它更加复杂化。 - samshers
1
相关:AWS IAM 角色 vs 组 - Franklin Yu
用户和角色之间的差异是相同的。 - Channa
https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html提供了非常有用的区分和指南,帮助您确定何时使用IAM用户和IAM角色。 - NAVEEN KUMAR
8个回答

98
为了理解差异,让我们了解IAM的基础知识。IAM用于控制在AWS账户中“谁”(身份验证)可以执行什么操作(授权)。使用IAM进行身份验证(即“谁”)的用户/组和角色,而使用策略进行授权(即“什么”)。以下术语适用:
- 用户:终端用户认为是人员。 - 组:一组用户(即权限集合)。 - 角色:用于在指定时间段内向特定运行者授予特定权限。这些运行者可以由AWS或某些受信任的外部系统进行身份验证。
用户和角色使用策略进行授权。请记住,除非使用策略允许某些操作,否则用户和角色无法执行任何操作。回答以下问题,以区分用户和角色:
- 可以设置密码吗?是-> 用户,否-> 角色 - 可以拥有访问密钥吗?是-> 用户,否-> 角色 - 可以隶属于一个组吗?是-> 用户,否 -> 角色 - 可以与AWS资源关联(例如EC2实例)吗?否-> 用户,是-> 角色
AWS支持3种角色类型,用于不同场景:
- AWS服务角色(例如:EC2,Lambda,Redshift等) - 跨账户访问:向来自其他AWS账户的用户授予权限,无论您是否控制这些账户。 - 身份提供者访问:向由受信任的外部系统进行身份验证的用户授予权限。AWS支持两种身份联合方式:
- 基于Web的身份,例如Facebook,Google - IAM通过OpenID Connect支持集成 - SAML 2.0身份,例如Active Directory,LDAP。
要了解角色是什么,您需要阅读其用例,请参阅以下AWS文档:如何使用单个IAM用户通过AWS CLI轻松访问所有帐户

IAM角色和SAML 2.0基于身份提供者:设置步骤

希望对您有所帮助。


1
我认为用实例来开始会比使用词典式的定义更好。我猜了解差异和术语的人会发现这个答案非常正确和准确(不需要它的专家们会点赞),但对于一个困惑而在学习中的人没有帮助: 作为开发者的Jack想要部署需要对特定S3存储桶具有写入访问权限的lambda函数,...然后你可以提到哪个是用户、组、策略、角色、IAM等等。 - Ali Khosro

58

IAM 中的主要参与者包括用户角色策略。要理解 AWS 的一点非常重要的事情就是:

AWS 中的所有内容都是 API

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

例如:操作员想将对象放入 S3 存储桶中。此过程是在 AWS 中通过一组 API 调用发生的。我们基本上调用 S3 API 并调用其方法将对象放入特定存储桶中(比如说 put_object_in_s3 方法)。为此,我们可能需要提供存储桶的名称、对象以及最重要的是需要提供一组凭据(用户名和密码或密钥等),以便告诉 AWS API 引擎这个用户/组/角色是谁。

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

IAM用户 - 在IAM的上下文中,用户是一个“永久”的命名操作员(人或机器)。需要注意的是,它的凭证(凭证可能是用户名密码、访问密钥或秘密密钥)是永久性的,并且与该命名用户在一起。因此,AWS知道这个用户的身份验证方法(如用户名密码身份验证方法或秘密密钥方法等),因为它是永久的并与用户在一起。

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

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

策略文档 - 如前所述,角色不是权限。在AWS中,权限完全由称为策略文档的对象处理。策略文档是JSON文档。策略文件可以直接附加到用户、组或角色上。当策略文档附加到任何上述操作员时,它们才可以执行相应的操作。

一份策略文件列出以下内容:要针对哪些资源白名单特定的API或通配符API组,以及这些API执行的条件(例如只允许此用户、组或角色在家庭网络中操作,允许从任何位置操作,仅允许在某些时间段内操作等)。

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


2
讲解得非常清楚! - FearlessHyena
1
我认为你没有解释IAM用户和角色之间的实际区别。 - explorer
2
这是目前为止最好的解释。 - Owolabi Ezekiel Tobiloba
有点误导:IAM组不是主体。它们只是应用于其成员用户和角色的策略集合。 - user3553031

39

当他们说 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控制台时,您并未使用角色作为身份。您正在使用自己的联合用户帐户(附有其自己的角色)作为您的身份。


但是我没有永久的访问密钥,我使用联合登录进行登录。IAM用户不应该拥有永久的访问密钥吗? - sashoalm
@sashoalm 我更新了我的回答。 - Noel Llevares
1
IAM角色和IAM策略有何不同?IAM角色是一组能力,可以与用户、第三方应用程序等相关联,而IAM策略是与资源相关联的权限集,控制对其的访问。它们有何不同之处? - Dhiwakar Ravikumar
我相信IAM策略用于授予资源代表您访问其他资源的权限。例如,AWS Glue需要访问S3以代表您进行操作。因此,您可以创建一个策略并允许AWS Glue访问AWS S3。 - deepak.prathapani
IAM角色可以分配给IAM用户吗?我还不知道如何操作。 - Ryan Lyu

8

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

IAM角色是资源可以扮演的虚拟身份。例如,EC2实例可以扮演角色并使用分配的权限执行AWS命令。其他服务如API网关、Lambda、Kinesis和RDS等也是一样。

当他们说IAM角色不能直接请求AWS服务时,他们是什么意思?

角色本身无法执行任何任务,因为它必须由某人或某物扮演。某人也可以是通过身份联合登录然后扮演角色的人。


3

我对AWS几乎是新手,但我已经在后端应用程序中实现了类似的概念。因此,我会尝试从新手角度更简化这个问题。

  • IAM用户 - 这是一个在AWS IAM平台注册的实际帐户。这意味着这是一个实际存在的人/应用程序实体。请注意,该实体无法执行任何操作,只是存在。就像当我注册一个应用程序时,我的用户实体被创建,并且我可以使用提供的凭据登录并拥有个人资料。
  • IAM组 - 这是一组特定用户的集合。虽然这也可以给予身份识别,但重点是组成员的特定个体。例如,我们根据其专业技能和技能水平将员工分组到组织中的部门。
  • IAM策略 - 这部分似乎最容易理解。这是以JSON格式清楚地表达资源的特定规则/权限/访问的特定政策。每个策略都针对特定资源。资源可以是任何东西,从EBS卷、Lamda函数甚至IAM本身。
  • IAM角色 - 这就像一个具有特定职责的头衔,即具有此头衔的任何人都将具有一组策略(权限/访问)。例如,如果我们有一个“笔记记录员”的头衔,不同部门的任何人都可以被临时分配这个头衔,在会议、期间等。只有拥有此权限的人才能访问笔记应用程序。但是,我们可以有一些适合于一组的角色,例如,所有会计部门成员都可以拥有会计师的头衔,从而获得对账簿的访问权限。但是我们还可以有另一个名为“主管”的头衔,该头衔拥有删除账簿的访问权限,并且跨越所有部门。
  • 联合用户 - 这些也是实体,但在公司(IAM)中没有个人资料。它们就像可以通过联合平台获得信任并获得特定角色或头衔的承包商。好处在于,如果联合平台替换了用户,则无需停用旧用户并授予新用户访问权限,因为平台具有访问权限,而不是“用户”。

0

IAM角色是一个实体,其具有由策略定义的特定访问权限。该访问权限不具有永久凭证(访问密钥和秘密访问密钥)-它使用“AssumeRole”方法工作,其中授予令牌以访问不同的AWS资源。

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


0

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

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


那听起来像是从“官方描述”中复制粘贴的。不幸的是,这并没有让问题更加清晰。我想更多地了解实际应用上的区别——使用IAM用户和使用IAM角色有什么不同之处。 - sashoalm
7
IAM用户指代的是您本人,而IAM角色则对应着您所具备的各种权限! - Kannaiyan

-1

IAM策略权限-读取、写入等)适用于用户、组和角色。

用户-当用户想要访问AWS云中的任何内容时,必须分配IAM策略。

- 当一组用户被分配了共同的IAM策略。

角色 - 它在一个服务想要访问另一个服务时是必需的。服务必须被分配有策略的角色来执行AWS云中的某些操作。换句话说,我们不能直接在服务上分配策略,首先需要创建角色,然后在该角色上分配策略。

注意:角色不是为物理人员使用而设计的,而是仅供AWS服务使用。


不准确:角色也是供人使用的。例如,如果您使用某个SSO系统访问AWS控制台,您的访问可能是通过角色进行的(取决于您的SSO系统的详细信息)。 - user3553031

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接