【问题标题】:Difference between IAM role and IAM user in AWSAWS 中 IAM 角色和 IAM 用户的区别
【发布时间】:2018-02-22 06:59:36
【问题描述】:

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

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

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

他们说 IAM 角色不能直接向 AWS 服务发出请求是什么意思?我可以登录 AWS 控制台(Web 控制台)并创建堆栈等,所以不能这样。

【问题讨论】:

  • 我理解对FAQ的担忧,但我认为我们应该参考详细的文档来掌握这个概念。来自文档“此外,角色没有与之关联的任何凭据(密码或访问密钥)。相反,如果将用户分配给角色,则会动态创建访问密钥并将其提供给用户”docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html跨度>
  • 为用户分配一个角色听起来像是分配一个组,这似乎只会让事情变得更加复杂。
  • 用户和角色的区别是一样的
  • docs.aws.amazon.com/IAM/latest/UserGuide/id.html 在何时使用 IAM 用户和 IAM 角色方面有非常有用的区别和指导。

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


【解决方案1】:

要了解区别,我们先来了解一下IAM基础知识

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

这里是术语

  • 用户 - 最终用户为人着想

  • 组-一组权限(策略)下的一组用户

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

用户和角色使用授权策略。请记住,除非您通过策略允许某些操作,否则用户和角色无法执行任何操作。

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

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

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

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      AWS 中的一切都是 API

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

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

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

      IAM 用户 - 在 IAM 的上下文中,用户是一个“永久”命名的操作员(人或机器)。需要注意的重要一点是,它的凭据(凭据可能是用户名密码或访问密钥或密钥)是永久的,并且与该指定用户保持一致。因此,AWS 知道该用户的身份验证方法(用户名密码身份验证方法或密钥方法等)是什么(作为其永久存在并与用户保持一致)。

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

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

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

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

      【讨论】:

      • 解释得很好!
      • 我不认为你在解释 IAM 用户和角色之间的实际区别
      • 这是迄今为止最好的解释
      【解决方案4】:

      他们说 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 更新了我的答案。
      • @ IAM 角色与 IAM 策略有何不同? IAM 角色是一组可以与用户、第 3 方应用程序等相关联的功能,但 IAM 策略是一组与控制访问权限的资源相关联的权限。有什么不同?
      • 我相信 IAM Policy 用于授予资源、代表您访问其他资源的权限。例如,AWS Glue 需要代表您访问 S3 的权限。因此,您创建一个策略并让 AWS Glue 访问 AWS S3。
      • IAM 角色是否允许分配给 IAM 用户?我不知道该怎么做。
      【解决方案5】:

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

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

      他们说 IAM 角色不能直接向 AWS 服务发出请求是什么意思?

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 这听起来像是从“官方描述”中粘贴的。不幸的是,它并没有使它更清楚。我的想法更像是在实际方面有什么区别 - 我可以对 IAM 用户做什么,而我无法使用 IAM 角色。
        • IAM 用户是你,IAM 角色是你能做的!
        猜你喜欢
        • 2019-05-10
        • 2020-07-01
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 2018-11-10
        • 2018-08-19
        • 2016-08-27
        相关资源
        最近更新 更多