【问题标题】:Can AWS IAM roles be used for app running outside AWS?AWS IAM 角色能否用于在 AWS 之外运行的应用程序?
【发布时间】:2021-12-07 10:07:15
【问题描述】:

所以我认为最简单的解决方案是我的问题是将 AWS 用于所有事情,但我想了解什么是可能的:

我了解 IAM 角色可以与 EC2 或 Lambda 等 AWS 服务相关联,以便在该服务中运行的应用程序/函数可以检索凭证以签署对其他 AWS 服务的 API 请求。 我以前有一个在 Heroku 上运行并使用 Amazon S3 的应用程序。目前,我为此应用程序设置了一个 IAM 用户,该用户使用与 IAM 用户帐户关联的访问密钥签署对 AWS API 的请求。我认为最佳实践是使用 IAM 角色而不是用户进行应用程序源代码 AWS API 调用,但是是否可以为托管在 AWS 之外的应用程序进行设置,或者我需要将应用程序迁移到 AWS EC2为了使用 IAM 角色?

【问题讨论】:

    标签: amazon-web-services authentication heroku amazon-iam


    【解决方案1】:

    应用程序的托管位置无关紧要,但要承担 IAM 角色,您将需要 IAM 凭证(鸡和蛋)。通常,您会为您的应用程序设计一种安全的方式来检索这些基本凭据。这是在 AWS 之外运行计算的一个缺点(因为它不能自动承担 IAM 角色)。

    一种选择是创建一个 IAM 用户,该用户的唯一权限是能够担任给定的 IAM 角色。在 AWS 之外,将这些 IAM 用户凭证安全地提供给您的应用程序,并让应用程序承担 IAM 角色,最好使用 ExternalId,它本身也被您的应用程序安全存储和安全检索。此外,您还可以manage access to the IAM role,例如定义哪些委托人可以担任该角色,以及在哪些条件下。

    【讨论】:

    • 谢谢。因此,如果计算实例在 AWS 内部,它可以自动获取 IAM 凭证并承担 IAM 角色,但如果它在应用程序外部,则需要提供 IAM 用户凭证,例如通过环境/配置变量?我理解正确吗?
    • 是的。在 AWS 中启动的所有计算都可以配置为允许启动的 AWS 服务代表您承担 IAM 角色(这就是为什么 IAM 角色需要一个信任策略来说明哪些委托人(例如 AWS 服务)可以承担该角色)。在 AWS 之外,您需要一种方法让您的应用程序获取 IAM 凭证(或者您需要通过 AWS 托管的计算 API 代理您的应用程序的请求,因此可以承担角色并代理相关的 AWS API 调用)。见Requesting temporary security credentials
    【解决方案2】:

    来自Heroku docs

    由于 S3 凭据的敏感性,您永远不应将它们提交给版本控制。相反,将它们设置为将使用它们的 Heroku 应用程序的配置变量的值。

    使用heroku config:set 设置两个键

    heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy
    Adding config vars and restarting app... done, v21
      AWS_ACCESS_KEY_ID     => xxx
      AWS_SECRET_ACCESS_KEY => yyy
    

    以上内容符合 AWS 自己管理 AWS 访问密钥的最佳实践,特别是 not embedding access keys directly in code

    您不能使用 IAM 角色,因为它是由 AWS 在 AWS 之外自动获取的,而无需专门指定凭据。

    您的下一个最佳选择是环境变量(如上所述),为具有角色granting the least privilege 的用户指定他们需要从 S3 读取的文件所需的访问密钥 ID 和秘密访问密钥,例如特定的存储桶名称、特定的文件,如果可能的话,甚至是 specific IP addresses 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-14
      • 2019-05-10
      • 1970-01-01
      • 2021-05-30
      • 2018-11-10
      • 2018-08-19
      • 2016-08-27
      • 2021-09-10
      相关资源
      最近更新 更多