【问题标题】:Using IAM for user authentication使用 IAM 进行用户身份验证
【发布时间】:2012-11-12 06:21:58
【问题描述】:

我已经阅读了很多帖子,其中涉及我认为应该是一个非常常见的用例 - 但没有找到我想要的确切内容,或者无法完成的简单原因。

我在 S3 上有一些文件。我希望能够通过我构建的前端授予某些用户访问某些文件的权限。

到目前为止,我已经做到了:

  • 我在 Django 中构建了前端,使用它的内置用户和组
  • 我有一个存储桶模型,我在其中镜像了我的 S3 存储桶。
  • 我有一个 m2m 关系,从组到代表 S3 权限的存储桶。
  • 用户登录并针对 Django 的用户进行身份验证。
  • 我从 Django 中获取允许用户查看的存储桶列表
  • 我使用 boto 从这些存储桶中获取文件的链接列表并显示给用户。

这可行,但并不理想,而且感觉也不对。我必须保留存储桶的镜像,并且我还必须维护自己的用户/密码和权限列表,因为 AWS 已经内置了所有这些。

我真正想要的是简单地在 IAM 中创建用户并使用 IAM 中的组权限来控制对 S3 存储桶的访问。没有重复的数据或功能。我的应用程序会向用户请求 UN/PW 并使用它连接到 IAM/S3 以提取存储桶和文件的列表,然后向用户显示链接。很简单。

我怎么能,或者为什么我不能?

我看错了吗?

解决这个(我认为)非常常见的用例的“正确”方法是什么?

【问题讨论】:

  • 这是一个有趣的问题,虽然相当复杂。我的第一个问题是,“您拥有或计划拥有多少用户”?
  • 我会有 10-50 个用户。
  • 你找到解决方案了吗?

标签: django amazon-s3 amazon-web-services boto amazon-iam


【解决方案1】:

您应该考虑使用 Amazon Cognito(2014 年发布)为您的用户创建唯一身份并对其进行身份验证,以便安全访问您的 AWS 资源,例如 Amazon S3 或 DynamoDB。

您可以利用 AWS IAM 身份、自定义开发人员身份、Amazon IAM、Facebook、Twitter、Google 等公共身份提供商或任何与 OpenID Connect 兼容的提供商。

这里是如何使用 Amazon Cognito 的高级架构

常见问题解答 - https://aws.amazon.com/cognito/faqs/

【讨论】:

    【解决方案2】:

    你的思路是对的,我们来看看替代方案:

    1. 您的应用程序存储所有用户的 api 密钥和秘密,并将所有内容委托给 AWS IAM 权限系统。 虽然是架构上更简单的解决方案,但细节可能会扼杀它。 您的应用应该是真正安全的,并以 非常 安全的方式托管秘密 api 密钥。 这实际上取决于用例:

      • 如果所有工作都由交互式用户完成 - 那么您的系统可以存储带有用户密码的加密密钥,将其作为登录过程的一部分进行解密。这意味着,如果您的数据库遭到入侵 - 那里没有足够的信息来破坏密钥。
      • 如果系统需要执行后台非交互操作,则需要开发复杂的程序以安全地存储此信息。像RightscaleDome9 这样的公司已经开发了这种流程。 除非您的团队中有安全专家,否则不建议使用此选项。
    2. 您的应用程序使用单个“强”api 密钥连接到 AWS - 但如果允许特定用户对该资源执行该操作,则查询 AWS API。 可悲的是,我不熟悉类似的 AWS api——所以也许其他一些读者想对此发表评论。 这(如果可能)将是最简单、最安全的解决方案。

    3. 扩展您现有的解决方案以使用存储在 AWS 中的数据:用户、组、用户->组分配并使用用户/组策略作为您的权限检查的数据源。 这样,您将与 AWS 进行一些逻辑重复(这很好),但不会出现 真正痛苦的数据重复。

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2014-02-07
      • 2014-06-11
      • 2016-04-13
      相关资源
      最近更新 更多